Changeset 306

Show
Ignore:
Timestamp:
05/27/08 20:31:57 (8 months ago)
Author:
pragma
Message:

Breaking commit - restructuring Enki2

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/enki2/enki/bootstrap/Parser.d

    r305 r306  
    55        setAttribute("d","baseclass","EnkiParserBase!(CharT)"); 
    66        setAttribute("d","header"," 
    7 module enki.EnkiParser; 
     7module enki.frontend.Enki2Parser; 
    88 
    99private import enki.EnkiToken; 
     
    1616private import enki.RulePredicate; 
    1717"); 
    18         setAttribute("d","filename","enki/EnkiParser.d"); 
    19         setAttribute("d","classname","EnkiParserT(CharT)"); 
     18        setAttribute("d","filename","enki/frontend/Enki2Parser.d"); 
     19        setAttribute("d","classname","Enki2ParserT(CharT)"); 
    2020        setAttribute("bootstrap","modulename","enki.bootstrap.Parser"); 
    2121        setAttribute("bootstrap","filename","enki/bootstrap/Parser.d"); 
    2222        setAttribute("bootstrap","classname","Parser"); 
    23         setAttribute("bnf","filename","enki/bootstrap/EnkiParser.bnf"); 
     23        setAttribute("bnf","filename","enki/frontend/Enki2Parser.bnf"); 
    2424        setAttribute("all","copyright"," 
    2525    Copyright (c) 2008 Eric Anderton 
  • trunk/enki2/enki/enki.d

    r305 r306  
    4343  enki <source ebnf file> { -switch } 
    4444 
    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) 
    4849 
    4950The output filename depends on which generator is selected 
     
    5455alias EnkiParserT!(CharT) EnkiParser; 
    5556 
    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  
    8157void displayHelp(){ 
    8258    Stdout(helpText).newline; 
    8359    Stdout("Supported code generators:").newline; 
    8460    foreach(name, gen; registeredGenerators){ 
     61        Stdout.format("{0} ",name); 
     62    } 
     63    Stdout("Supported frontend grammars:").newline; 
     64    foreach(name, frontend; registeredFrontends){ 
    8565        Stdout.format("{0} ",name); 
    8666    } 
     
    9777    FilePath inputFilename; 
    9878    char[] generatorName = "d"; 
     79    char[] frontendNAme = "ebnf"; 
    9980    bool testMode = false; 
    10081    bool helpMode = false; 
    101     char[] helpGeneratorName = null; 
     82    char[] helpName = null; 
    10283 
    10384    // configure the arg parser 
  • trunk/enki2/enki/generator/all.d

    r302 r306  
    3131public import enki.generator.PythonGenerator; 
    3232public import enki.generator.JavascriptGenerator; 
     33 
     34interface GeneratorRef{ 
     35    public void toCode(EnkiParser backend,bool testMode); 
     36    public void getHelp(); 
     37} 
     38 
     39class 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 
     48GeneratorRef[char[]] registeredGenerators; 
     49 
     50static 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}