/*
* @(#)SetOps.java 21-12-1999
* @author Francesco Geri & Marco Tamanti
*/
package Interpreter.PrologInterpreter;
import Interpreter.Sexp.*;
import Interpreter.Sexp.Utils.*;
/**
* Un oggetto SetOps serve ad inizializzare le tabelle degli operatori e dei termini predefiniti.
*/
public class SetOps {
byte FX = OpSexp.OP_FX;
byte FY = OpSexp.OP_FY;
byte XFX = OpSexp.OP_XFX;
byte YFX = OpSexp.OP_YFX;
byte XFY = OpSexp.OP_XFY;
byte XF = OpSexp.OP_XF;
byte YF = OpSexp.OP_YF;
byte TERM = OpSexp.TERM;
/**
* Costruisce una nuova SetOps.
*
Il costruttore inizializza le variabili:
* SexpHashtable prefixOpSet, postfixOpSet, infixOpSet;
* del NewParser.
* @param p NewParser da inizializzare.
*/
public SetOps(NewParser p) {
if (p == null) return;
try {
p.prefixOpSet = new SexpHashtable();
p.prefixOpSet.put(":-", new OpSexp(":-", 1200, FX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Prefix.UnaryClauseSexp")));
p.prefixOpSet.put("?-", new OpSexp("?-", 1200, FX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Prefix.QuerySexp")));
p.prefixOpSet.put("not",new OpSexp("not", 900, FY,
Class.forName("Interpreter.PrologInterpreter.Sexp.Prefix.NotSexp")));
p.prefixOpSet.put("+", new OpSexp("+", 500, FX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Prefix.Expr.UnaryPlusSexp")));
p.prefixOpSet.put("-", new OpSexp("-", 500, FX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Prefix.Expr.UnaryMinusSexp")));
p.infixOpSet = new SexpHashtable();
p.infixOpSet.put(":-", new OpSexp(":-", 1200, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.ClauseSexp")));
p.infixOpSet.put(";", new OpSexp(";", 1100, XFY,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.OrSexp")));
p.infixOpSet.put(",", new OpSexp(",", 1000, XFY,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.AndSexp")));
p.infixOpSet.put("=", new OpSexp("=", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.UnifySexp")));
p.infixOpSet.put("is", new OpSexp("is", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.IsSexp")));
p.infixOpSet.put("=..", new OpSexp("=..", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.TermToListSexp")));
p.infixOpSet.put("==", new OpSexp("==", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.EqualSexp")));
p.infixOpSet.put("\\==",new OpSexp("\\==",700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.NotEqualSexp")));
p.infixOpSet.put("=:=", new OpSexp("=:=", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.RelExpr.ArEqualSexp")));
p.infixOpSet.put("=\\=",new OpSexp("=\\=",700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.RelExpr.ArNotEqualSexp")));
p.infixOpSet.put(">", new OpSexp(">", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.RelExpr.GreatSexp")));
p.infixOpSet.put("<", new OpSexp("<", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.RelExpr.LessSexp")));
p.infixOpSet.put(">=", new OpSexp(">=", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.RelExpr.GreatEqualSexp")));
p.infixOpSet.put("=<", new OpSexp("=<", 700, XFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.RelExpr.EqualLessSexp")));
p.infixOpSet.put("+", new OpSexp("+", 500, YFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.Expr.PlusSexp")));
p.infixOpSet.put("-", new OpSexp("-", 500, YFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.Expr.MinusSexp")));
p.infixOpSet.put("*", new OpSexp("*", 400, YFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.Expr.MulSexp")));
p.infixOpSet.put("/", new OpSexp("/", 400, YFX,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.Expr.DivSexp")));
// p.infixOpSet.put("//", new OpSexp("//", 400, YFX,
// Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.Expr.IntDivSexp"))); // per ora non esiste
// p.infixOpSet.put("mod", new OpSexp("mod", 300, XFX,
// Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.Expr.ModSexp"))); // per ora non esiste
p.infixOpSet.put("^", new OpSexp("^", 200, XFY,
Class.forName("Interpreter.PrologInterpreter.Sexp.Infix.Expr.ExpOnSexp")));
p.postfixOpSet = new SexpHashtable();
p.TermSet = new SexpHashtable();
p.TermSet.put(".", new OpSexp(".", 2, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.ListSexp")));
p.TermSet.put("functor", new OpSexp("functor", 3, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.FunctorTerm")));
p.TermSet.put("arg", new OpSexp("arg", 3, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.ArgTerm")));
p.TermSet.put("assert", new OpSexp("assert", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.AssertTerm")));
p.TermSet.put("asserta", new OpSexp("asserta", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.AssertaTerm")));
// p.TermSet.put("assertz", new OpSexp("assertz", 1, TERM,
// Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.AssertzTerm")));
p.TermSet.put("retract", new OpSexp("retract", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.RetractTerm")));
p.TermSet.put("retractall", new OpSexp("retractall", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.RetractAllTerm")));
// p.TermSet.put("listingall", new OpSexp("listingall", 0, TERM,
// Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.ListingAllTerm")));
p.TermSet.put("listing", new OpSexp("listing", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.ListingTerm")));
p.TermSet.put("write", new OpSexp("write", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.WriteTerm")));
p.TermSet.put("read", new OpSexp("read", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.ReadTerm")));
p.TermSet.put("atom", new OpSexp("atom", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.AtomTerm")));
p.TermSet.put("atomic", new OpSexp("atomic", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.AtomicTerm")));
p.TermSet.put("number", new OpSexp("number", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.NumberTerm")));
p.TermSet.put("integer", new OpSexp("integer", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.IntegerTerm")));
p.TermSet.put("var", new OpSexp("var", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.VarTerm")));
p.TermSet.put("nonvar", new OpSexp("nonvar", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.NonVarTerm")));
p.TermSet.put("compound", new OpSexp("compound", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.CompoundTerm")));
p.TermSet.put("clause", new OpSexp("clause", 2, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.ClauseTerm")));
p.TermSet.put("true", new OpSexp("true", 0, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.TrueTerm")));
// p.TermSet.put("name", new OpSexp("name", 2, TERM,
// Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.NameTerm")));
p.TermSet.put("setof", new OpSexp("setof", 3, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.SetOfTerm")));
p.TermSet.put("bagof", new OpSexp("bagof", 3, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.BagOfTerm")));
p.TermSet.put("findall", new OpSexp("findall", 3, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.FindAllTerm")));
p.TermSet.put("call", new OpSexp("call", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.CallTerm")));
p.TermSet.put("ground", new OpSexp("ground", 1, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.GroundTerm")));
p.TermSet.put("random", new OpSexp("random", 3, TERM,
Class.forName("Interpreter.PrologInterpreter.Sexp.Terms.RandomTerm")));
}
catch (Exception e) {
//Anche Class.forName() puņ lanciare una eccezione di classe non trovata.
System.out.println("Ops, pardon."+e);
}
}
}