X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=5e67ac02c48c835fd4dc14d44451ec2f642bd46c;hb=f283ebfd51424e761bea2dd5b3042cf765ca9ee6;hp=c563ce50185457c9acbe10de1a7a9607f8f048f0;hpb=df32ec862cecf0851a7f7342582b5786d04a4771;p=sbp.git diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index c563ce5..5e67ac0 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -140,9 +140,9 @@ public class MetaGrammar extends StringWalker { return new Keep(walk(tree,0)); } else if ("psx".equals(head)) return ((PreSequence)walk(tree, 0)).buildSequence(); else if ("nonTerminal".equals(head)) return getNonTerminal(string(tree.child(0))); - else if ("::=".equals(head)) return nonTerminal(string(tree.child(0)), (Sequence[][])walk(tree, 1), false, false); - else if ("=".equals(head)) return nonTerminal(string(tree.child(0)), (Sequence[][])walk(tree, 1), false, false); - else if ("(".equals(head)) return buildUnion((Sequence[][])walk(tree, 0)); + else if ("::=".equals(head)) return nonTerminal(string(tree.child(0)), (Sequence[][])Reflection.lub(walk(tree, 1)), false, false); + else if ("=".equals(head)) return nonTerminal(string(tree.child(0)), (Sequence[][])Reflection.lub(walk(tree, 1)), false, false); + else if ("(".equals(head)) return buildUnion((Sequence[][])Reflection.lub(walk(tree, 0))); else if ("literal".equals(head)) { Element ret = string(string(tree.child(0))); dropAll.add(ret); return ret; } else if ("-".equals(head)) return new Range(walk(tree, 0).toString().charAt(0), walk(tree,1).toString().charAt(0)); else if ("range".equals(head)) return new Range(walk(tree, 0).toString().charAt(0), walk(tree,0).toString().charAt(0)); @@ -150,6 +150,7 @@ public class MetaGrammar extends StringWalker { else if ("psy".equals(head)) return (PreSequence)walk(tree, 0); else if ("->".equals(head)) { PreSequence p = (PreSequence)walk(tree, 0); p.noFollow = (Element)walk(tree, 1); return p; } else if ("/".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1)); + else if (" /".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1)); else if ("~".equals(head)) return new Hack(new Atom.Invert(new Atom.Infer((Element)walk(tree, 0)))); else if ("ps".equals(head)) return new PreSequence((Object[])walk(tree,0), null); else if (":".equals(head)) { @@ -276,8 +277,8 @@ public class MetaGrammar extends StringWalker { } else { if (keeping) drops[i] = true; } - if (oi==SELF) o2[j] = u.new Subset("(("+u+"))", set); - else o2[j] = (Element)oi; + /*if (oi==SELF) o2[j] = u.new Subset("(("+u+"))", set); + else*/ o2[j] = (Element)oi; if (MetaGrammar.dropAll.contains(o2[j])) drops[j] = true; nonDrop += drops[j] ? 0 : 1; @@ -291,7 +292,7 @@ public class MetaGrammar extends StringWalker { Sequence ret = null; if (dropAll || lame) ret = Sequence.drop(expansion, lame); else if (unwrap) ret = new Sequence.Unwrap(expansion, drops); - else if (tag!=null) ret = Sequence.rewritingSequence(tag, expansion, drops); + else if (tag!=null) ret = Sequence.rewritingSequence(tag, expansion, null, drops); else { int idx = -1; for(int i=0; i