From b13f392a8b1e19d96dc7f8064e7be4374253d9d1 Mon Sep 17 00:00:00 2001 From: jjenista Date: Thu, 29 Jan 2009 23:15:06 +0000 Subject: [PATCH] Added SESE definition support to compiler --- Robust/src/IR/Flat/BuildCode.java | 16 ++++++ Robust/src/IR/Flat/BuildFlat.java | 16 ++++++ Robust/src/IR/Flat/FKind.java | 2 + Robust/src/IR/Flat/FlatSESEEnterNode.java | 39 +++++++++++++ Robust/src/IR/Flat/FlatSESEExitNode.java | 32 +++++++++++ Robust/src/IR/Tree/BuildIR.java | 17 ++++++ Robust/src/IR/Tree/Kind.java | 1 + Robust/src/IR/Tree/Modifiers.java | 3 +- Robust/src/IR/Tree/SESENode.java | 70 +++++++++++++++++++++++ Robust/src/IR/Tree/SemanticCheck.java | 7 ++- Robust/src/Lex/Keyword.java | 4 +- Robust/src/Lex/Lexer.java | 2 +- Robust/src/Parse/java14.cup | 18 ++++++ Robust/src/Tests/mlp/syntaxTest/makefile | 27 +++++++++ Robust/src/Tests/mlp/syntaxTest/test.java | 29 ++++++++++ 15 files changed, 279 insertions(+), 4 deletions(-) create mode 100644 Robust/src/IR/Flat/FlatSESEEnterNode.java create mode 100644 Robust/src/IR/Flat/FlatSESEExitNode.java create mode 100644 Robust/src/IR/Tree/SESENode.java create mode 100644 Robust/src/Tests/mlp/syntaxTest/makefile create mode 100644 Robust/src/Tests/mlp/syntaxTest/test.java diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 402e99f6..14d135dd 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -1431,6 +1431,14 @@ public class BuildCode { generateFlatAtomicExitNode(fm, lb, (FlatAtomicExitNode) fn, output); return; + case FKind.FlatSESEEnterNode: + generateFlatSESEEnterNode(fm, lb, (FlatSESEEnterNode) fn, output); + return; + + case FKind.FlatSESEExitNode: + generateFlatSESEExitNode(fm, lb, (FlatSESEExitNode) fn, output); + return; + case FKind.FlatGlobalConvNode: generateFlatGlobalConvNode(fm, lb, (FlatGlobalConvNode) fn, output); return; @@ -1761,6 +1769,14 @@ public class BuildCode { output.println("}"); } + public void generateFlatSESEEnterNode(FlatMethod fm, LocalityBinding lb, FlatSESEEnterNode faen, PrintWriter output) { + + } + + public void generateFlatSESEExitNode(FlatMethod fm, LocalityBinding lb, FlatSESEExitNode faen, PrintWriter output) { + + } + private void generateFlatCheckNode(FlatMethod fm, LocalityBinding lb, FlatCheckNode fcn, PrintWriter output) { if (state.CONSCHECK) { String specname=fcn.getSpec(); diff --git a/Robust/src/IR/Flat/BuildFlat.java b/Robust/src/IR/Flat/BuildFlat.java index 243f6a88..9ed529d8 100644 --- a/Robust/src/IR/Flat/BuildFlat.java +++ b/Robust/src/IR/Flat/BuildFlat.java @@ -1009,6 +1009,20 @@ public class BuildFlat { return new NodePair(faen, faexn); } + private NodePair flattenSESENode(SESENode sn) { + if( sn.isStart() ) { + FlatSESEEnterNode fsen=new FlatSESEEnterNode(sn); + sn.setFlatEnter(fsen); + return new NodePair(fsen, fsen); + } + + FlatSESEExitNode fsexn=new FlatSESEExitNode(sn); + sn.setFlatExit(fsexn); + fsexn.setFlatEnter( sn.getStart().getFlatEnter() ); + sn.getStart().getFlatEnter().setFlatExit( fsexn ); + return new NodePair(fsexn, fsexn); + } + private NodePair flattenBlockStatementNode(BlockStatementNode bsn) { switch(bsn.kind()) { case Kind.BlockExpressionNode: @@ -1038,6 +1052,8 @@ public class BuildFlat { case Kind.AtomicNode: return flattenAtomicNode((AtomicNode)bsn); + case Kind.SESENode: + return flattenSESENode((SESENode)bsn); } throw new Error(); } diff --git a/Robust/src/IR/Flat/FKind.java b/Robust/src/IR/Flat/FKind.java index 9789a3af..4108296a 100644 --- a/Robust/src/IR/Flat/FKind.java +++ b/Robust/src/IR/Flat/FKind.java @@ -23,4 +23,6 @@ public class FKind { public static final int FlatGlobalConvNode=20; public static final int FlatPrefetchNode=21; public static final int FlatOffsetNode=22; + public static final int FlatSESEEnterNode=23; + public static final int FlatSESEExitNode=24; } diff --git a/Robust/src/IR/Flat/FlatSESEEnterNode.java b/Robust/src/IR/Flat/FlatSESEEnterNode.java new file mode 100644 index 00000000..344526f1 --- /dev/null +++ b/Robust/src/IR/Flat/FlatSESEEnterNode.java @@ -0,0 +1,39 @@ +package IR.Flat; +import IR.Tree.SESENode; +import java.util.Vector; + +public class FlatSESEEnterNode extends FlatNode { + private static int identifier=0; + private int id; + protected FlatSESEExitNode exit; + protected SESENode treeNode; + + public FlatSESEEnterNode( SESENode sn ) { + this.id=identifier++; + treeNode = sn; + } + + public SESENode getTreeNode() { + return treeNode; + } + + public int getIdentifier() { + return id; + } + + public String toString() { + return "sese enter"; + } + + public void setFlatExit( FlatSESEExitNode fsexn ) { + exit = fsexn; + } + + public FlatSESEExitNode getFlatExit() { + return exit; + } + + public int kind() { + return FKind.FlatSESEEnterNode; + } +} diff --git a/Robust/src/IR/Flat/FlatSESEExitNode.java b/Robust/src/IR/Flat/FlatSESEExitNode.java new file mode 100644 index 00000000..a5b4f9b8 --- /dev/null +++ b/Robust/src/IR/Flat/FlatSESEExitNode.java @@ -0,0 +1,32 @@ +package IR.Flat; +import IR.Tree.SESENode; +import java.util.Vector; + +public class FlatSESEExitNode extends FlatNode { + protected SESENode treeNode; + FlatSESEEnterNode enter; + + public FlatSESEExitNode( SESENode sn ) { + treeNode = sn; + } + + public SESENode getTreeNode() { + return treeNode; + } + + public void setFlatEnter( FlatSESEEnterNode fsen ) { + enter = fsen; + } + + public FlatSESEEnterNode getSESEEnter() { + return enter; + } + + public String toString() { + return "seseexit"; + } + + public int kind() { + return FKind.FlatSESEExitNode; + } +} diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index d6b84a1d..d577cbb1 100644 --- a/Robust/src/IR/Tree/BuildIR.java +++ b/Robust/src/IR/Tree/BuildIR.java @@ -599,6 +599,15 @@ public class BuildIR { return bn; } + public Vector parseSESEBlock(Vector parentbs, ParseNode pn) { + ParseNodeVector pnv=pn.getChildren(); + Vector bv=new Vector(); + for(int i=0; i