Changeset 306
- Timestamp:
- 05/27/08 20:31:57 (8 months ago)
- Files:
-
- trunk/enki2/enki/bootstrap/Parser.d (modified) (2 diffs)
- trunk/enki2/enki/enki.d (modified) (3 diffs)
- trunk/enki2/enki/frontend (added)
- trunk/enki2/enki/frontend/EnkiLexer.bnf (moved) (moved from trunk/enki2/enki/bootstrap/EnkiLexer.bnf)
- trunk/enki2/enki/frontend/EnkiLexer.d (moved) (moved from trunk/enki2/enki/EnkiLexer.d)
- trunk/enki2/enki/frontend/EnkiParser.bnf (moved) (moved from trunk/enki2/enki/bootstrap/EnkiParser.bnf)
- trunk/enki2/enki/frontend/EnkiParser.d (moved) (moved from trunk/enki2/enki/EnkiParser.d)
- trunk/enki2/enki/frontend/all.d (added)
- trunk/enki2/enki/generator/all.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/enki2/enki/bootstrap/Parser.d
r305 r306 5 5 setAttribute("d","baseclass","EnkiParserBase!(CharT)"); 6 6 setAttribute("d","header"," 7 module enki. EnkiParser;7 module enki.frontend.Enki2Parser; 8 8 9 9 private import enki.EnkiToken; … … 16 16 private import enki.RulePredicate; 17 17 "); 18 setAttribute("d","filename","enki/ EnkiParser.d");19 setAttribute("d","classname","Enki ParserT(CharT)");18 setAttribute("d","filename","enki/frontend/Enki2Parser.d"); 19 setAttribute("d","classname","Enki2ParserT(CharT)"); 20 20 setAttribute("bootstrap","modulename","enki.bootstrap.Parser"); 21 21 setAttribute("bootstrap","filename","enki/bootstrap/Parser.d"); 22 22 setAttribute("bootstrap","classname","Parser"); 23 setAttribute("bnf","filename","enki/ bootstrap/EnkiParser.bnf");23 setAttribute("bnf","filename","enki/frontend/Enki2Parser.bnf"); 24 24 setAttribute("all","copyright"," 25 25 Copyright (c) 2008 Eric Anderton trunk/enki2/enki/enki.d
r305 r306 43 43 enki <source ebnf file> { -switch } 44 44 45 -g<name> Selects generator <name> for the output 46 -h<name> Outputs help info for generator <name> 47 -c sends generator output to console (stdout) 45 -g<name> Selects generator <name> for the output 46 -f<name> Selects frontend grammar <name> for the input file 47 -h<name> Outputs help info for generator or frontend <name> 48 -c sends generator output to console (stdout) 48 49 49 50 The output filename depends on which generator is selected … … 54 55 alias EnkiParserT!(CharT) EnkiParser; 55 56 56 interface GeneratorRef{57 public void toCode(EnkiParser backend,bool testMode);58 public void getHelp();59 }60 61 class GeneratorRefT(T) : GeneratorRef{62 public void toCode(EnkiParser backend,bool testMode){63 backend.toCode!(T)(testMode);64 }65 public void getHelp(){66 Stdout(T.getHelp());67 }68 }69 70 GeneratorRef[char[]] registeredGenerators;71 72 static this(){73 registeredGenerators["d"] = new GeneratorRefT!(DGeneratorT!(CharT));74 registeredGenerators["bnf"] = new GeneratorRefT!(BNFGeneratorT!(CharT));75 registeredGenerators["boot"] = new GeneratorRefT!(BootstrapGeneratorT!(CharT));76 registeredGenerators["java"] = new GeneratorRefT!(JavaGeneratorT!(CharT));77 registeredGenerators["py"] = new GeneratorRefT!(PythonGeneratorT!(CharT));78 registeredGenerators["js"] = new GeneratorRefT!(JavascriptGeneratorT!(CharT));79 }80 81 57 void displayHelp(){ 82 58 Stdout(helpText).newline; 83 59 Stdout("Supported code generators:").newline; 84 60 foreach(name, gen; registeredGenerators){ 61 Stdout.format("{0} ",name); 62 } 63 Stdout("Supported frontend grammars:").newline; 64 foreach(name, frontend; registeredFrontends){ 85 65 Stdout.format("{0} ",name); 86 66 } … … 97 77 FilePath inputFilename; 98 78 char[] generatorName = "d"; 79 char[] frontendNAme = "ebnf"; 99 80 bool testMode = false; 100 81 bool helpMode = false; 101 char[] help GeneratorName = null;82 char[] helpName = null; 102 83 103 84 // configure the arg parser trunk/enki2/enki/generator/all.d
r302 r306 31 31 public import enki.generator.PythonGenerator; 32 32 public import enki.generator.JavascriptGenerator; 33 34 interface GeneratorRef{ 35 public void toCode(EnkiParser backend,bool testMode); 36 public void getHelp(); 37 } 38 39 class GeneratorRefT(T) : GeneratorRef{ 40 public void toCode(EnkiParser backend,bool testMode){ 41 backend.toCode!(T)(testMode); 42 } 43 public void getHelp(){ 44 Stdout(T.getHelp()); 45 } 46 } 47 48 GeneratorRef[char[]] registeredGenerators; 49 50 static this(){ 51 registeredGenerators["d"] = new GeneratorRefT!(DGeneratorT!(CharT)); 52 registeredGenerators["bnf"] = new GeneratorRefT!(BNFGeneratorT!(CharT)); 53 registeredGenerators["boot"] = new GeneratorRefT!(BootstrapGeneratorT!(CharT)); 54 registeredGenerators["java"] = new GeneratorRefT!(JavaGeneratorT!(CharT)); 55 registeredGenerators["py"] = new GeneratorRefT!(PythonGeneratorT!(CharT)); 56 registeredGenerators["js"] = new GeneratorRefT!(JavascriptGeneratorT!(CharT)); 57 }
