From c4b4207ce1be50359c6bd8abe1d657ff8ae8ad6e Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 8 Jul 2006 02:31:11 -0400 Subject: [PATCH] checkpoint darcs-hash:20060708063111-5007d-b5f040a1be2cc38e9060307115de76ffb3f2c285.gz --- src/edu/berkeley/sbp/Ambiguous.java | 2 - src/edu/berkeley/sbp/meta/MetaGrammarBindings.java | 9 +- src/edu/berkeley/sbp/tib/TibDoc.java | 21 +++-- src/edu/berkeley/sbp/util/Reflection.java | 87 ++++++++++++-------- tests/tibdoc.g | 17 ++-- 5 files changed, 84 insertions(+), 52 deletions(-) diff --git a/src/edu/berkeley/sbp/Ambiguous.java b/src/edu/berkeley/sbp/Ambiguous.java index c96bdd4..1f7cc38 100644 --- a/src/edu/berkeley/sbp/Ambiguous.java +++ b/src/edu/berkeley/sbp/Ambiguous.java @@ -13,12 +13,10 @@ public class Ambiguous extends Exception { // FEATURE: more legible printout desperately needed StringBuffer sb = new StringBuffer(); sb.append("unresolved ambiguity "); - /* for(Tree result : ambiguity.expand(false)) { sb.append("\n\n"); result.toPrettyString(sb); } - */ return sb.toString(); } } diff --git a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java index 401536f..b70ddb8 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java @@ -15,7 +15,12 @@ public class MetaGrammarBindings { /** A grammar (a set of nonterminals) */ public static class GrammarNode extends HashMap { public @bind.as("Grammar") GrammarNode(NonTerminalNode[] nonterminals) { - for(NonTerminalNode nt : nonterminals) this.put(nt.name, nt); } + for(NonTerminalNode nt : nonterminals) { + if (this.get(nt.name)!=null) + throw new RuntimeException("duplicate definition of nonterminal \""+nt.name+"\""); + this.put(nt.name, nt); + } + } public String toString() { String ret = "[ "; for(NonTerminalNode nt : values()) ret += nt + ", "; @@ -327,7 +332,7 @@ public class MetaGrammarBindings { public static @bind.as("~") ElementNode tilde(final ElementNode e) { return new PostProcess(e) { public Element postProcess(Element e) { - return infer((Topology)Atom.toAtom(e).complement()); + return infer((Topology)Atom.toAtom(e).complement().minus(CharRange.braces)); } }; } public static @bind.as("Word") String word(String s) { return s; } diff --git a/src/edu/berkeley/sbp/tib/TibDoc.java b/src/edu/berkeley/sbp/tib/TibDoc.java index 3245d76..469c166 100644 --- a/src/edu/berkeley/sbp/tib/TibDoc.java +++ b/src/edu/berkeley/sbp/tib/TibDoc.java @@ -384,16 +384,17 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix public @bind.arg String password; } - public @bind.as("Euro") Object euro() { return null; } - public @bind.as("Citation") Object cite(Object o) { return new Chars("*cite*"); } - public @bind.as("Symbol") Object sym(Object o) { return null; } + public static @bind.as("Euro") Object euro() { return null; } + public static @bind.as("Citation") Object cite(Object o) { return new Chars("*cite*"); } + public static @bind.as("Symbol") Object sym(Object o) { return null; } public static abstract class List extends Text { - public @bind.arg Text[] points; + public @bind.arg Text[][] points; public abstract String tag(); public void toHTML(ToHTML.HTML sb) { sb.append("<"+tag()+">\n"); - for(Text t : points) sb.tag("li", t); + for(Text[] t : points) + sb.tag("li", t); sb.append("\n"); } } @@ -409,6 +410,16 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix public static class Blockquote extends Paragraph { Text[] text; public @bind Blockquote(Text[] t) { this.text = t; } + public @bind Blockquote(Text[] t, Text[] t2) { + if (t2==null) { + this.text = t; + } else { + Text[] t3 = new Text[t.length + t2.length]; + System.arraycopy(t, 0, t3, 0, t.length); + System.arraycopy(t2, 0, t3, t.length, t2.length); + this.text = t3; + } + } public void toHTML(HTML h) { h.tag("blockquote", new P(text)); } } diff --git a/src/edu/berkeley/sbp/util/Reflection.java b/src/edu/berkeley/sbp/util/Reflection.java index 9d4837a..a7c2539 100644 --- a/src/edu/berkeley/sbp/util/Reflection.java +++ b/src/edu/berkeley/sbp/util/Reflection.java @@ -211,60 +211,68 @@ public final class Reflection { return null; } public static Object impose(Class _class, Object[] fields) { - try { - Object ret = _class.newInstance(); - Field[] f = _class.getFields(); - int j = 0; - for(int i=0; i HR:: { "---" "-"* } > P:: { text } @@ -94,7 +94,9 @@ Item*/ws = > (Chars:: alphanum++) > "\"" text "\"" > (Symbol:: sym++) -// > { Block:: text } + > { Block:: text } + +word = Chars:: bareword blockquote = "adsfafewag" //blockquote = Blockquote:: "\"\"" (block | text "\"\"") @@ -134,7 +136,7 @@ command = Today:: "\\today" // subtypes of url (ftp, etc) as conjunctions, but the "master pattern" // only gets parsed once -urlpath = urlchar* +urlpath = urlchar* -> ~urlv // this ~urlv should be handled by url! bug! username = [a-zA-Z0-9;/?:&=$\-_.+]++ password = [a-zA-Z0-9;/?:&=$\-_.+]++ urlc = [a-zA-Z0-9;/?:&=$\-_.+@] @@ -166,7 +168,7 @@ host = IP:: nums "." nums "." nums "." nums // Tokens /////////////////////////////////////////////////////////////////// -word = alphanum++ +bareword = alphanum++ | quoted quoted = "\"" ((~[\"\\] | escaped)+) "\"" @@ -181,5 +183,6 @@ escaped = lf:: "\\n" alpha = [a-zA-Z] alphanum = [a-zA-Z0-9] sym = ~[a-zA-Z0-9\ \r\n=\">] +//sym = [,()] -- 1.7.10.4