diff --git a/src/main/java/myutil/intboolsolver/IBSScanner.java b/src/main/java/myutil/intboolsolver/IBSScanner.java new file mode 100644 index 0000000000000000000000000000000000000000..dafd9a00a0515e83fa7b8878a8a9665cec28e660 --- /dev/null +++ b/src/main/java/myutil/intboolsolver/IBSScanner.java @@ -0,0 +1,15 @@ +package myutil.intboolsolver; +import java.util.HashSet; + +public interface IBSScanner< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, + CompState extends IBSParamCompState > extends java_cup.runtime.Scanner { + public void setAttributeClass( IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC); + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(); + public void setExpressionClass( IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _exprC); + public IBSExpressionClass<Spec,Comp,State,SpecState,CompState> getExpressionClass(); + public HashSet<String> getBadIdents(); + public void clearBadIdents(); + public void init(String _s) throws java.io.IOException; + public void init(Spec _spec, String _s) throws java.io.IOException; + public void init(Comp _comp, String _s) throws java.io.IOException; +} diff --git a/src/main/java/myutil/intboolsolver/IBSStdLexer.java b/src/main/java/myutil/intboolsolver/IBSStdLexer.java index 9b7d3b17a821f0bc334a65d4b755c38753bde9b7..4b5ef55fb9f6345c36a9fa2208780e77cd1136a8 100644 --- a/src/main/java/myutil/intboolsolver/IBSStdLexer.java +++ b/src/main/java/myutil/intboolsolver/IBSStdLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 06/04/2023 17:36 */ +/* The following code was generated by JFlex 1.4.3 on 11/04/2023 12:46 */ package myutil.intboolsolver; import java_cup.runtime.*; @@ -8,10 +8,10 @@ import java.util.HashSet; /** * This class is a scanner generated by * <a href="http://www.jflex.de/">JFlex</a> 1.4.3 - * on 06/04/2023 17:36 from the specification file - * <tt>IBSStdLexer.jflex</tt> + * on 11/04/2023 12:46 from the specification file + * <tt>__tmplexer2.jflex</tt> */ -public class IBSStdLexer< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState > implements java_cup.runtime.Scanner { +public class IBSStdLexer< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState > implements IBSScanner<Spec, Comp, State, SpecState, CompState>, java_cup.runtime.Scanner { /** This character denotes the end of file */ public static final int YYEOF = -1; @@ -299,7 +299,7 @@ public void init(Comp _comp, String _s) throws java.io.IOException { attrHandler * * @param in the java.io.Reader to read input from. */ - IBSStdLexer(java.io.Reader in) { + public IBSStdLexer(java.io.Reader in) { this.zzReader = in; } @@ -309,7 +309,7 @@ public void init(Comp _comp, String _s) throws java.io.IOException { attrHandler * * @param in the java.io.Inputstream to read input from. */ - IBSStdLexer(java.io.InputStream in) { + public IBSStdLexer(java.io.InputStream in) { this(new java.io.InputStreamReader(in)); } @@ -602,102 +602,102 @@ public void init(Comp _comp, String _s) throws java.io.IOException { attrHandler zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 16: - { return new Symbol(IBSStdParserSym.DIF); + case 21: + { return new Symbol(IBSStdSymbol.BOOL, Integer.valueOf(exprC.make_bConst(false))); } case 24: break; - case 23: - { yybegin(INTBOOL); return new Symbol(IBSStdParserSym.PARSE_INT); + case 4: + { return new Symbol(IBSStdSymbol.PLUS); } case 25: break; - case 10: - { return new Symbol(IBSStdParserSym.LT); + case 5: + { return new Symbol(IBSStdSymbol.MINUS); } case 26: break; - case 3: - { IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr = - attrHandler.getTypedAttribute(yytext()); - switch(attr.getType()) { - case IBSAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " + yytext()); - case IBSAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0))); - case IBSAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant()))); - case IBSAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute()))); - case IBSAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute()))); - default : throw new Error ("Lexer, BUG : bad attribute type"); - } + case 16: + { return new Symbol(IBSStdSymbol.DIF); } case 27: break; - case 19: - { return new Symbol(IBSStdParserSym.GEQ); + case 13: + { return new Symbol(IBSStdSymbol.RPAR); } case 28: break; - case 8: - { return new Symbol(IBSStdParserSym.MOD); + case 11: + { return new Symbol(IBSStdSymbol.GT); } case 29: break; - case 11: - { return new Symbol(IBSStdParserSym.GT); + case 17: + { return new Symbol(IBSStdSymbol.EQ); } case 30: break; - case 18: - { return new Symbol(IBSStdParserSym.LEQ); + case 2: + { try { return new Symbol(IBSStdSymbol.INT, Integer.valueOf(exprC.make_iConst(Integer.parseInt(yytext()))));} + catch (NumberFormatException nfe) { throw new Exception ("Lexer : Integer Format : " + yytext()); } } case 31: break; - case 17: - { return new Symbol(IBSStdParserSym.EQ); + case 14: + { return new Symbol(IBSStdSymbol.OR); } case 32: break; - case 14: - { return new Symbol(IBSStdParserSym.OR); + case 6: + { return new Symbol(IBSStdSymbol.MULT); } case 33: break; - case 4: - { return new Symbol(IBSStdParserSym.PLUS); + case 19: + { return new Symbol(IBSStdSymbol.GEQ); } case 34: break; - case 21: - { return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(false))); + case 8: + { return new Symbol(IBSStdSymbol.MOD); } case 35: break; - case 13: - { return new Symbol(IBSStdParserSym.RPAR); + case 12: + { return new Symbol(IBSStdSymbol.LPAR); } case 36: break; - case 5: - { return new Symbol(IBSStdParserSym.MINUS); + case 18: + { return new Symbol(IBSStdSymbol.LEQ); } case 37: break; case 22: - { yybegin(INTBOOL); return new Symbol(IBSStdParserSym.PARSE_BOOL); + { yybegin(INTBOOL); return new Symbol(IBSStdSymbol.PARSE_BOOL); } case 38: break; - case 15: - { return new Symbol(IBSStdParserSym.AND); + case 3: + { IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr = + attrHandler.getTypedAttribute(yytext()); + switch(attr.getType()) { + case IBSAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " + yytext()); + case IBSAttributeClass.BoolConst : return new Symbol(IBSStdSymbol.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0))); + case IBSAttributeClass.IntConst : return new Symbol(IBSStdSymbol.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant()))); + case IBSAttributeClass.BoolAttr : return new Symbol(IBSStdSymbol.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute()))); + case IBSAttributeClass.IntAttr : return new Symbol(IBSStdSymbol.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute()))); + default : throw new Error ("Lexer, BUG : bad attribute type"); + } } case 39: break; - case 9: - { return new Symbol(IBSStdParserSym.NOT); + case 20: + { return new Symbol(IBSStdSymbol.BOOL, Integer.valueOf(exprC.make_bConst(true))); } case 40: break; - case 7: - { return new Symbol(IBSStdParserSym.DIV); + case 15: + { return new Symbol(IBSStdSymbol.AND); } case 41: break; - case 6: - { return new Symbol(IBSStdParserSym.MULT); + case 9: + { return new Symbol(IBSStdSymbol.NOT); } case 42: break; - case 12: - { return new Symbol(IBSStdParserSym.LPAR); + case 23: + { yybegin(INTBOOL); return new Symbol(IBSStdSymbol.PARSE_INT); } case 43: break; - case 20: - { return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(true))); + case 7: + { return new Symbol(IBSStdSymbol.DIV); } case 44: break; - case 2: - { try { return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(Integer.parseInt(yytext()))));} - catch (NumberFormatException nfe) { throw new Exception ("Lexer : Integer Format : " + yytext()); } + case 10: + { return new Symbol(IBSStdSymbol.LT); } case 45: break; case 1: @@ -708,7 +708,7 @@ public void init(Comp _comp, String _s) throws java.io.IOException { attrHandler if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; zzDoEOF(); - { return new java_cup.runtime.Symbol(IBSStdParserSym.EOF); + { return new java_cup.runtime.Symbol(IBSStdSymbol.EOF); } } else { diff --git a/src/main/java/myutil/intboolsolver/IBSStdParser.java b/src/main/java/myutil/intboolsolver/IBSStdParser.java index a87ce5b9930e2ab80decedde9ad4b8e02c411f02..94198fc7938c54cfb7b51bcdac818db0680c3514 100644 --- a/src/main/java/myutil/intboolsolver/IBSStdParser.java +++ b/src/main/java/myutil/intboolsolver/IBSStdParser.java @@ -16,7 +16,7 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp, @Override public final Class<?> getSymbolContainer() { - return IBSStdParserSym.class; + return IBSStdSymbol.class; } /** Default constructor. */ @@ -33,16 +33,14 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp, /** Production table. */ protected static final short _production_table[][] = unpackFromStrings(new String[] { - "\000\035\000\002\002\004\000\002\002\004\000\002\002" + - "\004\000\002\003\003\000\002\003\005\000\002\003\005" + + "\000\030\000\002\002\004\000\002\002\004\000\002\002" + + "\004\000\002\003\005\000\002\003\005\000\002\003\005" + + "\000\002\003\005\000\002\003\005\000\002\003\005\000" + + "\002\003\004\000\002\003\003\000\002\004\005\000\002" + + "\004\005\000\002\004\003\000\002\004\005\000\002\004" + + "\004\000\002\004\005\000\002\004\005\000\002\004\005" + "\000\002\004\005\000\002\004\005\000\002\004\005\000" + - "\002\004\003\000\002\005\003\000\002\005\005\000\002" + - "\005\004\000\002\006\005\000\002\006\003\000\002\007" + - "\005\000\002\007\003\000\002\010\003\000\002\010\003" + - "\000\002\010\005\000\002\010\004\000\002\011\005\000" + - "\002\011\005\000\002\011\005\000\002\011\005\000\002" + - "\011\005\000\002\011\005\000\002\011\005\000\002\011" + - "\005" }); + "\002\004\005\000\002\004\005" }); /** Access to production table. */ @Override @@ -51,82 +49,77 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp, /** Parse-action table. */ protected static final short[][] _action_table = unpackFromStrings(new String[] { - "\000\071\000\006\024\004\025\005\001\002\000\010\005" + - "\010\022\027\026\012\001\002\000\014\005\010\021\021" + - "\022\015\026\012\027\013\001\002\000\004\002\007\001" + - "\002\000\004\002\000\001\002\000\010\005\010\022\027" + - "\026\012\001\002\000\016\002\ufff1\011\ufff1\012\ufff1\013" + - "\ufff1\014\ufff1\023\ufff1\001\002\000\040\002\ufff7\004\ufff7" + - "\005\ufff7\006\ufff7\007\ufff7\010\ufff7\011\ufff7\012\ufff7\013" + - "\ufff7\014\ufff7\015\ufff7\016\ufff7\017\ufff7\020\ufff7\023\ufff7" + - "\001\002\000\016\002\ufff0\011\ufff0\012\ufff0\013\ufff0\014" + - "\ufff0\023\ufff0\001\002\000\012\002\001\012\044\013\043" + - "\014\042\001\002\000\014\005\010\021\021\022\015\026" + - "\012\027\013\001\002\000\040\002\ufff8\004\ufff8\005\ufff8" + + "\000\063\000\006\025\004\026\005\001\002\000\010\005" + + "\014\022\020\027\016\001\002\000\014\005\014\021\012" + + "\022\013\027\016\030\015\001\002\000\004\002\007\001" + + "\002\000\004\002\000\001\002\000\030\004\024\005\025" + + "\006\023\007\026\010\022\013\051\014\050\015\054\016" + + "\052\017\055\020\053\001\002\000\014\002\001\011\041" + + "\012\042\013\037\014\040\001\002\000\014\005\014\021" + + "\012\022\013\027\016\030\015\001\002\000\014\005\014" + + "\021\012\022\013\027\016\030\015\001\002\000\010\005" + + "\014\022\020\027\016\001\002\000\016\002\ufff4\011\ufff4" + + "\012\ufff4\013\ufff4\014\ufff4\023\ufff4\001\002\000\040\002" + + "\ufff7\004\ufff7\005\ufff7\006\ufff7\007\ufff7\010\ufff7\011\ufff7" + + "\012\ufff7\013\ufff7\014\ufff7\015\ufff7\016\ufff7\017\ufff7\020" + + "\ufff7\023\ufff7\001\002\000\040\002\ufff8\004\ufff8\005\ufff8" + "\006\ufff8\007\ufff8\010\ufff8\011\ufff8\012\ufff8\013\ufff8\014" + "\ufff8\015\ufff8\016\ufff8\017\ufff8\020\ufff8\023\ufff8\001\002" + - "\000\016\002\ufff3\011\047\012\ufff3\013\ufff3\014\ufff3\023" + - "\ufff3\001\002\000\022\004\032\005\033\013\053\014\054" + - "\015\055\016\056\017\060\020\057\001\002\000\014\005" + - "\010\021\021\022\015\026\012\027\013\001\002\000\040" + - "\002\ufffe\004\ufffe\005\ufffe\006\025\007\026\010\024\011" + - "\ufffe\012\ufffe\013\ufffe\014\ufffe\015\ufffe\016\ufffe\017\ufffe" + - "\020\ufffe\023\ufffe\001\002\000\016\002\uffef\011\uffef\012" + - "\uffef\013\uffef\014\uffef\023\uffef\001\002\000\010\005\010" + - "\022\027\026\012\001\002\000\010\005\010\022\027\026" + - "\012\001\002\000\010\005\010\022\027\026\012\001\002" + - "\000\010\005\010\022\027\026\012\001\002\000\040\002" + - "\ufffa\004\ufffa\005\ufffa\006\ufffa\007\ufffa\010\ufffa\011\ufffa" + - "\012\ufffa\013\ufffa\014\ufffa\015\ufffa\016\ufffa\017\ufffa\020" + - "\ufffa\023\ufffa\001\002\000\010\004\032\005\033\023\034" + - "\001\002\000\010\005\010\022\027\026\012\001\002\000" + - "\010\005\010\022\027\026\012\001\002\000\040\002\ufff6" + - "\004\ufff6\005\ufff6\006\ufff6\007\ufff6\010\ufff6\011\ufff6\012" + - "\ufff6\013\ufff6\014\ufff6\015\ufff6\016\ufff6\017\ufff6\020\ufff6" + - "\023\ufff6\001\002\000\040\002\ufffc\004\ufffc\005\ufffc\006" + - "\025\007\026\010\024\011\ufffc\012\ufffc\013\ufffc\014\ufffc" + + "\000\010\005\014\022\020\027\016\001\002\000\016\004" + + "\024\005\025\006\023\007\026\010\022\023\027\001\002" + + "\000\010\005\014\022\020\027\016\001\002\000\010\005" + + "\014\022\020\027\016\001\002\000\010\005\014\022\020" + + "\027\016\001\002\000\010\005\014\022\020\027\016\001" + + "\002\000\010\005\014\022\020\027\016\001\002\000\040" + + "\002\ufff9\004\ufff9\005\ufff9\006\ufff9\007\ufff9\010\ufff9\011" + + "\ufff9\012\ufff9\013\ufff9\014\ufff9\015\ufff9\016\ufff9\017\ufff9" + + "\020\ufff9\023\ufff9\001\002\000\040\002\ufffb\004\ufffb\005" + + "\ufffb\006\ufffb\007\ufffb\010\ufffb\011\ufffb\012\ufffb\013\ufffb" + + "\014\ufffb\015\ufffb\016\ufffb\017\ufffb\020\ufffb\023\ufffb\001" + + "\002\000\040\002\ufffd\004\ufffd\005\ufffd\006\023\007\026" + + "\010\022\011\ufffd\012\ufffd\013\ufffd\014\ufffd\015\ufffd\016" + + "\ufffd\017\ufffd\020\ufffd\023\ufffd\001\002\000\040\002\ufffe" + + "\004\ufffe\005\ufffe\006\023\007\026\010\022\011\ufffe\012" + + "\ufffe\013\ufffe\014\ufffe\015\ufffe\016\ufffe\017\ufffe\020\ufffe" + + "\023\ufffe\001\002\000\040\002\ufffc\004\ufffc\005\ufffc\006" + + "\ufffc\007\ufffc\010\ufffc\011\ufffc\012\ufffc\013\ufffc\014\ufffc" + "\015\ufffc\016\ufffc\017\ufffc\020\ufffc\023\ufffc\001\002\000" + - "\040\002\ufffd\004\ufffd\005\ufffd\006\025\007\026\010\024" + - "\011\ufffd\012\ufffd\013\ufffd\014\ufffd\015\ufffd\016\ufffd\017" + - "\ufffd\020\ufffd\023\ufffd\001\002\000\040\002\ufffb\004\ufffb" + - "\005\ufffb\006\ufffb\007\ufffb\010\ufffb\011\ufffb\012\ufffb\013" + - "\ufffb\014\ufffb\015\ufffb\016\ufffb\017\ufffb\020\ufffb\023\ufffb" + - "\001\002\000\040\002\ufff9\004\ufff9\005\ufff9\006\ufff9\007" + - "\ufff9\010\ufff9\011\ufff9\012\ufff9\013\ufff9\014\ufff9\015\ufff9" + - "\016\ufff9\017\ufff9\020\ufff9\023\ufff9\001\002\000\016\002" + - "\uffed\011\uffed\012\uffed\013\043\014\042\023\uffed\001\002" + - "\000\014\005\010\021\021\022\015\026\012\027\013\001" + - "\002\000\014\005\010\021\021\022\015\026\012\027\013" + - "\001\002\000\014\005\010\021\021\022\015\026\012\027" + - "\013\001\002\000\010\012\044\013\043\014\042\001\002" + - "\000\016\002\ufff4\011\047\012\ufff4\013\ufff4\014\ufff4\023" + - "\ufff4\001\002\000\014\005\010\021\021\022\015\026\012" + - "\027\013\001\002\000\016\002\ufff2\011\ufff2\012\ufff2\013" + - "\ufff2\014\ufff2\023\ufff2\001\002\000\016\002\uffe6\011\uffe6" + - "\012\uffe6\013\uffe6\014\uffe6\023\uffe6\001\002\000\016\002" + - "\uffe5\011\uffe5\012\uffe5\013\uffe5\014\uffe5\023\uffe5\001\002" + - "\000\010\005\010\022\027\026\012\001\002\000\010\005" + - "\010\022\027\026\012\001\002\000\010\005\010\022\027" + - "\026\012\001\002\000\010\005\010\022\027\026\012\001" + - "\002\000\010\005\010\022\027\026\012\001\002\000\010" + - "\005\010\022\027\026\012\001\002\000\022\002\uffea\004" + - "\032\005\033\011\uffea\012\uffea\013\uffea\014\uffea\023\uffea" + - "\001\002\000\022\002\uffe9\004\032\005\033\011\uffe9\012" + - "\uffe9\013\uffe9\014\uffe9\023\uffe9\001\002\000\022\002\uffeb" + - "\004\032\005\033\011\uffeb\012\uffeb\013\uffeb\014\uffeb\023" + - "\uffeb\001\002\000\022\002\uffec\004\032\005\033\011\uffec" + - "\012\uffec\013\uffec\014\uffec\023\uffec\001\002\000\022\002" + - "\uffe7\004\032\005\033\011\uffe7\012\uffe7\013\uffe7\014\uffe7" + - "\023\uffe7\001\002\000\022\002\uffe8\004\032\005\033\011" + - "\uffe8\012\uffe8\013\uffe8\014\uffe8\023\uffe8\001\002\000\012" + - "\012\044\013\043\014\042\023\071\001\002\000\024\004" + - "\032\005\033\013\053\014\054\015\055\016\056\017\060" + - "\020\057\023\034\001\002\000\016\002\uffee\011\uffee\012" + - "\uffee\013\uffee\014\uffee\023\uffee\001\002\000\040\002\ufff5" + - "\004\ufff5\005\ufff5\006\ufff5\007\ufff5\010\ufff5\011\ufff5\012" + - "\ufff5\013\ufff5\014\ufff5\015\ufff5\016\ufff5\017\ufff5\020\ufff5" + - "\023\ufff5\001\002\000\010\002\uffff\004\032\005\033\001" + - "\002" }); + "\040\002\ufffa\004\ufffa\005\ufffa\006\ufffa\007\ufffa\010\ufffa" + + "\011\ufffa\012\ufffa\013\ufffa\014\ufffa\015\ufffa\016\ufffa\017" + + "\ufffa\020\ufffa\023\ufffa\001\002\000\032\004\024\005\025" + + "\006\023\007\026\010\022\013\051\014\050\015\054\016" + + "\052\017\055\020\053\023\027\001\002\000\014\011\041" + + "\012\042\013\037\014\040\023\043\001\002\000\014\005" + + "\014\021\012\022\013\027\016\030\015\001\002\000\014" + + "\005\014\021\012\022\013\027\016\030\015\001\002\000" + + "\014\005\014\021\012\022\013\027\016\030\015\001\002" + + "\000\014\005\014\021\012\022\013\027\016\030\015\001" + + "\002\000\016\002\ufff3\011\ufff3\012\ufff3\013\ufff3\014\ufff3" + + "\023\ufff3\001\002\000\016\002\ufff6\011\041\012\ufff6\013" + + "\037\014\040\023\ufff6\001\002\000\016\002\ufff5\011\ufff5" + + "\012\ufff5\013\037\014\040\023\ufff5\001\002\000\016\002" + + "\uffea\011\uffea\012\uffea\013\uffea\014\uffea\023\uffea\001\002" + + "\000\016\002\uffeb\011\uffeb\012\uffeb\013\uffeb\014\uffeb\023" + + "\uffeb\001\002\000\010\005\014\022\020\027\016\001\002" + + "\000\010\005\014\022\020\027\016\001\002\000\010\005" + + "\014\022\020\027\016\001\002\000\010\005\014\022\020" + + "\027\016\001\002\000\010\005\014\022\020\027\016\001" + + "\002\000\010\005\014\022\020\027\016\001\002\000\030" + + "\002\uffef\004\024\005\025\006\023\007\026\010\022\011" + + "\uffef\012\uffef\013\uffef\014\uffef\023\uffef\001\002\000\030" + + "\002\ufff1\004\024\005\025\006\023\007\026\010\022\011" + + "\ufff1\012\ufff1\013\ufff1\014\ufff1\023\ufff1\001\002\000\030" + + "\002\uffee\004\024\005\025\006\023\007\026\010\022\011" + + "\uffee\012\uffee\013\uffee\014\uffee\023\uffee\001\002\000\030" + + "\002\ufff0\004\024\005\025\006\023\007\026\010\022\011" + + "\ufff0\012\ufff0\013\ufff0\014\ufff0\023\ufff0\001\002\000\030" + + "\002\uffed\004\024\005\025\006\023\007\026\010\022\011" + + "\uffed\012\uffed\013\uffed\014\uffed\023\uffed\001\002\000\030" + + "\002\uffec\004\024\005\025\006\023\007\026\010\022\011" + + "\uffec\012\uffec\013\uffec\014\uffec\023\uffec\001\002\000\016" + + "\002\ufff2\011\ufff2\012\ufff2\013\037\014\040\023\ufff2\001" + + "\002\000\016\002\uffff\004\024\005\025\006\023\007\026" + + "\010\022\001\002" }); /** Access to parse-action table. */ @Override @@ -135,35 +128,25 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp, /** <code>reduce_goto</code> table. */ protected static final short[][] _reduce_table = unpackFromStrings(new String[] { - "\000\071\000\004\002\005\001\001\000\010\003\072\004" + - "\021\005\015\001\001\000\020\003\017\004\021\005\015" + - "\006\013\007\016\010\010\011\022\001\001\000\002\001" + - "\001\000\002\001\001\000\004\005\071\001\001\000\002" + - "\001\001\000\002\001\001\000\002\001\001\000\002\001" + - "\001\000\020\003\067\004\021\005\015\006\066\007\016" + - "\010\010\011\022\001\001\000\002\001\001\000\002\001" + - "\001\000\002\001\001\000\020\003\017\004\021\005\015" + - "\006\040\007\016\010\010\011\022\001\001\000\002\001" + - "\001\000\002\001\001\000\004\005\037\001\001\000\004" + - "\005\036\001\001\000\004\005\027\001\001\000\010\003" + - "\030\004\021\005\015\001\001\000\002\001\001\000\002" + - "\001\001\000\006\004\035\005\015\001\001\000\006\004" + - "\034\005\015\001\001\000\002\001\001\000\002\001\001" + + "\000\063\000\004\002\005\001\001\000\004\003\064\001" + + "\001\000\006\003\007\004\010\001\001\000\002\001\001" + "\000\002\001\001\000\002\001\001\000\002\001\001\000" + - "\002\001\001\000\020\003\017\004\021\005\015\006\051" + - "\007\016\010\010\011\022\001\001\000\020\003\017\004" + - "\021\005\015\006\050\007\016\010\010\011\022\001\001" + - "\000\020\003\017\004\021\005\015\006\044\007\045\010" + - "\010\011\022\001\001\000\002\001\001\000\002\001\001" + - "\000\020\003\017\004\021\005\015\006\044\007\016\010" + - "\047\011\022\001\001\000\002\001\001\000\002\001\001" + - "\000\002\001\001\000\010\003\065\004\021\005\015\001" + - "\001\000\010\003\064\004\021\005\015\001\001\000\010" + - "\003\063\004\021\005\015\001\001\000\010\003\062\004" + - "\021\005\015\001\001\000\010\003\061\004\021\005\015" + - "\001\001\000\010\003\060\004\021\005\015\001\001\000" + + "\006\003\007\004\063\001\001\000\006\003\034\004\035" + + "\001\001\000\004\003\016\001\001\000\002\001\001\000" + + "\002\001\001\000\002\001\001\000\004\003\020\001\001" + + "\000\002\001\001\000\004\003\033\001\001\000\004\003" + + "\032\001\001\000\004\003\031\001\001\000\004\003\030" + + "\001\001\000\004\003\027\001\001\000\002\001\001\000" + "\002\001\001\000\002\001\001\000\002\001\001\000\002" + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + + "\001\000\006\003\007\004\046\001\001\000\006\003\007" + + "\004\045\001\001\000\006\003\007\004\044\001\001\000" + + "\006\003\007\004\043\001\001\000\002\001\001\000\002" + + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + + "\001\000\004\003\062\001\001\000\004\003\061\001\001" + + "\000\004\003\060\001\001\000\004\003\057\001\001\000" + + "\004\003\056\001\001\000\004\003\055\001\001\000\002" + + "\001\001\000\002\001\001\000\002\001\001\000\002\001" + "\001\000\002\001\001\000\002\001\001\000\002\001\001" + "\000\002\001\001" }); @@ -212,9 +195,9 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp, - IBSStdLexer<Spec,Comp,State,SpecState,CompState> lexer; + IBSScanner<Spec,Comp,State,SpecState,CompState> lexer; - public void setLexer(IBSStdLexer<Spec,Comp,State,SpecState,CompState> _lexer){ lexer=_lexer; setScanner(_lexer); } + public void setLexer(IBSScanner<Spec,Comp,State,SpecState,CompState> _lexer){ lexer=_lexer; setScanner(_lexer); } public void setAttributeClass(IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); } @@ -432,19 +415,7 @@ class CUP$IBSStdParser$actions { return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 3: // iexpr ::= ifact - { - Integer RESULT =null; - int eleft = (CUP$IBSStdParser$stack.peek()).left; - int eright = (CUP$IBSStdParser$stack.peek()).right; - Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); - RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iexpr",1, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); - } - return CUP$IBSStdParser$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 4: // iexpr ::= iexpr PLUS ifact + case 3: // iexpr ::= iexpr PLUS iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -462,7 +433,7 @@ class CUP$IBSStdParser$actions { return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 5: // iexpr ::= iexpr MINUS ifact + case 4: // iexpr ::= iexpr MINUS iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -480,7 +451,7 @@ class CUP$IBSStdParser$actions { return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 6: // ifact ::= ifact MULT iatom + case 5: // iexpr ::= iexpr MULT iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -493,12 +464,12 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("ifact",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iexpr",1, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 7: // ifact ::= ifact DIV iatom + case 6: // iexpr ::= iexpr DIV iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -511,12 +482,12 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("ifact",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iexpr",1, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 8: // ifact ::= ifact MOD iatom + case 7: // iexpr ::= iexpr MOD iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -529,60 +500,48 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("ifact",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iexpr",1, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 9: // ifact ::= iatom + case 8: // iexpr ::= LPAR iexpr RPAR { Integer RESULT =null; - int eleft = (CUP$IBSStdParser$stack.peek()).left; - int eright = (CUP$IBSStdParser$stack.peek()).right; - Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); + int eleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1)).left; + int eright = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1)).right; + Integer e = CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1).<Integer>value(); RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("ifact",2, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iexpr",1, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 10: // iatom ::= INT + case 9: // iexpr ::= MINUS iexpr { Integer RESULT =null; int eleft = (CUP$IBSStdParser$stack.peek()).left; int eright = (CUP$IBSStdParser$stack.peek()).right; Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); - RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iatom",3, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); - } - return CUP$IBSStdParser$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 11: // iatom ::= LPAR iexpr RPAR - { - Integer RESULT =null; - int eleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1)).left; - int eright = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1)).right; - Integer e = CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1).<Integer>value(); - RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iatom",3, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + RESULT = Integer.valueOf(lexer.getExpressionClass().make_iNeg(e.intValue())); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iexpr",1, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 12: // iatom ::= MINUS iatom + case 10: // iexpr ::= INT { Integer RESULT =null; int eleft = (CUP$IBSStdParser$stack.peek()).left; int eright = (CUP$IBSStdParser$stack.peek()).right; Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); - RESULT = Integer.valueOf(lexer.getExpressionClass().make_iNeg(e.intValue())); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iatom",3, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1), CUP$IBSStdParser$stack.peek(), RESULT); + RESULT = e; + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("iexpr",1, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 13: // bexpr ::= bexpr OR bfact + case 11: // bexpr ::= bexpr OR bexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -592,28 +551,15 @@ class CUP$IBSStdParser$actions { int rright = (CUP$IBSStdParser$stack.peek()).right; Integer r = CUP$IBSStdParser$stack.peek().<Integer>value(); RESULT = Integer.valueOf(lexer.getExpressionClass().make_bbbOr(l.intValue(),r.intValue())); - System.out.println("BBOR: " + lexer.getExpressionClass().getBExpr(RESULT).toString()); lexer.getExpressionClass().freeBool(l.intValue()); lexer.getExpressionClass().freeBool(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",4, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 14: // bexpr ::= bfact - { - Integer RESULT =null; - int eleft = (CUP$IBSStdParser$stack.peek()).left; - int eright = (CUP$IBSStdParser$stack.peek()).right; - Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); - RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",4, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); - } - return CUP$IBSStdParser$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 15: // bfact ::= bfact AND batom + case 12: // bexpr ::= bexpr AND bexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -626,72 +572,48 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeBool(l.intValue()); lexer.getExpressionClass().freeBool(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bfact",5, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); - } - return CUP$IBSStdParser$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 16: // bfact ::= batom - { - Integer RESULT =null; - int eleft = (CUP$IBSStdParser$stack.peek()).left; - int eright = (CUP$IBSStdParser$stack.peek()).right; - Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); - RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bfact",5, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); - } - return CUP$IBSStdParser$result; - - /*. . . . . . . . . . . . . . . . . . . .*/ - case 17: // batom ::= BOOL - { - Integer RESULT =null; - int eleft = (CUP$IBSStdParser$stack.peek()).left; - int eright = (CUP$IBSStdParser$stack.peek()).right; - Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); - RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("batom",6, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 18: // batom ::= bcomp + case 13: // bexpr ::= BOOL { Integer RESULT =null; int eleft = (CUP$IBSStdParser$stack.peek()).left; int eright = (CUP$IBSStdParser$stack.peek()).right; Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("batom",6, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.peek(), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 19: // batom ::= LPAR bexpr RPAR + case 14: // bexpr ::= LPAR bexpr RPAR { Integer RESULT =null; int eleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1)).left; int eright = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1)).right; Integer e = CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1).<Integer>value(); RESULT = e; - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("batom",6, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 20: // batom ::= NOT bexpr + case 15: // bexpr ::= NOT bexpr { Integer RESULT =null; int eleft = (CUP$IBSStdParser$stack.peek()).left; int eright = (CUP$IBSStdParser$stack.peek()).right; Integer e = CUP$IBSStdParser$stack.peek().<Integer>value(); RESULT = Integer.valueOf(lexer.getExpressionClass().make_bNot(e.intValue())); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("batom",6, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-1), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 21: // bcomp ::= iexpr LT iexpr + case 16: // bexpr ::= iexpr LT iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -704,12 +626,12 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bcomp",7, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 22: // bcomp ::= iexpr GT iexpr + case 17: // bexpr ::= iexpr GT iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -722,12 +644,12 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bcomp",7, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 23: // bcomp ::= iexpr LEQ iexpr + case 18: // bexpr ::= iexpr LEQ iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -740,12 +662,12 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bcomp",7, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 24: // bcomp ::= iexpr GEQ iexpr + case 19: // bexpr ::= iexpr GEQ iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -758,12 +680,12 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bcomp",7, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 25: // bcomp ::= iexpr EQ iexpr + case 20: // bexpr ::= iexpr EQ iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -776,12 +698,12 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bcomp",7, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 26: // bcomp ::= iexpr DIF iexpr + case 21: // bexpr ::= iexpr DIF iexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -794,12 +716,12 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bcomp",7, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 27: // bcomp ::= bexpr EQ bexpr + case 22: // bexpr ::= bexpr EQ bexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -809,16 +731,15 @@ class CUP$IBSStdParser$actions { int rright = (CUP$IBSStdParser$stack.peek()).right; Integer r = CUP$IBSStdParser$stack.peek().<Integer>value(); RESULT = Integer.valueOf(lexer.getExpressionClass().make_bbbEq(l.intValue(),r.intValue())); - System.out.println("BBEQ: " + lexer.getExpressionClass().getBExpr(RESULT).toString()); lexer.getExpressionClass().freeBool(l.intValue()); lexer.getExpressionClass().freeBool(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bcomp",7, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; /*. . . . . . . . . . . . . . . . . . . .*/ - case 28: // bcomp ::= bexpr DIF bexpr + case 23: // bexpr ::= bexpr DIF bexpr { Integer RESULT =null; int lleft = (CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2)).left; @@ -831,7 +752,7 @@ class CUP$IBSStdParser$actions { lexer.getExpressionClass().freeBool(l.intValue()); lexer.getExpressionClass().freeBool(r.intValue()); - CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bcomp",7, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); + CUP$IBSStdParser$result = parser.getSymbolFactory().newSymbol("bexpr",2, CUP$IBSStdParser$stack.elementAt(CUP$IBSStdParser$top-2), CUP$IBSStdParser$stack.peek(), RESULT); } return CUP$IBSStdParser$result; diff --git a/src/main/java/myutil/intboolsolver/IBSStdParserSym.java b/src/main/java/myutil/intboolsolver/IBSStdSymbol.java similarity index 83% rename from src/main/java/myutil/intboolsolver/IBSStdParserSym.java rename to src/main/java/myutil/intboolsolver/IBSStdSymbol.java index 4a6c505361b40ceef649b7dd35e64f7c12362aef..5d90a6ccffd4cdf4e8011a5f567fb9eb9ac505a2 100644 --- a/src/main/java/myutil/intboolsolver/IBSStdParserSym.java +++ b/src/main/java/myutil/intboolsolver/IBSStdSymbol.java @@ -6,30 +6,31 @@ package myutil.intboolsolver; /** CUP generated class containing symbol constants. */ -public class IBSStdParserSym { +public class IBSStdSymbol { /* terminals */ public static final int GEQ = 14; public static final int MOD = 6; public static final int AND = 7; public static final int LT = 11; public static final int PLUS = 2; - public static final int INT = 20; + public static final int INT = 21; public static final int OR = 8; public static final int NOT = 15; public static final int GT = 12; - public static final int PARSE_INT = 18; + public static final int PARSE_INT = 19; public static final int EOF = 0; public static final int MULT = 4; public static final int DIV = 5; public static final int MINUS = 3; public static final int error = 1; public static final int EQ = 9; - public static final int BOOL = 21; - public static final int PARSE_BOOL = 19; + public static final int BOOL = 22; + public static final int PARSE_BOOL = 20; public static final int LEQ = 13; public static final int RPAR = 17; public static final int LPAR = 16; public static final int DIF = 10; + public static final int UMINUS = 18; public static final String[] terminalNames = new String[] { "EOF", "error", @@ -49,6 +50,7 @@ public class IBSStdParserSym { "NOT", "LPAR", "RPAR", + "UMINUS", "PARSE_INT", "PARSE_BOOL", "INT", diff --git a/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex b/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex index e7211054b1a179543c182489279ad6d0bed8d46b..c7d5f32bb41e6c2b3eb8a5109d4df1ebe6cf7e97 100644 --- a/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex +++ b/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex @@ -4,11 +4,14 @@ import java.util.HashSet; %% -%class IBSStdLexer< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState > +%class IBSLexerClassName +%implements IBSScanner<Spec, Comp, State, SpecState, CompState> + +%public %unicode %cup %eofval{ - return new java_cup.runtime.Symbol(IBSStdParserSym.EOF); + return new java_cup.runtime.Symbol(IBSFlex#Symb.EOF); %eofval} %yylexthrow Exception @@ -18,7 +21,7 @@ private IBSAttributeClass<Spec,Comp,State,SpecState,CompState> attrC; private IBSExpressionClass<Spec,Comp,State,SpecState,CompState> exprC; private final HashSet<String> badIdents = new HashSet<String>(); -public IBSStdLexer(){} +public IBSLexerClassName(){} public void setAttributeClass( IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; } public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; } public void setExpressionClass( IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _exprC) { exprC = _exprC; } @@ -63,44 +66,44 @@ Identifier = [a-zA-Z_][a-zA-Z0-9_\.]* %state INTBOOL %% -<YYINITIAL> "boolean" { yybegin(INTBOOL); return new Symbol(IBSStdParserSym.PARSE_BOOL); } -<YYINITIAL> "integer" { yybegin(INTBOOL); return new Symbol(IBSStdParserSym.PARSE_INT); } +<YYINITIAL> "boolean" { yybegin(INTBOOL); return new Symbol(IBSFlex#Symb.PARSE_BOOL); } +<YYINITIAL> "integer" { yybegin(INTBOOL); return new Symbol(IBSFlex#Symb.PARSE_INT); } <YYINITIAL> {Space} {} <INTBOOL> { {Space} {} - "true" { return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(true))); } - "false" { return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(false))); } - {Natural} { try { return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(Integer.parseInt(yytext()))));} + "true" { return new Symbol(IBSFlex#Symb.BOOL, Integer.valueOf(exprC.make_bConst(true))); } + "false" { return new Symbol(IBSFlex#Symb.BOOL, Integer.valueOf(exprC.make_bConst(false))); } + {Natural} { try { return new Symbol(IBSFlex#Symb.INT, Integer.valueOf(exprC.make_iConst(Integer.parseInt(yytext()))));} catch (NumberFormatException nfe) { throw new Exception ("Lexer : Integer Format : " + yytext()); } } - "+" { return new Symbol(IBSStdParserSym.PLUS); } - "-" { return new Symbol(IBSStdParserSym.MINUS); } - "*" { return new Symbol(IBSStdParserSym.MULT); } - "/" { return new Symbol(IBSStdParserSym.DIV); } - "%" { return new Symbol(IBSStdParserSym.MOD); } - "&&" { return new Symbol(IBSStdParserSym.AND); } - "and" { return new Symbol(IBSStdParserSym.AND); } - "||" { return new Symbol(IBSStdParserSym.OR); } - "or" { return new Symbol(IBSStdParserSym.OR); } - "!" { return new Symbol(IBSStdParserSym.NOT); } - "not" { return new Symbol(IBSStdParserSym.NOT); } - "==" { return new Symbol(IBSStdParserSym.EQ); } - "!=" { return new Symbol(IBSStdParserSym.DIF); } - "<" { return new Symbol(IBSStdParserSym.LT); } - ">" { return new Symbol(IBSStdParserSym.GT); } - "<=" { return new Symbol(IBSStdParserSym.LEQ); } - ">=" { return new Symbol(IBSStdParserSym.GEQ); } - "(" { return new Symbol(IBSStdParserSym.LPAR); } - ")" { return new Symbol(IBSStdParserSym.RPAR); } + "+" { return new Symbol(IBSFlex#Symb.PLUS); } + "-" { return new Symbol(IBSFlex#Symb.MINUS); } + "*" { return new Symbol(IBSFlex#Symb.MULT); } + "/" { return new Symbol(IBSFlex#Symb.DIV); } + "%" { return new Symbol(IBSFlex#Symb.MOD); } + "&&" { return new Symbol(IBSFlex#Symb.AND); } + "and" { return new Symbol(IBSFlex#Symb.AND); } + "||" { return new Symbol(IBSFlex#Symb.OR); } + "or" { return new Symbol(IBSFlex#Symb.OR); } + "!" { return new Symbol(IBSFlex#Symb.NOT); } + "not" { return new Symbol(IBSFlex#Symb.NOT); } + "==" { return new Symbol(IBSFlex#Symb.EQ); } + "!=" { return new Symbol(IBSFlex#Symb.DIF); } + "<" { return new Symbol(IBSFlex#Symb.LT); } + ">" { return new Symbol(IBSFlex#Symb.GT); } + "<=" { return new Symbol(IBSFlex#Symb.LEQ); } + ">=" { return new Symbol(IBSFlex#Symb.GEQ); } + "(" { return new Symbol(IBSFlex#Symb.LPAR); } + ")" { return new Symbol(IBSFlex#Symb.RPAR); } {Identifier} { IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr = attrHandler.getTypedAttribute(yytext()); switch(attr.getType()) { case IBSAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " + yytext()); - case IBSAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0))); - case IBSAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant()))); - case IBSAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute()))); - case IBSAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute()))); + case IBSAttributeClass.BoolConst : return new Symbol(IBSFlex#Symb.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0))); + case IBSAttributeClass.IntConst : return new Symbol(IBSFlex#Symb.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant()))); + case IBSAttributeClass.BoolAttr : return new Symbol(IBSFlex#Symb.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute()))); + case IBSAttributeClass.IntAttr : return new Symbol(IBSFlex#Symb.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute()))); default : throw new Error ("Lexer, BUG : bad attribute type"); } } diff --git a/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup b/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup index c253d606f43622c7c745ad596ee0075826a374b9..0f56fff307a2616e3236150e52e4aaeb43f99fc6 100644 --- a/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup +++ b/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup @@ -4,16 +4,16 @@ import java_cup.runtime.*; import java.util.HashSet; -class IBSStdParser; +/* class IBSStdParser; */ /* To add in generated file: < Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState > */ parser code {: - IBSStdLexer<Spec,Comp,State,SpecState,CompState> lexer; + IBSScanner<Spec,Comp,State,SpecState,CompState> lexer; - public void setLexer(IBSStdLexer<Spec,Comp,State,SpecState,CompState> _lexer){ lexer=_lexer; setScanner(_lexer); } + public void setLexer(IBSScanner<Spec,Comp,State,SpecState,CompState> _lexer){ lexer=_lexer; setScanner(_lexer); } public void setAttributeClass(IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); } @@ -170,15 +170,14 @@ parser code {: /* Terminals (tokens returned by the scanner). */ terminal PLUS, MINUS, MULT, DIV, MOD, AND, OR, EQ, DIF, LT, GT, LEQ, GEQ; -terminal NOT, LPAR, RPAR; +terminal NOT, LPAR, RPAR, UMINUS; terminal PARSE_INT, PARSE_BOOL; terminal Integer INT, BOOL; /* Non terminals */ non terminal IBSExpressionClass<Spec,Comp,State,SpecState,CompState>.Expr expr; -non terminal Integer iexpr, ifact, iatom; -non terminal Integer bexpr, bfact, batom, bcomp; +non terminal Integer iexpr, bexpr; /* Precedences (probably useless for the current grammar) */ precedence left OR; @@ -188,6 +187,7 @@ precedence left EQ, DIF; precedence nonassoc GT, LT, LEQ, GEQ; precedence left PLUS, MINUS; precedence left MULT, DIV, MOD; +precedence left UMINUS; /* The grammar */ @@ -199,72 +199,51 @@ expr ::= ; iexpr ::= - ifact:e {: RESULT = e; :} - | iexpr:l PLUS ifact:r + iexpr:l PLUS iexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_iiiPlus(l.intValue(),r.intValue())); lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); :} - | iexpr:l MINUS ifact:r + | iexpr:l MINUS iexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_iiiMinus(l.intValue(),r.intValue())); lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); :} -; - -ifact ::= - ifact:l MULT iatom:r + | iexpr:l MULT iexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_iiiMult(l.intValue(),r.intValue())); lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); :} - | ifact:l DIV iatom:r + | iexpr:l DIV iexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_iiiDiv(l.intValue(),r.intValue())); lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); :} - | ifact:l MOD iatom:r + | iexpr:l MOD iexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_iiiMod(l.intValue(),r.intValue())); lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); :} - | iatom:e {: RESULT = e; :} -; - -iatom ::= - INT:e {: RESULT = e; :} - | LPAR iexpr:e RPAR {: RESULT = e; :} - | MINUS iatom:e {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_iNeg(e.intValue())); :} + | LPAR iexpr:e RPAR {: RESULT = e; :} + | MINUS iexpr:e {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_iNeg(e.intValue())); :} %prec UMINUS + | INT:e {: RESULT = e; :} ; bexpr ::= - bexpr:l OR bfact:r + bexpr:l OR bexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_bbbOr(l.intValue(),r.intValue())); - System.out.println("BBOR: " + lexer.getExpressionClass().getBExpr(RESULT).toString()); lexer.getExpressionClass().freeBool(l.intValue()); lexer.getExpressionClass().freeBool(r.intValue()); :} - | bfact:e {: RESULT = e; :} -; - -bfact ::= - bfact:l AND batom:r + | bexpr:l AND bexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_bbbAnd(l.intValue(),r.intValue())); lexer.getExpressionClass().freeBool(l.intValue()); lexer.getExpressionClass().freeBool(r.intValue()); :} - | batom:e {: RESULT = e; :} -; - -batom ::= - BOOL:e {: RESULT = e; :} - | bcomp:e {: RESULT = e; :} + | BOOL:e {: RESULT = e; :} | LPAR bexpr:e RPAR {: RESULT = e; :} | NOT bexpr:e {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_bNot(e.intValue())); :} -; - -bcomp ::= - iexpr:l LT iexpr:r + | iexpr:l LT iexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_biiLt(l.intValue(),r.intValue())); lexer.getExpressionClass().freeInt(l.intValue()); lexer.getExpressionClass().freeInt(r.intValue()); @@ -296,7 +275,6 @@ bcomp ::= :} | bexpr:l EQ bexpr:r {: RESULT = Integer.valueOf(lexer.getExpressionClass().make_bbbEq(l.intValue(),r.intValue())); - System.out.println("BBEQ: " + lexer.getExpressionClass().getBExpr(RESULT).toString()); lexer.getExpressionClass().freeBool(l.intValue()); lexer.getExpressionClass().freeBool(r.intValue()); :} diff --git a/src/main/java/myutil/intboolsolver/javacup/compile b/src/main/java/myutil/intboolsolver/javacup/compile index 926336ba290fc0a6380ea0319ad892b7692902c7..a41b66a71b561592d73a13b009a5a0295aa26a5c 100755 --- a/src/main/java/myutil/intboolsolver/javacup/compile +++ b/src/main/java/myutil/intboolsolver/javacup/compile @@ -1,9 +1,23 @@ -jflex IBSStdLexer.jflex -java-cup -expect 2 IBSStdParser.jcup -sed "s/class IBSStdLexer/public class IBSStdLexer/" IBSStdLexer.java > IBSStdLexer1.java -sed "s/class IBSStdParser/class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState >/" IBSStdParser.java > IBSStdParser1.java -rm IBSStdParser.java -mv IBSStdParser1.java IBSStdParser.java -rm IBSStdLexer.java -mv IBSStdLexer1.java IBSStdLexer.java -mv IBSStdParser.java IBSStdLexer.java IBSStdParserSym.java .. +#!/bin/sh + +JFLEX_FILE="IBSStdLexer.jflex" +JAVACUP_FILE="IBSStdParser.jcup" +LEXER_CLASS="IBSStdLexer" +PARSER_CLASS="IBSStdParser" +SYMBOL_CLASS="IBSStdSymbol" + +sed "s/IBSLexerClassName/$LEXER_CLASS/g" $JFLEX_FILE > __tmplexer.jflex +sed "s/IBSFlex#Symb/$SYMBOL_CLASS/g" __tmplexer.jflex > __tmplexer2.jflex +jflex __tmplexer2.jflex +sed "s/public class $LEXER_CLASS/public class $LEXER_CLASS< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState >/" $LEXER_CLASS.java > __tmplexer.java +rm $LEXER_CLASS.java +mv __tmplexer.java $LEXER_CLASS.java +rm __tmplexer.jflex __tmplexer2.jflex + +java-cup -parser $PARSER_CLASS -symbols $SYMBOL_CLASS $JAVACUP_FILE + +sed "s/class $PARSER_CLASS/class $PARSER_CLASS< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState >/" $PARSER_CLASS.java > __tmpparser.java + +rm $PARSER_CLASS.java *~ +mv __tmpparser.java $PARSER_CLASS.java +mv $LEXER_CLASS.java $PARSER_CLASS.java $SYMBOL_CLASS.java .. diff --git a/src/main/java/myutil/intboolsolver/javacup/test.tgz b/src/main/java/myutil/intboolsolver/javacup/test.tgz deleted file mode 100644 index 3af7ff39682d0d9e7298327feafd63bfb2ba99ed..0000000000000000000000000000000000000000 Binary files a/src/main/java/myutil/intboolsolver/javacup/test.tgz and /dev/null differ