/* * @(#)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); } } }