Changeset 307

Show
Ignore:
Timestamp:
05/27/08 20:48:00 (6 months ago)
Author:
pragma
Message:

Another breaking commit - restructuring for Enki2

Files:

Legend:

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

    r305 r307  
    2727private import enki.EnkiToken; 
    2828private import enki.Backend; 
    29 private import enki.EnkiLexer; 
     29private import enki.frontend.EnkiLexer; 
    3030 
    3131private import enkilib.d.TokenParser; 
  • trunk/enki2/enki/enki.d

    r306 r307  
    2525module enki.enki; 
    2626 
    27 private import enki.EnkiParser; 
    28  
     27private import enki.frontend.all; 
    2928private import enki.generator.all; 
    3029 
     
    5554alias EnkiParserT!(CharT) EnkiParser; 
    5655 
     56static char[] defaultFrontend = "enki2"; 
     57static char[] defaultGenerator = "d"; 
     58 
    5759void displayHelp(){ 
    5860    Stdout(helpText).newline; 
    5961    Stdout("Supported code generators:").newline; 
    60     foreach(name, gen; registeredGenerators){ 
     62    foreach(name, gen; registeredGenerators){        
     63        if(name == defaultGenerator){ 
     64            Stdout("*"); 
     65        } 
    6166        Stdout.format("{0} ",name); 
    6267    } 
    6368    Stdout("Supported frontend grammars:").newline; 
    6469    foreach(name, frontend; registeredFrontends){ 
     70        if(name == defaultFrontend){ 
     71            Stdout("*"); 
     72        } 
    6573        Stdout.format("{0} ",name); 
    6674    } 
     
    7684    // set defaults 
    7785    FilePath inputFilename; 
    78     char[] generatorName = "d"
    79     char[] frontendNAme = "ebnf"
     86    char[] frontendName = defaultFrontend
     87    char[] generatorName = defaultGenerator
    8088    bool testMode = false; 
    8189    bool helpMode = false; 
     
    8997        inputFilename = new FilePath(value); 
    9098    }); 
     99     
     100    argParser.bind("-", "f",delegate void(char[] value){ 
     101        frontendName = value; 
     102    });  
    91103 
    92104    argParser.bind("-", "g",delegate void(char[] value){ 
     
    96108    argParser.bind("-", "h",delegate void(char[] value){ 
    97109        if(value.length > 0){ 
    98             helpGeneratorName = value; 
     110            helpName = value; 
    99111        } 
    100112        helpMode = true; 
     
    123135        } 
    124136        else{ 
    125             if(!(helpGeneratorName in registeredGenerators)){ 
     137            if(helpName in registeredGenerators){ 
     138                registeredGenerators[helpName].getHelp(); 
     139            } 
     140            else if(helpName in registeredFrontends){ 
     141                registeredFrontends[helpName].getHelp(); 
     142            } 
     143            else{            
    126144                Stdout.format("Error: Could not find help for generator '{0}'.",helpGeneratorName).newline; 
    127145                return 1; 
    128146            } 
    129             registeredGenerators[helpGeneratorName].getHelp(); 
    130147        } 
    131148        return 0; 
     
    141158        return 1; 
    142159    } 
     160     
     161    if(!(frontendName in registeredFrontends)){ 
     162        Stdout.format("Error: Frontend '{0}' is not supported.",frontendName).newline; 
     163        return 1; 
     164    }    
    143165 
    144166    if(!(generatorName in registeredGenerators)){ 
     
    147169    } 
    148170 
    149     // init the Enki Parser - this runs the lexer pass 
    150     auto parser = new EnkiParser(); 
    151     parser.initialize(inputFilename); 
    152  
    153171    try{     
     172        // init the Enki Parser - this runs the lexer pass 
     173        auto parser = registeredFrontends[frontendName].create(); 
     174        parser.initialize(inputFilename); 
     175         
    154176        // perform the full parse 
    155177        if(!parser.parse()){ 
     
    161183 
    162184        // run the selected generator 
    163         registeredGenerators[generatorName].toCode(parser,testMode); 
     185        auto generator = registeredGenerators[generatorName].toCode(parser,testMode); 
    164186    } 
    165187    catch(Exception e){ 
  • trunk/enki2/enki/frontend/Enki2Parser.bnf

    r306 r307  
    11.d-baseclass = "EnkiParserBase!(CharT)"; 
    22.d-header = " 
    3 module enki.EnkiParser; 
     3module enki.frontend.Enki2Parser; 
    44 
    55private import enki.EnkiToken; 
     
    1212private import enki.RulePredicate; 
    1313"; 
    14 .d-filename = "enki/EnkiParser.d"; 
    15 .d-classname = "EnkiParserT(CharT)"; 
     14.d-filename = "enki/frontend/Enki2Parser.d"; 
     15.d-classname = "Enki2ParserT(CharT)"; 
    1616.bootstrap-modulename = "enki.bootstrap.Parser"; 
    1717.bootstrap-filename = "enki/bootstrap/Parser.d"; 
  • trunk/enki2/enki/frontend/Enki2Parser.d

    r306 r307  
    2525+/ 
    2626 
    27 module enki.EnkiParser; 
     27module enki.frontend.Enki2Parser; 
    2828 
    2929private import enki.EnkiToken; 
     
    3838debug import tango.io.Stdout; 
    3939 
    40 class EnkiParserT(CharT):EnkiParserBase!(CharT){ 
    41  
    42  
    43  
    44  
     40class Enki2ParserT(CharT):EnkiParserBase!(CharT){ 
    4541    /* 
    4642    Syntax 
  • trunk/enki2/enki/frontend/all.d

    r306 r307  
    2626 
    2727public import enki.frontend.Enki2Parser; 
    28 public import enki.frontend.Enki1Parser; 
    29 public import enki.frontend.ISOParser; 
    30 public import enki.frontend.ABNFParser; 
     28//public import enki.frontend.Enki1Parser; 
     29//public import enki.frontend.ISOParser; 
     30//public import enki.frontend.ABNFParser; 
     31 
     32private import tango.io.Stdout; 
    3133 
    3234interface FrontendRef{ 
    33     public void initialize(FilePath path); 
     35    public T create(); 
    3436    public void getHelp(); 
    3537} 
    3638 
    3739class FrontendRefT(T) : FrontendRef{ 
    38     public void initialize(FilePath path){ 
    39         backend.toCode!(T)(testMode); 
     40    public T create(){ 
     41        return new T(); 
    4042    } 
    4143    public void getHelp(){ 
     
    4749 
    4850static this(){ 
    49    registeredGenerators["enki1"]    = new GeneratorRefT!(Enki1ParserT!(CharT)); 
    50     registeredGenerators["enki2"]  = new GeneratorRefT!(Enki2ParserT!(CharT)); 
    51    registeredGenerators["iso"] = new GeneratorRefT!(ISOParserT!(CharT)); 
    52    registeredGenerators["abnf"] = new GeneratorRefT!(ABNFParserT!(CharT)); 
     51// registeredGenerators["enki1"]    = new FrontendRefT!(Enki1ParserT!(CharT)); 
     52    registeredGenerators["enki2"]  = new FrontendRefT!(Enki2ParserT!(CharT)); 
     53// registeredGenerators["iso"] = new FrontendRefT!(ISOParserT!(CharT)); 
     54// registeredGenerators["abnf"] = new FrontendRefT!(ABNFParserT!(CharT)); 
    5355} 
  • trunk/enki2/enki/generator/all.d

    r306 r307  
    3232public import enki.generator.JavascriptGenerator; 
    3333 
     34private import tango.io.Stdout; 
     35 
    3436interface GeneratorRef{ 
    3537    public void toCode(EnkiParser backend,bool testMode);