From: adam Date: Thu, 13 Jul 2006 21:43:50 +0000 (-0400) Subject: checkpoint X-Git-Tag: tag_for_25-Mar~160 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=1e8506b9723a432c2c010b0f91b17cd0b68f6f68 checkpoint darcs-hash:20060713214350-5007d-4a9695efeb8dac98fe780cb7c3b699367dae496f.gz --- diff --git a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java index 9ccf8a8..742918b 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammarBindings.java @@ -85,12 +85,17 @@ public class MetaGrammarBindings { } } - public static @bind.as("#import") GrammarNode poundimport(String fileName) { - System.err.println("#import " + fileName); + public static @bind.as("#import") GrammarNode poundimport(String fileName, String as) { + if (as==null) as = ""; + System.err.println("#import " + fileName + " as " + as); try { Tree t = new CharParser(MetaGrammar.make()).parse(new FileInputStream(fileName)).expand1(); Tree.TreeFunctor red = (Tree.TreeFunctor)t.head(); - return (MetaGrammarBindings.GrammarNode)red.invoke(t); + String oldprefix = prefix; + prefix = as; + GrammarNode gn = (GrammarNode)red.invoke(t); + prefix = oldprefix; + return gn; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); diff --git a/tests/meta.g b/tests/meta.g index 51e55be..4416d55 100644 --- a/tests/meta.g +++ b/tests/meta.g @@ -7,9 +7,9 @@ s = ws! Grammar ws! Grammar = Declaration +/ ws Declaration = NonTerminal - | ^"#import" ws! FileName //(ws! "as" ws! Prefix)? + | ^"#import" ws! FileName (ws! "as" ws! Prefix)? -//Prefix = ([a-zA-Z] ".")+ "*" +Prefix = ([a-zA-Z] ".")+ "*" FileName = FileNameChar+ -> [\r\n ] FileNameChar = Space:: "\\ " | ~[\r\n ]