fff-ancillary-classes.grm

// FILE. . . . . d:/hak/hlt/src/hlt/fot/fuz/syntax/sources/fff-ancillary-classes.grm
// EDIT BY . . . Hassan Ait-Kaci
// ON MACHINE. . Hak-Laptop
// STARTED ON. . Tue Aug 21 05:20:57 2018

// Last modified on Wed Nov 28 15:10:47 2018 by hak

%%


This is the class for terms being partially parsed as syntactic objects and eventually translated into a FirstOrderTerm. N.B.: numbers are not parsed as we consider only symbolic functors.

class SyntacticTerm
{
  String symbol = null;
  Vector body = null;

  Functor functor = null;
  FirstOrderTerm term = null;
  FirstOrderTerm[] arguments = null;

  boolean isVariable = false;

  SyntacticTerm markAsVariable ()
  {
    isVariable = true;
    return this;
  }
  
  SyntacticTerm (String symbol)
    {
      this.symbol = symbol;
    }

  SyntacticTerm (String symbol, Vector body)
    {
      this.symbol = symbol;
      this.body = body;
    }

   final boolean hasBody ()
    {
      return (body != null && !body.isEmpty());
    }

   public String toString ()
    {
      if (!hasBody())
        return symbol;
      
      StringBuffer s = new StringBuffer(symbol);

      s.append("(");
      for (int i=0; i<body.size(); i++)
        {
          s.append(body.get(i));
          if (i<body.size()-1) s.append(",");
        }
      s.append(")");

      return s.toString();
    }

  /* ************************************************************************ */

  

Converts this parsed SyntacticTerm into an actual FirstOrderTerm where functors are registered in the provided Signature and in the provided name -> functor table functorTable.

  FirstOrderTerm canonical (Signature signature, HashMap functorTable)
  {
    if (isVariable)
      return Variable.getVariable(symbol);

    if (!hasBody())
      {
	FuzzyFOTLatticeMain.parser.registerFunctor
	  (symbol,functor = signature.functor(symbol,0));
	return new FirstOrderTermStructure(functor);
      }

    FuzzyFOTLatticeMain.parser.registerFunctor
      (symbol,functor = signature.functor(symbol,body.size()));
    arguments = new FirstOrderTerm[body.size()];
    term = new FirstOrderTermStructure(functor,arguments);

    for (int i = 0; i < arguments.length; i++)
      arguments[i] = ((SyntacticTerm)body.get(i)).canonical(signature,functorTable);
    
    return term;
  }
}

/* ************************************************************************ */


This file was generated on Wed Dec 18 03:39:39 PST 2019 from file fff-ancillary-classes.grm
by the hlt.language.tools.Hilite Java tool written by Hassan Aït-Kaci