- Timestamp:
- 05/27/08 23:31:37 (6 months ago)
- Files:
-
- trunk/enki2/enki/bootstrap/Lexer.d (modified) (1 diff)
- trunk/enki2/enki/bootstrap/Parser.d (modified) (1 diff)
- trunk/enki2/enki/enki.d (modified) (1 diff)
- trunk/enki2/enki/frontend/ABNFParser.bnf (added)
- trunk/enki2/enki/frontend/Enki1Lexer.bnf (added)
- trunk/enki2/enki/frontend/Enki1Parser.bnf (added)
- trunk/enki2/enki/frontend/Enki1ParserBase.d (added)
- trunk/enki2/enki/frontend/Enki2Lexer.bnf (moved) (moved from trunk/enki2/enki/frontend/EnkiLexer.bnf) (1 diff)
- trunk/enki2/enki/frontend/Enki2Lexer.d (moved) (moved from trunk/enki2/enki/frontend/EnkiLexer.d) (1 diff)
- trunk/enki2/enki/frontend/Enki2Parser.d (modified) (2 diffs)
- trunk/enki2/enki/frontend/EnkiLexerBase.d (modified) (1 diff)
- trunk/enki2/enki/frontend/EnkiParserBase.d (deleted)
- trunk/enki2/enki/frontend/Frontend.d (modified) (5 diffs)
- trunk/enki2/enki/frontend/ISOParser.bnf (added)
- trunk/enki2/enki/generator/BNFGenerator.d (modified) (1 diff)
- trunk/enki2/enki/generator/TextGenerator.d (modified) (1 diff)
- trunk/enki2/enkilib/d/Parser.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/enki2/enki/bootstrap/Lexer.d
r310 r311 7 7 module enki.frontend.EnkiLexer; 8 8 import enki.EnkiToken; 9 import enki. EnkiLexerBase;9 import enki.frontend.EnkiLexerBase; 10 10 "); 11 11 setAttribute("d","filename","./enki/frontend/EnkiLexer.d"); trunk/enki2/enki/bootstrap/Parser.d
r308 r311 3 3 class Parser(CharT) : BootstrapT!(CharT){ 4 4 void runBootstrap(){ 5 setAttribute("d","baseclass"," Enki2ParserBaseT!(CharT)");5 setAttribute("d","baseclass","FrontendT!(CharT)"); 6 6 setAttribute("d","header"," 7 7 module enki.frontend.Enki2Parser; 8 8 9 private import enki.frontend. Enki2ParserBase;9 private import enki.frontend.Frontend; 10 10 private import enki.EnkiToken; 11 11 private import enki.Binding; trunk/enki2/enki/enki.d
r308 r311 187 187 } 188 188 catch(Exception e){ 189 Stdout(e).newline; 190 191 debug{ 192 Stdout.format("Lexer data:").newline; 193 foreach(i,foo; parser.data){ 194 Stdout.format("{3} {0} {1} '{2}'",i,foo.type,foo.value,foo.filename).newline; 195 } 196 197 Stdout.format("Parser data {0} rules:",parser.ruleSet.getRules.length).newline; 198 foreach(rule; parser.ruleSet.getRules){ 199 Stdout.format("{0} {1}",rule.insertOrder,rule.getName).newline; 200 } 201 } 189 Stdout(e).newline; 190 debug parser.debugParser(); 202 191 return 1; 203 192 } trunk/enki2/enki/frontend/Enki2Lexer.bnf
r308 r311 1 1 .d-baseclass = "EnkiLexerBase!(CharT)"; 2 2 .d-header = " 3 module enki. EnkiLexer;3 module enki.frontend.EnkiLexer; 4 4 import enki.EnkiToken; 5 import enki. EnkiLexerBase;5 import enki.frontend.EnkiLexerBase; 6 6 "; 7 7 .d-filename = "./enki/EnkiLexer.d"; trunk/enki2/enki/frontend/Enki2Lexer.d
r310 r311 31 31 debug import tango.io.Stdout; 32 32 33 class Enki LexerT(CharT):EnkiLexerBase!(CharT){33 class Enki2LexerT(CharT):EnkiLexerBaseT!(CharT){ 34 34 /* 35 35 Tokens trunk/enki2/enki/frontend/Enki2Parser.d
r310 r311 28 28 29 29 private import enki.frontend.Frontend; 30 private import enki.frontend.Enki2Lexer; 30 31 private import enki.EnkiToken; 31 32 private import enki.Binding; … … 38 39 debug import tango.io.Stdout; 39 40 40 class Enki2ParserT(CharT):Frontend T!(CharT){41 class Enki2ParserT(CharT):FrontendBaseT!(CharT,Enki2LexerT!(CharT)){ 41 42 static char[] getHelp(){ 42 43 return "Frontend that supports the Enki2 variant of EBNF."; trunk/enki2/enki/frontend/EnkiLexerBase.d
r310 r311 29 29 import tango.util.Convert; 30 30 31 abstract class EnkiLexerBase (CharT) : PositionalCharParserT!(CharT){31 abstract class EnkiLexerBaseT(CharT) : PositionalCharParserT!(CharT){ 32 32 alias CharT[] String; 33 33 alias EnkiTokenT!(CharT) EnkiToken; trunk/enki2/enki/frontend/Frontend.d
r310 r311 1 1 /+ 2 Copyright (c) 200 6-2008 Eric Anderton2 Copyright (c) 2008 Eric Anderton 3 3 4 4 Permission is hereby granted, free of charge, to any person … … 27 27 private import enki.types; 28 28 private import enki.EnkiToken; 29 private import enki.frontend.EnkiLexer;30 29 31 30 private import enkilib.d.TokenParser; … … 37 36 debug import tango.io.Stdout; 38 37 39 public abstract class FrontendT(CharT) : TokenParserT!(CharT,EnkiTokenT!(CharT)){ 38 interface FrontendT(CharT){ 39 public void initialize(FilePath path); 40 public bool parse(); 41 public void semanticPass(); 42 public AttributeSetT!(CharT) getAttributes(); 43 public RuleSetT!(CharT) getRules(); 44 public void debugParser(); 45 } 46 47 public abstract class FrontendBaseT(CharT,EnkiLexer) : TokenParserT!(CharT,EnkiTokenT!(CharT)), FrontendT!(CharT){ 40 48 mixin AllTypesMixin!(CharT); 41 49 alias EnkiTokenT!(CharT) EnkiToken; 42 alias EnkiLexerT!(CharT) EnkiLexer;43 50 44 p ublicAttributeSet attributes;45 p ublicRuleSet ruleSet;51 protected AttributeSet attributes; 52 protected RuleSet ruleSet; 46 53 47 54 public this(){ … … 53 60 ruleSet.addRule(new RulePrototype("eoi","bool")); 54 61 } 55 62 public AttributeSet getAttributes(){ 63 return attributes; 64 } 65 66 public RuleSet getRules(){ 67 return ruleSet; 68 } 69 56 70 public void addRule(Rule rule){ 57 71 ruleSet.addRule(rule); … … 125 139 return this.parse_Syntax(); 126 140 } 141 142 public void debugParser(){ 143 debug{ 144 Stdout.format("Lexer data:").newline; 145 foreach(i,foo; data){ 146 Stdout.format("{3} {0} {1} '{2}'",i,foo.type,foo.value,foo.filename).newline; 147 } 148 149 Stdout.format("Parser data {0} rules:",ruleSet.getRules().length).newline; 150 foreach(rule; ruleSet.getRules()){ 151 Stdout.format("{0} {1}",rule.insertOrder,rule.getName).newline; 152 } 153 } 154 } 127 155 } trunk/enki2/enki/generator/BNFGenerator.d
r308 r311 44 44 Copyright (c) 2008 Eric Anderton 45 45 46 Generates an E BNF script that is47 equivalent to the input EBNF script.46 Generates an Enki2 EBNF script that is 47 equivalent to the input BNF script. 48 48 Is used primarily for verification and 49 validation of Enki itself, and is not 50 used for general development. 49 validation of Enki itself, but can also 50 be used with the alternative frontends 51 to translate to the Enki2 EBNF syntax. 51 52 `; 52 53 } trunk/enki2/enki/generator/TextGenerator.d
r310 r311 105 105 106 106 public void toCode(FrontendT!(CharT) frontend,bool test=false){ 107 visit(frontend. attributes);108 visit(frontend. ruleSet);107 visit(frontend.getAttributes()); 108 visit(frontend.getRules()); 109 109 110 110 if(test){ trunk/enki2/enkilib/d/Parser.d
r305 r311 109 109 bool match(int start,int end); 110 110 bool match(dchar value); 111 111 112 112 private template isArray(T) 113 113 {
