Some modifications to allow to print the name of the file when a syntax error is...
[repair.git] / Repair / RepairCompiler / MCC / SDL.cup
index 6604dcd02e35481f0e0e8be523cd9e68159cfaad..f8997e99e4efa38b12a377f7723d1e0a224a8ecf 100755 (executable)
@@ -142,6 +142,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;
@@ -187,6 +188,7 @@ nonterminal ParseNode               optstatic;
 nonterminal    ParseNode               optpartition;
 nonterminal    ParseNode               setlist;
 nonterminal    ParseNode               type;
 nonterminal    ParseNode               optpartition;
 nonterminal    ParseNode               setlist;
 nonterminal    ParseNode               type;
+nonterminal    ParseNode               optrange;
 
 precedence left OR;
 precedence left AND;
 
 precedence left OR;
 precedence left AND;
@@ -236,20 +238,37 @@ space ::=
        if (setlist != null) set.addChild(setlist);
        RESULT = set;
        :}
        if (setlist != null) set.addChild(setlist);
        RESULT = set;
        :}
-      | ID:name optstatic:optstatic COLON type:domain ARROW type:range OPENPAREN mult:domainmult ARROW mult:rangemult CLOSEPAREN SEMICOLON 
+      | ID:name optstatic:optstatic COLON type:domain ARROW type:range optrange:optrange SEMICOLON 
        {:
        debugMessage(PRODSTRING);
        {:
        debugMessage(PRODSTRING);
-       ParseNode relation = new ParseNode("relationdefinition", parser.curLine(12));
+       ParseNode relation = new ParseNode("relationdefinition", parser.curLine(8));
        if (optstatic != null) relation.addChild(optstatic);
        if (optstatic != null) relation.addChild(optstatic);
-       relation.addChild("name", parser.curLine(11)).addChild(name);
+       relation.addChild("name", parser.curLine(7)).addChild(name);
        relation.addChild("domain").addChild(domain);
        relation.addChild("range").addChild(range);
        relation.addChild("domain").addChild(domain);
        relation.addChild("range").addChild(range);
-       relation.getChild("domain").addChild(domainmult);
-       relation.getChild("range").addChild(rangemult);
+       if (optrange != null) { 
+           relation.getChild("domain").addChild(optrange.getChild("domainmult"));
+           relation.getChild("range").addChild(optrange.getChild("rangemult"));
+       }
        RESULT = relation;
        :}
       ;
 
        RESULT = relation;
        :}
       ;
 
+optrange ::= 
+       OPENPAREN mult:domainmult ARROW mult:rangemult CLOSEPAREN 
+          {:
+            debugMessage(PRODSTRING);
+            ParseNode optrange = new ParseNode("optrange", parser.curLine(5));
+            optrange.addChild("domainmult").addChild(domainmult);
+             optrange.addChild("rangemult").addChild(rangemult);
+            RESULT = optrange;
+          :}
+        | /* nothing */
+           {:
+             RESULT = null;
+           :}
+       ;
+
 mult ::=
      DECIMAL:one
        {:
 mult ::=
      DECIMAL:one
        {: