From 9913972caafbdcd040ec88e253b31300e6e81495 Mon Sep 17 00:00:00 2001 From: parrt Date: Wed, 5 May 2010 15:52:29 -0800 Subject: [PATCH] adding initial src code generation output model objects [git-p4: depot-paths = "//depot/code/antlr4/main/": change = 6842] --- .../org/antlr/v4/analysis/LookaheadSet.java | 92 ------------------- .../org/antlr/v4/codegen/src/AddToList.java | 6 ++ .../org/antlr/v4/codegen/src/BitSetDef.java | 9 ++ tool/src/org/antlr/v4/codegen/src/Choice.java | 12 +++ .../org/antlr/v4/codegen/src/CodeBlock.java | 8 ++ tool/src/org/antlr/v4/codegen/src/DFADef.java | 10 ++ .../org/antlr/v4/codegen/src/InvokeRule.java | 23 +++++ .../v4/codegen/src/LL1OptionalBlock.java | 5 + .../src/LL1OptionalBlockSingleAlt.java | 5 + .../v4/codegen/src/LLStarOptionalBlock.java | 5 + .../v4/codegen/src/LLkOptionalBlock.java | 5 + .../org/antlr/v4/codegen/src/MatchToken.java | 9 ++ .../antlr/v4/codegen/src/OptionalBlock.java | 5 + tool/src/org/antlr/v4/codegen/src/Parser.java | 11 +++ .../org/antlr/v4/codegen/src/ParserFile.java | 6 ++ .../antlr/v4/codegen/src/RuleFunction.java | 25 +++++ tool/src/org/antlr/v4/codegen/src/SrcOp.java | 8 ++ tool/src/org/antlr/v4/codegen/src/Sync.java | 5 + .../org/antlr/v4/codegen/src/ast/AddLeaf.java | 8 ++ .../antlr/v4/codegen/src/ast/MakeRoot.java | 8 ++ tool/src/org/antlr/v4/codegen/src/dbg.java | 5 + 21 files changed, 178 insertions(+), 92 deletions(-) delete mode 100644 tool/src/org/antlr/v4/analysis/LookaheadSet.java create mode 100644 tool/src/org/antlr/v4/codegen/src/AddToList.java create mode 100644 tool/src/org/antlr/v4/codegen/src/BitSetDef.java create mode 100644 tool/src/org/antlr/v4/codegen/src/Choice.java create mode 100644 tool/src/org/antlr/v4/codegen/src/CodeBlock.java create mode 100644 tool/src/org/antlr/v4/codegen/src/DFADef.java create mode 100644 tool/src/org/antlr/v4/codegen/src/InvokeRule.java create mode 100644 tool/src/org/antlr/v4/codegen/src/LL1OptionalBlock.java create mode 100644 tool/src/org/antlr/v4/codegen/src/LL1OptionalBlockSingleAlt.java create mode 100644 tool/src/org/antlr/v4/codegen/src/LLStarOptionalBlock.java create mode 100644 tool/src/org/antlr/v4/codegen/src/LLkOptionalBlock.java create mode 100644 tool/src/org/antlr/v4/codegen/src/MatchToken.java create mode 100644 tool/src/org/antlr/v4/codegen/src/OptionalBlock.java create mode 100644 tool/src/org/antlr/v4/codegen/src/Parser.java create mode 100644 tool/src/org/antlr/v4/codegen/src/ParserFile.java create mode 100644 tool/src/org/antlr/v4/codegen/src/RuleFunction.java create mode 100644 tool/src/org/antlr/v4/codegen/src/SrcOp.java create mode 100644 tool/src/org/antlr/v4/codegen/src/Sync.java create mode 100644 tool/src/org/antlr/v4/codegen/src/ast/AddLeaf.java create mode 100644 tool/src/org/antlr/v4/codegen/src/ast/MakeRoot.java create mode 100644 tool/src/org/antlr/v4/codegen/src/dbg.java diff --git a/tool/src/org/antlr/v4/analysis/LookaheadSet.java b/tool/src/org/antlr/v4/analysis/LookaheadSet.java deleted file mode 100644 index 1ecc87266..000000000 --- a/tool/src/org/antlr/v4/analysis/LookaheadSet.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.antlr.v4.analysis; - -import org.antlr.v4.misc.IntervalSet; -import org.antlr.v4.tool.Grammar; - -/** This object holds all information needed to represent - * the lookahead for any particular lookahead computation - * for a single lookahead depth. - */ -public class LookaheadSet { - public IntervalSet set; - - /** Used for rule references. If we try - * to compute look(k, ruleref) and there are fewer - * than k lookahead terminals before the end of the - * the rule, eor will be returned (don't want to - * pass the end of the rule). We must track when the - * the lookahead got stuck. For example, - *
-	 * 		a : b A B E F G;
-	 * 		b : C ;
-	 * 
- * LOOK(5, ref-to(b)) is {} with depth = 4, which - * indicates that at 2 (5-4+1) tokens ahead, end of rule was reached. - * Therefore, the token at 4=5-(5-4) past rule ref b must be - * included in the set == F. - * The situation is complicated by the fact that a computation - * may hit the end of a rule at many different depths. For example, - *
-	 * 		a : b A B C ;
-	 * 		b : E F		// eor depth of 1 relative to initial k=3
-	 * 		  | G		// eor depth of 2
-	 * 		  ;
-	 * 
- * Here, LOOK(3,ref-to(b)) returns eor, but the depths are - * {1, 2}; i.e., 3-(3-1) and 3-(3-2). Those are the lookahead depths - * past the rule ref needed for the local follow. - */ - public IntervalSet eorDepths; - - public LookaheadSet() {;} - - public LookaheadSet(IntervalSet set) { this.set = new IntervalSet(set); } - - public static LookaheadSet of(int a) { - LookaheadSet s = new LookaheadSet(); - s.set = IntervalSet.of(a); - return s; - } - - public static LookaheadSet missingDepth(int k) { - LookaheadSet s = new LookaheadSet(); - s.eorDepths = IntervalSet.of(k); - return s; - } - - public void combine(LookaheadSet other) { - if (eorDepths != null) { - if (other.eorDepths != null) { - eorDepths.addAll(other.eorDepths); - } - } - else if (other.eorDepths != null) { - eorDepths = new IntervalSet(other.eorDepths); - } - - if ( set==null ) set = new IntervalSet(other.set); - else set.addAll(other.set); - } - - public LookaheadSet intersection(LookaheadSet s) { - IntervalSet i = (IntervalSet)this.set.and(s.set); - return new LookaheadSet(i); - } - - public boolean isNil() { - return set.isNil() && (eorDepths==null || eorDepths.size()==0); - } - - @Override - public String toString() { - String s = set.toString(); - if ( eorDepths!=null ) s += "+"+eorDepths; - return s; - } - - public String toString(Grammar g) { - String s = set.toString(g); - if ( eorDepths!=null ) s += "+"+eorDepths; - return s; - } -} diff --git a/tool/src/org/antlr/v4/codegen/src/AddToList.java b/tool/src/org/antlr/v4/codegen/src/AddToList.java new file mode 100644 index 000000000..e665f6d35 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/AddToList.java @@ -0,0 +1,6 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class AddToList extends SrcOp { + public SrcOp opWithResultToAdd; +} diff --git a/tool/src/org/antlr/v4/codegen/src/BitSetDef.java b/tool/src/org/antlr/v4/codegen/src/BitSetDef.java new file mode 100644 index 000000000..e6d949c6c --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/BitSetDef.java @@ -0,0 +1,9 @@ +package org.antlr.v4.codegen.src; + +import org.antlr.v4.misc.IntSet; + +/** */ +public class BitSetDef { + String name; + IntSet[] set; +} diff --git a/tool/src/org/antlr/v4/codegen/src/Choice.java b/tool/src/org/antlr/v4/codegen/src/Choice.java new file mode 100644 index 000000000..d2a52fa90 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/Choice.java @@ -0,0 +1,12 @@ +package org.antlr.v4.codegen.src; + +import org.antlr.v4.automata.DFA; + +import java.util.List; + +/** */ +public class Choice extends SrcOp { + //public DFADef dfaDef; ??? + public DFA dfa; + public List alts; +} diff --git a/tool/src/org/antlr/v4/codegen/src/CodeBlock.java b/tool/src/org/antlr/v4/codegen/src/CodeBlock.java new file mode 100644 index 000000000..0a083157d --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/CodeBlock.java @@ -0,0 +1,8 @@ +package org.antlr.v4.codegen.src; + +import java.util.List; + +/** */ +public class CodeBlock extends SrcOp { + public List ops; +} diff --git a/tool/src/org/antlr/v4/codegen/src/DFADef.java b/tool/src/org/antlr/v4/codegen/src/DFADef.java new file mode 100644 index 000000000..fa618f703 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/DFADef.java @@ -0,0 +1,10 @@ +package org.antlr.v4.codegen.src; + +import org.antlr.v4.automata.DFA; + +/** */ +public class DFADef { + public String name; + public DFA dfa; + +} diff --git a/tool/src/org/antlr/v4/codegen/src/InvokeRule.java b/tool/src/org/antlr/v4/codegen/src/InvokeRule.java new file mode 100644 index 000000000..289b2fe97 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/InvokeRule.java @@ -0,0 +1,23 @@ +package org.antlr.v4.codegen.src; + +import org.antlr.v4.misc.IntervalSet; + +import java.util.List; + +/** */ +public class InvokeRule extends SrcOp { + public String name; + public String label; + public List args; + public IntervalSet[] follow; + + public InvokeRule(String name, String argAction, IntervalSet[] follow) { + // split and translate argAction + // compute follow + } + + public InvokeRule(String name, IntervalSet[] follow) { + // split and translate argAction + // compute follow + } +} diff --git a/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlock.java b/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlock.java new file mode 100644 index 000000000..e4a66846f --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlock.java @@ -0,0 +1,5 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class LL1OptionalBlock extends OptionalBlock { +} diff --git a/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlockSingleAlt.java b/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlockSingleAlt.java new file mode 100644 index 000000000..6add1a283 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/LL1OptionalBlockSingleAlt.java @@ -0,0 +1,5 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class LL1OptionalBlockSingleAlt extends OptionalBlock { +} diff --git a/tool/src/org/antlr/v4/codegen/src/LLStarOptionalBlock.java b/tool/src/org/antlr/v4/codegen/src/LLStarOptionalBlock.java new file mode 100644 index 000000000..d85ffa435 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/LLStarOptionalBlock.java @@ -0,0 +1,5 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class LLStarOptionalBlock extends OptionalBlock { +} diff --git a/tool/src/org/antlr/v4/codegen/src/LLkOptionalBlock.java b/tool/src/org/antlr/v4/codegen/src/LLkOptionalBlock.java new file mode 100644 index 000000000..3597c8ef5 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/LLkOptionalBlock.java @@ -0,0 +1,5 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class LLkOptionalBlock extends OptionalBlock { +} diff --git a/tool/src/org/antlr/v4/codegen/src/MatchToken.java b/tool/src/org/antlr/v4/codegen/src/MatchToken.java new file mode 100644 index 000000000..11e921438 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/MatchToken.java @@ -0,0 +1,9 @@ +package org.antlr.v4.codegen.src; + +import org.antlr.v4.misc.IntervalSet; + +/** */ +public class MatchToken extends SrcOp { + public int ttype; + public IntervalSet[] follow; +} diff --git a/tool/src/org/antlr/v4/codegen/src/OptionalBlock.java b/tool/src/org/antlr/v4/codegen/src/OptionalBlock.java new file mode 100644 index 000000000..691181426 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/OptionalBlock.java @@ -0,0 +1,5 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class OptionalBlock extends Choice { +} diff --git a/tool/src/org/antlr/v4/codegen/src/Parser.java b/tool/src/org/antlr/v4/codegen/src/Parser.java new file mode 100644 index 000000000..469c8c3fe --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/Parser.java @@ -0,0 +1,11 @@ +package org.antlr.v4.codegen.src; + +import org.antlr.v4.tool.Grammar; + +import java.util.List; + +/** */ +public class Parser { + public Grammar g; + public List funcs; +} diff --git a/tool/src/org/antlr/v4/codegen/src/ParserFile.java b/tool/src/org/antlr/v4/codegen/src/ParserFile.java new file mode 100644 index 000000000..05274e52e --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/ParserFile.java @@ -0,0 +1,6 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class ParserFile { + public Parser parser; +} diff --git a/tool/src/org/antlr/v4/codegen/src/RuleFunction.java b/tool/src/org/antlr/v4/codegen/src/RuleFunction.java new file mode 100644 index 000000000..3ded4a148 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/RuleFunction.java @@ -0,0 +1,25 @@ +package org.antlr.v4.codegen.src; + +import org.antlr.v4.tool.Attribute; +import org.antlr.v4.tool.GrammarAST; +import org.antlr.v4.tool.Rule; + +import java.util.ArrayList; +import java.util.List; + +/** */ +public class RuleFunction { + public String name; + public List modifiers; + public List args; + public List retvals; + public CodeBlock code; + + public RuleFunction(Rule r) { + this.name = r.name; + if ( r.modifiers!=null && r.modifiers.size()>0 ) { + this.modifiers = new ArrayList(); + for (GrammarAST t : r.modifiers) modifiers.add(t.getText()); + } + } +} diff --git a/tool/src/org/antlr/v4/codegen/src/SrcOp.java b/tool/src/org/antlr/v4/codegen/src/SrcOp.java new file mode 100644 index 000000000..5a37e81fb --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/SrcOp.java @@ -0,0 +1,8 @@ +package org.antlr.v4.codegen.src; + +import org.antlr.v4.tool.GrammarAST; + +/** */ +public class SrcOp { + public GrammarAST ast; +} diff --git a/tool/src/org/antlr/v4/codegen/src/Sync.java b/tool/src/org/antlr/v4/codegen/src/Sync.java new file mode 100644 index 000000000..f0c597bf5 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/Sync.java @@ -0,0 +1,5 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class Sync { +} diff --git a/tool/src/org/antlr/v4/codegen/src/ast/AddLeaf.java b/tool/src/org/antlr/v4/codegen/src/ast/AddLeaf.java new file mode 100644 index 000000000..c27e9c82c --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/ast/AddLeaf.java @@ -0,0 +1,8 @@ +package org.antlr.v4.codegen.src.ast; + +import org.antlr.v4.codegen.src.SrcOp; + +/** */ +public class AddLeaf extends SrcOp { + public SrcOp opWithResultToAdd; +} diff --git a/tool/src/org/antlr/v4/codegen/src/ast/MakeRoot.java b/tool/src/org/antlr/v4/codegen/src/ast/MakeRoot.java new file mode 100644 index 000000000..f95380704 --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/ast/MakeRoot.java @@ -0,0 +1,8 @@ +package org.antlr.v4.codegen.src.ast; + +import org.antlr.v4.codegen.src.SrcOp; + +/** */ +public class MakeRoot extends SrcOp { + public SrcOp opWithResultToAdd; +} diff --git a/tool/src/org/antlr/v4/codegen/src/dbg.java b/tool/src/org/antlr/v4/codegen/src/dbg.java new file mode 100644 index 000000000..cdc4ef95f --- /dev/null +++ b/tool/src/org/antlr/v4/codegen/src/dbg.java @@ -0,0 +1,5 @@ +package org.antlr.v4.codegen.src; + +/** */ +public class dbg { +}