From: adam Date: Thu, 6 Jul 2006 06:57:37 +0000 (-0400) Subject: checkpoint X-Git-Tag: tag_for_25-Mar~183 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=87bf9df44b553d0e5fb1465983b0dc9f90b699b0 checkpoint darcs-hash:20060706065737-5007d-69edb414288f48287520bc34a448699239fa4b22.gz --- diff --git a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java index 0fc7c71..2866107 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java @@ -47,14 +47,17 @@ public class MetaGrammarBindings { } public static class NonTerminal extends Un { + public boolean rep; public String name = null; - public @bind NonTerminal(@bind.arg String name, - @bind.arg Seq[][] sequences) { + public @bind NonTerminal(@bind.arg String name, @bind.arg Seq[][] sequences) { this(name, sequences, false); } + public NonTerminal(String name, Seq[][] sequences, boolean rep) { this.name = name; this.sequences = sequences; + this.rep = rep; } public Element build(MetaGrammar.Context cx) { return cx.get(name); } } + public static @bind.as("=") NonTerminal go(@bind.arg String name, @bind.arg Seq[][] sequences) { return new NonTerminal(name, sequences, true); } public static class AnonUn extends Un { public @bind.as("(") AnonUn(Seq[][] sequences) { @@ -267,12 +270,12 @@ public class MetaGrammarBindings { //public static @bind.as("(") El subexpression(Seq[][] rhs) { return new NonTerminal(rhs); } - public static @bind.as("Word") String word(String s) { return s; } - public static @bind.as("Quoted") String quoted(String s) { return s; } - public static @bind.as("escaped") String c(char c) { return c+""; } - public static @bind.as("EmptyString") String emptystring() { return ""; } - public static @bind.as("\n") String retur() { return "\n"; } - public static @bind.as("\r") String lf() { return "\r"; } + public static @bind.as("Word") String word(String s) { return s; } + public static @bind.as("Quoted") String quoted(String s) { return s; } + public static @bind.as("escaped") String c(char c) { return c+""; } + public static @bind.as("EmptyString") String emptystring() { return ""; } + public static @bind.as("\n") String retur() { return "\n"; } + public static @bind.as("\r") String lf() { return "\r"; } static Atom infer(Element e) { return infer((Topology)Atom.toAtom(e)); } static Atom infer(Topology t) { return new CharRange(new CharTopology(t)); } diff --git a/tests/meta.g b/tests/meta.g index 60e3d80..e6f2735 100644 --- a/tests/meta.g +++ b/tests/meta.g @@ -1,13 +1,14 @@ +// use 'a'-'z' or 'a-z' instead of [a-z]? +// EOF token? +// #include (with renaming?) + s = ws! Grammar ws! Grammar = NonTerminal +/ ws -NonTerminal = Word "=" RHS /ws - -// use 'a'-'z' or 'a-z' instead of [a-z]? -// EOF token? -// #include (with renaming?) - +NonTerminal = Word "=" RHS /ws + | Word "*" ws! ^"=" ws! RHS + RHS = (Sequence +/ (ws! "|" ws!)) +/ (ws! ">" ws!) Elements = e*/ws @@ -52,7 +53,7 @@ Literal = Quoted Word = [a-zA-Z0-9_]++ Quoted = "\"" ((~[\"\\] | escaped)+) "\"" | EmptyString -EmptyString = "\"\"" + EmptyString = "\"\"" escaped = "\n":: "\\n" | "\r":: "\\r"