Added the name of the file to the error report.
[repair.git] / Repair / RepairCompiler / MCC / CDL.cup
index bb7cfe34461e7b289ce59c4d49aaee9ab35c1fc2..e77068d0b550de52ebbf8582d8c6b42ca4195017 100755 (executable)
@@ -56,13 +56,15 @@ action code {:
 init with {: :}
 
 parser code {:
 init with {: :}
 
 parser code {:
+
+       public String filename;
        
        public void syntax_error (java_cup.runtime.Symbol current) {
 
                CUP$CDLParser$actions.errors = true;
                Symbol symbol = (Symbol) current;
        
        public void syntax_error (java_cup.runtime.Symbol current) {
 
                CUP$CDLParser$actions.errors = true;
                Symbol symbol = (Symbol) current;
-               report_error("CDL: Syntax error at line " + (symbol.line + 1)
-               + ", column " + LineCount.getColumn(symbol.left) + ": " + current.value, current);
+               report_error(filename+":"+(symbol.line+1)+": Syntax error at column " + LineCount.getColumn(symbol.left) +": " + current.value, current);
+               System.exit(0);
        }
 
        public void report_fatal_error (String message, Object info) {
        }
 
        public void report_fatal_error (String message, Object info) {
@@ -143,6 +145,7 @@ parser code {:
 
     terminal IMPLIES;
     terminal TRUE;
 
     terminal IMPLIES;
     terminal TRUE;
+    terminal FALSE;
     terminal ISVALID;
     terminal FOR;
     terminal TO;
     terminal ISVALID;
     terminal FOR;
     terminal TO;
@@ -201,11 +204,14 @@ nonterminal       ParseNode               operator;
 
 precedence left OR;
 precedence left AND;
 
 precedence left OR;
 precedence left AND;
-precedence right EQ, NE; 
-precedence right LT, LE, GE, GT;
+precedence left EQ, NE; 
+precedence left LT, LE, GE, GT;
+
 precedence left ADD, SUB;
 precedence left MULT, DIV;
 precedence left ADD, SUB;
 precedence left MULT, DIV;
+
 precedence left NOT;
 precedence left NOT;
+
 precedence left DOT, DOTINV;
 
 // PRODUCTION RULES  /////////////////////////////////////////////////////
 precedence left DOT, DOTINV;
 
 // PRODUCTION RULES  /////////////////////////////////////////////////////
@@ -295,6 +301,15 @@ quantifier ::=
        q.addChild(set);
        RESULT = q;
        :}
        q.addChild(set);
        RESULT = q;
        :}
+       | FORALL LT ID:r1 COMMA ID:r2 GT IN ID:relation
+       {:
+       debugMessage(PRODSTRING);
+       ParseNode q = new ParseNode("quantifier", parser.curLine(7));
+       q.addChild("relation", parser.curLine(1)).addChild(relation);
+       q.addChild("left", parser.curLine(5)).addChild(r1);
+       q.addChild("right", parser.curLine(3)).addChild(r2);
+       RESULT = q;
+       :}
        ;
 
 set ::=
        ;
 
 set ::=
@@ -379,34 +394,25 @@ body ::=
 
 predicate ::=
 
 
 predicate ::=
 
-       ID:var IN setexpr:setexpr
+       expr:expr IN setexpr:setexpr
        {:
        debugMessage(PRODSTRING);
        ParseNode inclusion = (new ParseNode("predicate", parser.curLine(3))).addChild("inclusion");
        {:
        debugMessage(PRODSTRING);
        ParseNode inclusion = (new ParseNode("predicate", parser.curLine(3))).addChild("inclusion");
-       inclusion.addChild("quantifiervar", parser.curLine(3)).addChild(var);
+       inclusion.addChild(expr);
        inclusion.addChild(setexpr);
        RESULT = inclusion.getRoot();
        :}
      
        inclusion.addChild(setexpr);
        RESULT = inclusion.getRoot();
        :}
      
-       | SIZEOF OPENPAREN setexpr:setexpr CLOSEPAREN compare:compare DECIMAL:dec
-       {:
-       ParseNode sizeof = (new ParseNode("predicate", parser.curLine(4))).addChild("sizeof");
-       sizeof.addChild(setexpr);
-       sizeof.addChild("compare", parser.curLine(2)).addChild(compare);
-       sizeof.addChild("decimal", parser.curLine(1)).addChild(dec);
-       RESULT = sizeof.getRoot();
-       :}
-
-       | ID:var DOT ID:relation compare:compare expr:expr
+       | expr:lexpr compare:compare expr:rexpr
        {:
        debugMessage(PRODSTRING);
        {:
        debugMessage(PRODSTRING);
-       ParseNode comparison = (new ParseNode("predicate", parser.curLine(3))).addChild("comparison");
-       comparison.addChild("compare", parser.curLine(2)).addChild(compare);
-       comparison.addChild("relation", parser.curLine(3)).addChild(relation);
-       comparison.addChild("quantifier", parser.curLine(5)).addChild(var);
-       comparison.addChild(expr);
+       ParseNode comparison = (new ParseNode("predicate", parser.curLine(3))).addChild("expr").addChild("operator");
+       comparison.addChild("op").addChild(compare);
+       comparison.addChild("left", parser.curLine(2)).addChild(lexpr);
+       comparison.addChild("right", parser.curLine(2)).addChild(rexpr);
        RESULT = comparison.getRoot();
        :}
        RESULT = comparison.getRoot();
        :}
+
        ;
 
 setexpr ::=
        ;
 
 setexpr ::=
@@ -573,6 +579,12 @@ literal ::=
        RESULT = (new ParseNode("literal", parser.curLine(1))).addChild("boolean").addChild("true").getRoot();
        :}
         
        RESULT = (new ParseNode("literal", parser.curLine(1))).addChild("boolean").addChild("true").getRoot();
        :}
         
+       | FALSE
+       {:
+       debugMessage(PRODSTRING);
+       RESULT = (new ParseNode("literal", parser.curLine(1))).addChild("boolean").addChild("false").getRoot();
+       :}
+        
        | DECIMAL:dec
        {:
        debugMessage(PRODSTRING);
        | DECIMAL:dec
        {:
        debugMessage(PRODSTRING);