checking in code
authorbdemsky <bdemsky>
Tue, 25 Apr 2006 21:37:02 +0000 (21:37 +0000)
committerbdemsky <bdemsky>
Tue, 25 Apr 2006 21:37:02 +0000 (21:37 +0000)
Robust/src/IR/Flat/BuildCode.java
Robust/src/IR/Operation.java
Robust/src/IR/Tree/BuildIR.java
Robust/src/Parse/java14.cup

index 6f4f95fad5da8ff502d85b86689925b8d228755a..78989dd31f180147650aa448a489121112e09eba 100644 (file)
@@ -671,6 +671,8 @@ public class BuildCode {
            output.println(generateTemp(fm, fon.getDest())+" = "+generateTemp(fm, fon.getLeft())+";");
        else if (fon.getOp().getOp()==Operation.UNARYMINUS)
            output.println(generateTemp(fm, fon.getDest())+" = -"+generateTemp(fm, fon.getLeft())+";");
+       else if (fon.getOp().getOp()==Operation.LOGIC_NOT)
+           output.println(generateTemp(fm, fon.getDest())+" = !"+generateTemp(fm, fon.getLeft())+";");
        else if (fon.getOp().getOp()==Operation.POSTINC)
            output.println(generateTemp(fm, fon.getDest())+" = "+generateTemp(fm, fon.getLeft())+"++;");
        else if (fon.getOp().getOp()==Operation.POSTDEC)
index 3cb402829dd5cd880bef6d9fdd5cb602bfd36366..274c0414730d9d330a8a6ed73f231627880d47a9 100644 (file)
@@ -25,7 +25,7 @@ public class Operation {
     public static final int POSTDEC=22;
     public static final int PREINC=23;
     public static final int PREDEC=24;
-
+    public static final int LOGIC_NOT=25;
     /* Flat Operations */
     public static final int ASSIGN=100;
 
@@ -91,6 +91,8 @@ public class Operation {
            return PREINC;
        else if (st.equals("predec"))
            return PREDEC;
+       else if (st.equals("not"))
+           return LOGIC_NOT;
        else
            throw new Error();
     }
@@ -100,6 +102,8 @@ public class Operation {
            return "||";
        else if (operation==LOGIC_AND)
            return "&&";
+       else if (operation==LOGIC_NOT)
+           return "not";
        else if (operation==BIT_OR)
            return "|";
        else if (operation==BIT_XOR)
index 44d793ec05332dda6243a6a96673b0ccca7761bc..2f2797fd93fa74d88bf81064e1acdf8e417cf187 100644 (file)
@@ -37,7 +37,6 @@ public class BuildIR {
 
     public TaskDescriptor parseTaskDecl(ParseNode pn) {
        TaskDescriptor td=new TaskDescriptor(pn.getChild("name").getTerminal());
-       
        ParseNode bodyn=pn.getChild("body");
        BlockNode bn=parseBlock(bodyn);
        parseParameterList(td, pn);
@@ -45,6 +44,26 @@ public class BuildIR {
        return td;
     }
 
+    public FlagExpressionNode parseFlagExpression(ParseNode pn) {
+       if (paramn.getChild("or")!=null) {
+           ParseNodeVector pnv=paramn.getChild("or").getChildren();
+           ParseNode left=pnv.elementAt(0);
+           ParseNode right=pnv.elementAt(1);
+           return new FlagOpNode(parseFlagExpression(left), parseFlagExpression(right), new Operation(Operation.LOGIC_OR));
+       } else if (paramn.getChild("and")!=null) {
+           ParseNodeVector pnv=paramn.getChild("and").getChildren();
+           ParseNode left=pnv.elementAt(0);
+           ParseNode right=pnv.elementAt(1);
+           return new FlagOpNode(parseFlagExpression(left), parseFlagExpression(right), new Operation(Operation.LOGIC_AND));
+       } else if (paramn.getChild("not")!=null) {
+           ParseNodeVector pnv=paramn.getChild("not").getChildren();
+           ParseNode left=pnv.elementAt(0);
+           return new FlagOpNode(parseFlagExpression(left), new Operation(Operation.LOGIC_NOT));           
+
+       } else if (paramn.getChild("name")!=null) {
+           return new FlagNode(paramn.getChild("name").getTerminal());
+       } else throw new Error();
+    }
 
     public void parseParameterList(TaskDescriptor td, ParseNode pn) {
        ParseNode paramlist=pn.getChild("task_parameter_list");
@@ -61,7 +80,7 @@ public class BuildIR {
                 tmp=tmp.getChild("array");
             }
             String paramname=tmp.getChild("single").getTerminal();
-            
+            FlagExpressionNode fen=parseFlagExpression(paramn.getChild("flag"));
             
             td.addParameter(type,paramname);
         }
@@ -210,6 +229,7 @@ public class BuildIR {
                   isNode(pn,"postinc")||
                   isNode(pn,"postdec")||
                   isNode(pn,"preinc")||
+                  isNode(pn,"not")||
                   isNode(pn,"predec")) {
            ParseNode left=pn.getFirstChild();
            Operation op=new Operation(pn.getLabel());
index 1d296fae5b6af7042598862b249ef4fa37d35776..381ab5e35f77d578ff3e1129e0464d5b479d36fd 100644 (file)
@@ -271,7 +271,7 @@ task_parameter ::=
                ParseNode pn=new ParseNode("task_parameter");
                pn.addChild(type);
                pn.addChild(name);
-               pn.addChild(exp);
+               pn.addChild("flag").addChild(exp);
                RESULT=pn;
        :}
        ;
@@ -334,6 +334,7 @@ flag_effects ::= flag_effect:fe {:
 
 flag_effect ::= IDENTIFIER:id LBRACE flag_list:fl RBRACE {: 
                ParseNode pn=new ParseNode("flag_effect");
+               pn.addChild("name").addChild(id);
                pn.addChild(fl);
                RESULT=pn;
        :};