X-Git-Url: http://plrg.eecs.uci.edu/git/?p=repair.git;a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FCDL.cup;h=e77068d0b550de52ebbf8582d8c6b42ca4195017;hp=bb7cfe34461e7b289ce59c4d49aaee9ab35c1fc2;hb=2aa90220f8a6a51dc84abb6c1dbb85db0b204f42;hpb=d4dbb723afda1b4f3c20f235686d81edccc9e990 diff --git a/Repair/RepairCompiler/MCC/CDL.cup b/Repair/RepairCompiler/MCC/CDL.cup index bb7cfe3..e77068d 100755 --- a/Repair/RepairCompiler/MCC/CDL.cup +++ b/Repair/RepairCompiler/MCC/CDL.cup @@ -56,13 +56,15 @@ action 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; - 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) { @@ -143,6 +145,7 @@ parser code {: terminal IMPLIES; terminal TRUE; + terminal FALSE; terminal ISVALID; terminal FOR; terminal TO; @@ -201,11 +204,14 @@ nonterminal ParseNode operator; 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 NOT; + precedence left DOT, DOTINV; // PRODUCTION RULES ///////////////////////////////////////////////////// @@ -295,6 +301,15 @@ quantifier ::= 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 ::= @@ -379,34 +394,25 @@ body ::= predicate ::= - ID:var IN setexpr:setexpr + expr:expr IN setexpr:setexpr {: 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(); :} - | 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); - 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(); :} + ; setexpr ::= @@ -573,6 +579,12 @@ literal ::= 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);