Fix grammar and Sum bug.
authorbdemsky <bdemsky>
Tue, 2 Nov 2004 22:59:39 +0000 (22:59 +0000)
committerbdemsky <bdemsky>
Tue, 2 Nov 2004 22:59:39 +0000 (22:59 +0000)
Repair/RepairCompiler/MCC/CDL.cup
Repair/RepairCompiler/MCC/IR/SumExpr.java

index 12b94a4b3ede49f20dc9d8542bde3871efb8798f..6de3880a3f33ca5904d88a389df83e432477d0dd 100755 (executable)
@@ -213,7 +213,8 @@ nonterminal ParseNode               setexpr;
 
 nonterminal    ParseNode               compare;
 nonterminal    ParseNode               expr;
 
 nonterminal    ParseNode               compare;
 nonterminal    ParseNode               expr;
-nonterminal    ParseNode               operator;
+nonterminal    ParseNode               addsuboperator;
+nonterminal    ParseNode               multdivoperator;
 
 
 
 
 
 
@@ -530,7 +531,7 @@ expr ::=
        RESULT = relation.getRoot();
        :}
             
        RESULT = relation.getRoot();
        :}
             
-       | expr:expr1 operator:operator expr:expr2
+       | expr:expr1 addsuboperator:operator expr:expr2
        {:
        debugMessage(PRODSTRING);
        ParseNode op = (new ParseNode("expr", parser.curLine(3))).addChild("operator");
        {:
        debugMessage(PRODSTRING);
        ParseNode op = (new ParseNode("expr", parser.curLine(3))).addChild("operator");
@@ -539,7 +540,17 @@ expr ::=
        op.addChild("right", parser.curLine(1)).addChild(expr2);
        RESULT = op.getRoot();
        :}
        op.addChild("right", parser.curLine(1)).addChild(expr2);
        RESULT = op.getRoot();
        :}
-
+       %prec ADD
+       | expr:expr1 multdivoperator:operator expr:expr2
+       {:
+       debugMessage(PRODSTRING);
+       ParseNode op = (new ParseNode("expr", parser.curLine(3))).addChild("operator");
+       op.addChild("op").addChild(operator);
+       op.addChild("left", parser.curLine(3)).addChild(expr1);
+       op.addChild("right", parser.curLine(1)).addChild(expr2);
+       RESULT = op.getRoot();
+       :}
+       %prec MULT
        | SIZEOF OPENPAREN setexpr:setexpr CLOSEPAREN
        {:
        ParseNode sizeof = (new ParseNode("expr", parser.curLine(4))).addChild("sizeof");
        | SIZEOF OPENPAREN setexpr:setexpr CLOSEPAREN
        {:
        ParseNode sizeof = (new ParseNode("expr", parser.curLine(4))).addChild("sizeof");
@@ -548,7 +559,7 @@ expr ::=
        :}
        ;
 
        :}
        ;
 
-operator ::=
+addsuboperator ::=
          
        ADD 
        {:
          
        ADD 
        {:
@@ -561,13 +572,13 @@ operator ::=
        debugMessage(PRODSTRING);
        RESULT = new ParseNode("sub", parser.curLine(1));
        :}
        debugMessage(PRODSTRING);
        RESULT = new ParseNode("sub", parser.curLine(1));
        :}
-         
-       | MULT
+       ;
+multdivoperator ::=
+       MULT
        {:
        debugMessage(PRODSTRING);
        RESULT = new ParseNode("mult", parser.curLine(1));
        :}
        {:
        debugMessage(PRODSTRING);
        RESULT = new ParseNode("mult", parser.curLine(1));
        :}
-         
        | DIV
        {:
        debugMessage(PRODSTRING);
        | DIV
        {:
        debugMessage(PRODSTRING);
index c2b30ff3ff42a0fe06fd5c194ae1fed4b05dfe06..64c336d651cc94b35f24e912f91ccb3de8733488 100755 (executable)
@@ -72,7 +72,7 @@ public class SumExpr extends Expr {
 
             VarDescriptor newset=VarDescriptor.makeNew("newset");
             writer.addDeclaration("struct SimpleHash *",newset.getSafeSymbol());
 
             VarDescriptor newset=VarDescriptor.makeNew("newset");
             writer.addDeclaration("struct SimpleHash *",newset.getSafeSymbol());
-            writer.outputline(newset.getSafeSymbol()+"=SimpleHashimageSet("+rd.getSafeSymbol()+"_hash, "+keyvd.getSafeSymbol()+", &"+tmpvar.getSafeSymbol()+");");
+            writer.outputline(newset.getSafeSymbol()+"=SimpleHashimageSet("+rd.getSafeSymbol()+"_hash, "+keyvd.getSafeSymbol()+");");
 
             VarDescriptor itvd2=VarDescriptor.makeNew("iterator");
             writer.addDeclaration("struct SimpleIterator",itvd2.getSafeSymbol());
 
             VarDescriptor itvd2=VarDescriptor.makeNew("iterator");
             writer.addDeclaration("struct SimpleIterator",itvd2.getSafeSymbol());