From 8fb8d27ebcaad8074b9d52b31d32406d522e5a57 Mon Sep 17 00:00:00 2001 From: adam Date: Tue, 4 Mar 2008 00:09:43 -0500 Subject: [PATCH] add some commenting to GrammarAST darcs-hash:20080304050943-5007d-7a4d08ef6bf06a8cdd06dc21bb85edbcf8b06629.gz --- src/edu/berkeley/sbp/meta/GrammarAST.java | 34 ++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/edu/berkeley/sbp/meta/GrammarAST.java b/src/edu/berkeley/sbp/meta/GrammarAST.java index ed8fe94..e039b37 100644 --- a/src/edu/berkeley/sbp/meta/GrammarAST.java +++ b/src/edu/berkeley/sbp/meta/GrammarAST.java @@ -221,10 +221,18 @@ public class GrammarAST { public abstract Element build(Context cx, NonTerminalNode cnt, boolean dropall); } + /** a union, produced by a ( .. | .. | .. ) construct */ private class UnionNode extends ElementNode { + + /** each component of a union is a sequence */ public Seq[][] sequences; - public String sep = null; + + /** if the union is a NonTerminal specified as Foo*=..., this is true */ public boolean rep; + + /** if the union is a NonTerminal specified as Foo* /ws=..., then this is "ws" */ + public String sep = null; + public UnionNode(Seq seq) { this(new Seq[][] { new Seq[] { seq } }); } public UnionNode(Seq[][] sequences) { this(sequences, false, null); } public UnionNode(Seq[][] sequences, boolean rep, String sep) { @@ -284,6 +292,7 @@ public class GrammarAST { } } + /** a NonTerminal is always a union at the top level */ private class NonTerminalNode extends UnionNode { public boolean alwaysDrop; public String name = null; @@ -296,7 +305,18 @@ public class GrammarAST { public Element build(Context cx, NonTerminalNode cnt, boolean dropall) { return cx.get(name); } } + /** a sequence */ private class Seq { + /** elements of the sequence */ + ElementNode[] elements; + /** follow-set, if explicit */ + ElementNode follow; + /** tag to add when building the AST */ + String tag = null; + /** positive conjuncts */ + HashSet and = new HashSet(); + /** negative conjuncts */ + HashSet not = new HashSet(); public boolean alwaysDrop = false; public boolean isDropped(Context cx) { if (alwaysDrop) return true; @@ -306,11 +326,6 @@ public class GrammarAST { return false; return true; } - HashSet and = new HashSet(); - HashSet not = new HashSet(); - ElementNode[] elements; - ElementNode follow; - String tag = null; public Seq(ElementNode e) { this(new ElementNode[] { e }); } public Seq(ElementNode[] elements) { this(elements, true); } public Seq(ElementNode[] el, boolean check) { @@ -413,6 +428,7 @@ public class GrammarAST { } } + /** reference to a NonTerminal by name */ private class ReferenceNode extends ElementNode { public String nonTerminal; public boolean parenthesized; @@ -440,6 +456,7 @@ public class GrammarAST { } } + /** a literal string */ private class LiteralNode extends ElementNode { private String string; private final String thePrefix = prefix; @@ -461,6 +478,7 @@ public class GrammarAST { public Element build(Context cx, NonTerminalNode cnt, boolean dropall) { return CharAtom.string(string); } } + /** an atom (usually a character class) */ private class AtomNode extends ElementNode { char[][] ranges; public AtomNode() { this(new char[0][]); } @@ -474,6 +492,7 @@ public class GrammarAST { } } + /** a repetition */ private class RepeatNode extends ElementNode { public ElementNode e, sep; public final boolean zero, many, max; @@ -500,6 +519,7 @@ public class GrammarAST { } } + /** helper class for syntactic constructs that wrap another construct */ private abstract class ElementNodeWrapper extends ElementNode { protected ElementNode _e; public ElementNodeWrapper(ElementNode e) { this._e = e; } @@ -508,11 +528,13 @@ public class GrammarAST { public Element build(Context cx, NonTerminalNode cnt, boolean dropall) { return _e.build(cx, cnt, dropall); } } + /** a backtick node indicating that, when building the AST, the node's children should be inserted here */ private class BacktickNode extends ElementNodeWrapper { public BacktickNode(ElementNode e) { super(e); } public boolean isLifted() { return true; } } + /** negation */ private class TildeNode extends ElementNodeWrapper { public TildeNode(ElementNode e) { super(e); } public Atom toAtom(Context cx) { return (Atom)((Topology)_e.toAtom(cx).complement()); } -- 1.7.10.4