Changeset 245
- Timestamp:
- 08/16/06 16:00:34 (6 years ago)
- Files:
-
- trunk/enki/BaseParser.d (modified) (3 diffs)
- trunk/enki/Expression.d (modified) (1 diff)
- trunk/enki/IParser.d (modified) (1 diff)
- trunk/enki/codegen/d/CodeGenerator.d (modified) (1 diff)
- trunk/enki/enki_bn.d (modified) (1 diff)
- trunk/enki/library/d/Parser.bnf (modified) (3 diffs)
- trunk/enki/library/d/ParserBackend.d (modified) (4 diffs)
- trunk/enki/library/d/Tokenizer.bnf (modified) (1 diff)
- trunk/enki/library/d/parser/Asm.bnf (modified) (3 diffs)
- trunk/enki/library/d/parser/Attribute.bnf (modified) (3 diffs)
- trunk/enki/library/d/parser/Class.bnf (modified) (4 diffs)
- trunk/enki/library/d/parser/Class.d (modified) (1 diff)
- trunk/enki/library/d/parser/Conditional.bnf (modified) (4 diffs)
- trunk/enki/library/d/parser/Declaration.bnf (modified) (7 diffs)
- trunk/enki/library/d/parser/Enum.bnf (modified) (2 diffs)
- trunk/enki/library/d/parser/Expression.bnf (modified) (8 diffs)
- trunk/enki/library/d/parser/Function.bnf (modified) (1 diff)
- trunk/enki/library/d/parser/Import.bnf (modified) (2 diffs)
- trunk/enki/library/d/parser/Interface.bnf (modified) (1 diff)
- trunk/enki/library/d/parser/Mixin.bnf (modified) (2 diffs)
- trunk/enki/library/d/parser/Module.bnf (modified) (2 diffs)
- trunk/enki/library/d/parser/Statement.d (modified) (5 diffs)
- trunk/enki/library/d/parser/Statements.bnf (modified) (11 diffs)
- trunk/enki/library/d/parser/Struct.bnf (modified) (1 diff)
- trunk/enki/library/d/parser/Template.bnf (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/enki/BaseParser.d
r241 r245 48 48 49 49 protected String data; 50 protected uint pos;50 // protected uint pos; 51 51 protected ErrorData[] errors; 52 52 … … 61 61 pos = 0; 62 62 } 63 63 /* 64 64 protected uint position(){ 65 65 return this.pos; … … 68 68 protected void position(uint newPos){ 69 69 this.pos = newPos; 70 } 70 }*/ 71 72 uint position; 73 alias position pos; 71 74 72 75 protected String sliceData(uint start,uint end){ trunk/enki/Expression.d
r240 r245 739 739 else{ 740 740 return "terminal(convert!(String," ~ type ~ ")(bind_" ~ bindingName ~ ")).success"; 741 } 741 } 742 742 } 743 743 trunk/enki/IParser.d
r235 r245 44 44 protected ResultString regexp(String str); 45 45 protected ResultString terminal(String str); 46 protected uint position();47 protected void position(uint newPos);46 //protected uint position(); 47 //protected void position(uint newPos); 48 48 protected String sliceData(uint start,uint end); 49 49 public ResultString terminal(uint ch); trunk/enki/codegen/d/CodeGenerator.d
r244 r245 374 374 renderProductionTestInternal(test,pass,fail); 375 375 } 376 377 /* 378 assignSliceToBinding(Binding bind,positionHandle sliceFrom); // slices up to current position 379 assignLoopSliceToBinding(Binding bind); // slices all parts parsed by loop 380 381 renderIfTest(ProductionCall test,Statment pass,Statement fail); 382 render(Statement stmt); 383 render(Binding bind); 384 385 regexpTest(String regexp,Binding bind,Statement pass,Statement fail); 376 377 void assignSlice(String type,String varName,PositionHandle sliceFrom,PositionHandle sliceTo=null){ 378 emit( 379 } 380 381 /* terminal expressions */ 382 383 void regexpTest(String regexp,Binding bind,Statement pass,Statement fail){ 384 } 386 385 stringTerminalTest(String value,Binding bind,Statement pass,Statement fail); 387 386 terminalTest(String value,Binding bind,Statement pass,Statement fail); 388 387 rangeTest(String start,String end); 389 390 render(Scope scope); // requests statement placement (or call) at a particular place in the output 391 392 388 389 /* 393 390 unwind(positionHandle unwindTo); 394 391 trunk/enki/enki_bn.d
r237 r245 2 2 // This file is automatically maintained by the BUILD utility, 3 3 // Please refrain from manually editing it. 4 long auto_build_number = 18 4;4 long auto_build_number = 185; trunk/enki/library/d/Parser.bnf
r235 r245 28 28 29 29 .parsetype(Token); 30 .utf("32"); 30 31 31 .include("./parser/Asm.bnf"); 32 .include("./parser/Attribute.bnf"); 33 .include("./parser/Class.bnf"); 34 .include("./parser/Conditional.bnf"); 32 .import(enki.library.d.Token); 33 .import(enki.library.d.ParserBackend); 34 35 .baseclass(ParserBackend); 36 .classname(Parser); 37 38 .include("enki/library/d/parser/Asm.bnf"); 39 .include("enki/library/d/parser/Attribute.bnf"); 40 .include("enki/library/d/parser/Class.bnf"); 41 .include("enki/library/d/parser/Conditional.bnf"); 42 .include("enki/library/d/parser/Declaration.bnf"); 43 .include("enki/library/d/parser/Enum.bnf"); 44 .include("enki/library/d/parser/Expression.bnf"); 45 .include("enki/library/d/parser/Function.bnf"); 46 .include("enki/library/d/parser/Import.bnf"); 47 .include("enki/library/d/parser/Interface.bnf"); 48 .include("enki/library/d/parser/Mixin.bnf"); 49 .include("enki/library/d/parser/Module.bnf"); 50 .include("enki/library/d/parser/Struct.bnf"); 51 .include("enki/library/d/parser/Statements.bnf"); 52 .include("enki/library/d/parser/Template.bnf"); 35 53 36 54 Syntax = Module mod ::= Module:mod; … … 39 57 # where a fully qualified namespace versus a single Identifier is allowed. 40 58 41 Namespace 59 Namespace 42 60 ::= &Tok.Identifier { &Tok.Period &Tok.Identifier }; 43 61 … … 48 66 ::= &Tok.Identifier; 49 67 50 Symbol ::= ??? 68 //TODO: define me - Symbol for SymbolTemplateArgument 69 Symbol ::= ""; trunk/enki/library/d/ParserBackend.d
r235 r245 24 24 25 25 // using a token type of 'Token' 26 class ParserBackend : enki.BaseParser{26 class ParserBackend{ 27 27 struct ErrorData{ 28 28 uint pos; … … 31 31 32 32 private Token[] data; 33 private uint pos; 33 private uint position; 34 alias pos position; 34 35 private ErrorData[] errors; 35 36 … … 37 38 } 38 39 39 public void init alize(String input){40 public void initialize(String input){ 40 41 data = input; 41 42 pos = 0; 42 43 } 43 44 protected uint position(){ 45 return this.pos; 46 } 47 48 protected void position(uint newPos){ 49 this.pos = newPos; 50 } 51 44 52 45 protected uint nextToken(){ 53 46 return (this.pos++); … … 139 132 ResultString(); 140 133 } 141 142 public 143 134 144 135 // overrides left unused: 145 136 public ResultString terminal(uint ch){ trunk/enki/library/d/Tokenizer.bnf
r241 r245 91 91 SpecialToken:~tokens | 92 92 SpecialTokenSequence:~tokens | 93 //Keyword:~tokens | 93 94 Identifier:~tokens | 94 95 CharacterLiteral:~tokens | 95 Keyword:~tokens |96 96 Operator:~tokens | 97 97 FloatLiteral:~tokens | trunk/enki/library/d/parser/Asm.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Asm); 27 .import(enki.library.d.x86.Opcode); 28 .import(enki.library.d.x86.Register); 29 30 .include("enki/library/d/parser/x86/Register.bnf"); 31 .include("enki/library/d/parser/x86/Opcode.bnf"); 32 26 33 AsmInstruction 27 34 ::= "align" IntegerExpression | … … 39 46 &Token.Identifier &Tok.Colon AsmInstruction; 40 47 48 IntegerExpression ::= &Token.Integer; 49 41 50 Operands 42 51 ::= Operand [ &Tok.Comma Operands ]; … … 52 61 53 62 AsmLogAndExp 54 ::= AsmOrExp [ Tok.AndAnd AsmOrExp ];63 ::= AsmOrExp [ &Tok.AndAnd AsmOrExp ]; 55 64 56 AsmOrExp: 57 AsmXorExp 58 AsmXorExp | AsmXorExp 65 AsmOrExp 66 ::= AsmXorExp [ &Tok.Or AsmXorExp ]; 59 67 60 AsmXorExp: 61 AsmAndExp 62 AsmAndExp ^ AsmAndExp 68 AsmXorExp 69 ::= AsmAndExp [ &Tok.Inverse AsmAndExp ]; 63 70 64 AsmAndExp: 65 AsmEqualExp 66 AsmEqualExp & AsmEqualExp 71 AsmAndExp 72 ::= AsmEqualExp [ &Tok.And AsmEqualExp ]; 67 73 68 AsmEqualExp: 69 AsmRelExp 70 AsmRelExp == AsmRelExp 71 AsmRelExp != AsmRelExp 74 AsmEqualExp 75 ::= AsmRelExp [ (&Tok.EqualsEquals | &Tok.NotEquals) AsmRelExp ]; 72 76 73 AsmRelExp: 74 AsmShiftExp 75 AsmShiftExp < AsmShiftExp 76 AsmShiftExp <= AsmShiftExp 77 AsmShiftExp > AsmShiftExp 78 AsmShiftExp >= AsmShiftExp 77 AsmRelExp 78 ::= AsmShiftExp [ 79 &Tok.Less | 80 &Tok.LessEquals | 81 &Tok.Greater | 82 &Tok.GreaterEquals 83 ] AsmShiftExp; 79 84 80 AsmShiftExp: 81 AsmAddExp 82 AsmAddExp << AsmAddExp 83 AsmAddExp >> AsmAddExp 84 AsmAddExp >>> AsmAddExp 85 AsmShiftExp 86 ::= AsmAddExp [ 87 &Tok.LessLess | 88 &Tok.GreaterGreater | 89 &Tok.GreaterGreaterGreater 90 ] AsmAddExp; 85 91 86 AsmAddExp: 87 AsmMulExp 88 AsmMulExp + AsmMulExp 89 AsmMulExp - AsmMulExp 92 AsmAddExp 93 ::= AsmMulExp [ 94 &Tok.Add | 95 &Tok.Minus 96 ] AsmMulExp; 90 97 91 AsmMulExp: 92 AsmBrExp 93 AsmBrExp * AsmBrExp 94 AsmBrExp / AsmBrExp 95 AsmBrExp % AsmBrExp 98 AsmMulExp 99 ::= AsmBrExp [ 100 &Tok.Star | 101 &Tok.Div | 102 &Tok.Mod 103 ] AsmBrExp; 104 105 AsmBrExp 106 ::= AsmUnaExp | 107 AsmBrExp &Tok.OpenBracket AsmExp &Tok.CloseBracket; 96 108 97 AsmBrExp: 98 AsmUnaExp 99 AsmBrExp [ AsmExp ] 100 101 AsmUnaExp: 102 AsmTypePrefix AsmExp 103 offset AsmExp 104 seg AsmExp 105 + AsmUnaExp 106 - AsmUnaExp 107 ! AsmUnaExp 108 ~ AsmUnaExp 109 AsmPrimaryExp 109 AsmUnaExp 110 ::= 111 AsmTypePrefix AsmExp | 112 "offset" AsmExp | 113 "seg" AsmExp | 114 &Tok.Plus AsmUnaExp | 115 &Tok.Minus AsmUnaExp | 116 &Tok.Not AsmUnaExp | 117 &Tok.Cat AsmUnaExp | 118 AsmPrimaryExp; 110 119 111 120 AsmPrimaryExp 112 ::= IntegerConstant|113 FloatConstant |121 ::= &Token.Integer | 122 &Token.FloatingPoint | 114 123 "__LOCAL_SIZE" | 115 124 &Tok.Dollar | trunk/enki/library/d/parser/Attribute.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Attribute); 27 26 28 AttributeSpecifier 27 29 = Declaration[] decls … … 29 31 30 32 Attribute 31 = void setAttrib( attr)33 = void setAttrib(Attribute attr) 32 34 ::= LinkageAttribute:attr | 33 35 AlignAttribute:attr | … … 36 38 37 39 BasicAttribute 38 = new BasicAttribute( type)40 = new BasicAttribute(uint type) 39 41 ::= &Tok.Deprecated @BasicAttribute.Deprecated:type | 40 42 &Tok.Private @BasicAttribute.Private:type | trunk/enki/library/d/parser/Class.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Class); 27 26 28 ClassDeclaration 27 29 = new Class(String name,InterfaceRef[] interfaces,Declaration[] classBody) 28 ::= &Tok.Class Token.Identifier:name [&Tok.Colon BaseClasslist:interfaces] ClassBody:classBody;30 ::= &Tok.Class &Token.Identifier:name [&Tok.Colon InterfaceClasses:interfaces] ClassBody:classBody; 29 31 30 BaseClasslist 32 InterfaceClasses 31 33 = InterfaceRef[] interfaces 32 ::= Inte faceClass:~interfaces { InterfaceClass:~interfaces };34 ::= InterfaceRef:~interfaces { InterfaceRef:~interfaces }; 33 35 34 36 InterfaceRef 35 37 = InterfaceRef InterfaceRef(uint type,String name) 36 :: = [Protection:type] Identifier:name;38 ::= [Protection:type] Identifier:name; 37 39 38 40 Protection … … 44 46 45 47 ClassBody 46 = Declaration[] decls ;47 ::= &Tok.OpenCurly @pushAttribs { ClassBodyDeclaration ;decls } @popAttribs &Tok.CloseCurly;48 = Declaration[] decls 49 ::= &Tok.OpenCurly @pushAttribs { ClassBodyDeclaration:decls } @popAttribs &Tok.CloseCurly; 48 50 49 51 ClassBodyDeclaration 50 = Declaration[] decls ;52 = Declaration[] decls 51 53 ::= Declaration:~decls | 52 54 Constructor:~decls | … … 75 77 ::= &Tok.Static &Tok.Cat &Tok.This &Tok.OpenParen &Tok.CloseParen FunctionBody:functionBody; 76 78 77 ClassInvariant78 = new ClassInvariant(FunctionBody functionBody)79 Invariant 80 = new Invariant(FunctionBody functionBody) 79 81 ::= &Tok.Invariant FunctionBody:functionBody; 80 82 … … 96 98 &Tok.Class [&Tok.OpenParen ArgumentList:classArgs &Tok.CloseParen] 97 99 [SuperClass:superClass] [InterfaceClasses:interfaces] ClassBody:classBody; 100 101 //TODO: allow for templated namespace references as well 102 SuperClass 103 ::= NamespaceRef; trunk/enki/library/d/parser/Class.d
r235 r245 59 59 } 60 60 } 61 class ClassInvariant : Declaration{61 class Invariant : Declaration{ 62 62 public this(FunctionBody functionBody){ 63 63 } trunk/enki/library/d/parser/Conditional.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Conditional); 27 26 28 ConditionalDeclaration 27 29 = new ConditionalDeclaration(Condition cond,Declaration[] trueBranch,Declaration[] falseBranch) … … 40 42 41 43 VersionCondition 42 = new VersionCondition(VersionValue :value)44 = new VersionCondition(VersionValue value) 43 45 ::= &Tok.Version &Tok.OpenParen VersionValue:value &Tok.CloseParen; 44 46 … … 48 50 49 51 DebugCondition 50 = new DebugCondition(VersionValue :value)52 = new DebugCondition(VersionValue value) 51 53 ::= &Tok.Debug [ &Tok.OpenParen VersionValue:value &Tok.CloseParen ]; 52 54 … … 65 67 IntegerVersionValue 66 68 = new IntegerVersionValue(Integer value) 67 ::= Integer:value;69 ::= &Token.Integer:value; 68 70 69 71 trunk/enki/library/d/parser/Declaration.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Declaration); 27 26 28 ##### Declaration ##### 27 29 … … 34 36 ::= MemberDecl:decl &Tok.Semi | 35 37 MethodDecl:decl | 36 AutoDeclaration:decl &Tok.Semi 37 ); 38 AutoDeclaration:decl &Tok.Semi; 38 39 39 40 MemberDecl … … 53 54 ::= Declarator:decl [ &Tok.Equals Initializer:init ]; 54 55 55 DeclaratorIdentifierList :56 DeclaratorIdentifierList 56 57 = DeclaratorIdentifier[] decls 57 58 ::= DeclaratorIdentifier:~decls { &Tok.Comma DeclaratorIdentifier:~decls }; … … 59 60 DeclaratorIdentifier 60 61 = new DeclaratorIdentifier(String name,Initializer[] init) 61 ::= Identifier:name [ %Tok.Equals Initializer:init ];62 ::= Identifier:name [ &Tok.Equals Initializer:init ]; 62 63 63 64 BasicType 64 = BasicType (type,ident)65 = BasicType BasicType(type,ident) 65 66 ::= ( 66 67 &Tok.Bool @BasicType.Bool:type | … … 85 86 &Tok.CDouble @BasicType.CDouble:type | 86 87 &Tok.CReal @BasicType.CReal:type | 87 &Tok.Void @BasicType.Void:type |88 &Tok.Void @BasicType.Void:type 88 89 ) | ( 89 90 ([&Tok.Period] IdentifierList):ident @BasicType.User:type … … 107 108 108 109 DeclaratorSuffix 109 ::= &tok.OpenBracket [ Expression | Type ] &tok.CloseBracket [Parameters] 110 ::= &tok.OpenBracket [ Expression | Type ] &tok.CloseBracket [Parameters]; 110 111 111 112 IdentifierList … … 115 116 TemplateInstance &tok.Period IdentifierList; 116 117 117 Typeof :118 &Tok.Typeof ( Expression ) 118 Typeof 119 ::= &Tok.Typeof ( Expression ); 119 120 120 121 #NOTE: StorageClass is merged with StorageClasses from the original spec for efficency trunk/enki/library/d/parser/Enum.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Enum); 27 26 28 EnumDeclaration 27 29 = new EnumDeclaration(String name,Type baseType,EnumMember[] members) 28 30 ::= &Tok.Enum ( 29 [Identifier:name] [ &Tok.Colon Type:baseType ] EnumBody:members ;31 [Identifier:name] [ &Tok.Colon Type:baseType ] EnumBody:members 30 32 ); 31 33 … … 39 41 40 42 EnumMember 41 = EnumMember (String name,AssignExpression expr)43 = EnumMember EnumMember(String name,AssignExpression expr) 42 44 ::= Identifier [ &Tok.Equals AssignExpression ]; trunk/enki/library/d/parser/Expression.bnf
r235 r245 23 23 OTHER DEALINGS IN THE SOFTWARE. 24 24 +/}}} 25 26 .import(enki.library.d.Expression); 25 27 26 28 Expression … … 108 110 ]; 109 111 110 AddExpression :112 AddExpression 111 113 ::= MulExpression | 112 114 AddExpression [ … … 117 119 ]; 118 120 119 MulExpression :121 MulExpression 120 122 ::= UnaryExpression | 121 123 MulExpression [ … … 126 128 ]; 127 129 128 UnaryExpression :130 UnaryExpression 129 131 ::= PostfixExpression | 130 132 ( &Tok.And | … … 171 173 &Tok.True | 172 174 &Tok.False | 173 NumericLiteral | 174 CharacterLiteral | 175 StringLiterals | 175 &Token.Integer | 176 &Token.FloatingPoint | 177 &Token.CharLiteral | 178 &Token.StringLiteral | 176 179 FunctionLiteral | 177 180 AssertExpression | … … 190 193 StringLiteral 191 194 = new StringLiteral(Token tok) 192 ::= &Token.StringLiteral:tok 195 ::= &Token.StringLiteral:tok; 193 196 194 197 AssertExpression … … 216 219 NewInlineAnonClassExpression 217 220 = new NewInlineAnonClassExpression(Expression[] newArgs,Expression[] classArgs,InterfaceRef[] interfaces,Declaration[] decls) 218 ::= NewArguments:newArgs ClassArguments:classArgs [ BaseClasslist:interfaces] &Tok.OpenCurly DeclDefs:decls &Tok.CloseCurly;221 ::= NewArguments:newArgs ClassArguments:classArgs [InterfaceClasses:interfaces] &Tok.OpenCurly DeclDefs:decls &Tok.CloseCurly; 219 222 220 223 NewArguments … … 225 228 = Expression[] expressions 226 229 ::= &Tok.Class [ &TokOpenParen [ ArgumentList:~expressions ] &TokCloseParen ]; 230 231 //TODO: finish the following 232 FunctionLiteral 233 ::= 234 &Tok.Function [Type] [ &Tok.OpenParen ArgumentList &Tok.CloseParen ] FunctionBody | 235 &Tok.Delegate [Type] [ &Tok.OpenParen ArgumentList &Tok.CloseParen ] FunctionBody | 236 [ &Tok.OpenParen ArgumentList &Tok.CloseParen ] FunctionBody | 237 FunctionBody; 238 239 240 AssertExpression 241 ::= &Tok.Assert &Tok.OpenParen Expression [ &Tok.Comma Expression ] &Tok.CloseParen; 242 243 TypeidExpression 244 ::= &Tok.Typeid &Tok.OpenParen Type &Tok.CloseParen; 245 246 IsExpression 247 ::= &Tok.Is &TokOpenParen Type [Identifier] [ 248 &Tok.Colon TypeSpecialization | 249 &Tok.EqualsEquals TypeSpecialization 250 ] &Tok.CloseParen; 251 252 TypeSpecialization 253 ::= Type | 254 &Tok.Typedef | 255 &Tok.Struct | 256 &Tok.Union | 257 &Tok.Class | 258 &Tok.Interface | 259 &Tok.Enum | 260 &Tok.Function | 261 &Tok.Delegate; trunk/enki/library/d/parser/Function.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Function); 27 26 28 FunctionBody 27 29 = FunctionBody FunctionBody(Statement[] bodyBlock,Statement[] inBlock,OutStatement outBlock) trunk/enki/library/d/parser/Import.bnf
r235 r245 23 23 OTHER DEALINGS IN THE SOFTWARE. 24 24 +/}}} 25 26 .import(enki.library.d.Import); 25 27 26 28 ##### Import ##### … … 53 55 54 56 # shim to help stay compliant 55 .alias(Module AliasIdentifier,ModuleName);57 .alias(ModuleName,ModuleAliasIdentifier); trunk/enki/library/d/parser/Interface.bnf
r235 r245 24 24 +/}}} 25 25 26 InterfaceDeclaration: 26 .import(enki.library.d.Interface); 27 28 InterfaceDeclaration 27 29 = new InterfaceDeclaration(String[] interfaces,Declaration[] decls) 28 30 ::= &Tok.Interface Identifier [ &Tok.Colon SuperInterfaces ] InterfaceBody:decls; trunk/enki/library/d/parser/Mixin.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Mixin); 27 26 28 TemplateMixin 27 29 = new TemplateMixin(String name,TemplateArgument[] args,String scopeName) … … 32 34 &Tok.Semi; 33 35 34 .alias( MixinIdentifier,Identifier);36 .alias(Identifier,MixinIdentifier); trunk/enki/library/d/parser/Module.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Module); 27 26 28 ##### Module ##### 27 29 28 30 ModuleDeclaration 29 = String name ;31 = String name 30 32 ::= &Tok.Module ModuleName:name; 31 33 … … 53 55 Constructor:~decls | 54 56 Destructor:~decls | 55 Invariant:~decls |57 Invariant:~decls | 56 58 UnitTest:~decls | 57 59 StaticConstructor:~decls | trunk/enki/library/d/parser/Statement.d
r235 r245 27 27 } 28 28 29 class Label ledStatement{29 class LabeledStatement{ 30 30 public this(String name,Statement stmt){ 31 31 } … … 38 38 39 39 40 class DeclarationStat ment{40 class DeclarationStatement{ 41 41 public this(Variable[] vars){ 42 42 } … … 45 45 46 46 class Variable{ 47 public this(Type type,String name,Init alizer init){47 public this(Type type,String name,Initializer init){ 48 48 } 49 49 } … … 158 158 } 159 159 160 class WithExpressionStat ment{160 class WithExpressionStatement{ 161 161 public this(Expression expr){ 162 162 } … … 218 218 } 219 219 220 class VolatileStatement {220 class VolatileStatement : Statement{ 221 221 public this(Statement stmt){ 222 222 } 223 223 } 224 224 225 class AsmStatement {225 class AsmStatement : Statement{ 226 226 public this(AsmInstruction[] instructions){ 227 227 } 228 228 } 229 230 class PragmaStatement : Statement{ 231 public this(Pragma prag,Statement stmt){ 232 } 233 } trunk/enki/library/d/parser/Statements.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Statements); 27 26 28 Statement 27 29 = Statement stmt … … 31 33 DeclarationStatement:stmt | 32 34 IfStatement:stmt | 33 DebugStatement:stmt | 34 VersionStatement:stmt | 35 ConditionalStatement:stmt | 35 36 WhileStatement:stmt | 36 Do WhileStatement:stmt |37 DoStatement:stmt | 37 38 ForStatement:stmt | 38 39 ForeachStatement:stmt | … … 53 54 PragmaStatement:stmt; 54 55 55 Label ledStatement56 = new Label ledStatement(String name,Statement stmt)56 LabeledStatement 57 = new LabeledStatement(String name,Statement stmt) 57 58 ::= Identifier:name &Tok.Colon Statement:stmt; 58 59 … … 66 67 67 68 DeclarationStatement 68 ::= new DeclarationStatment(Variable[] vars)69 = new DeclarationStatement(Variable[] vars) 69 70 ::= Type:type IdentifierList!(type):vars &Tok.Semi; 70 71 … … 74 75 75 76 Variable(Type type) 76 = new Variable(Type type,String name,Init alizer init)77 ::= Identifier:name [ &Tok.Equals Init alizer:init ];77 = new Variable(Type type,String name,Initializer init) 78 ::= Identifier:name [ &Tok.Equals Initializer:init ]; 78 79 79 80 IfStatement … … 114 115 [ Expression:startExpr | Declaration:startDecl ] &Tok.Semi 115 116 [ Expression:test ] &Tok.Semi 116 [ Expression:increment [ &Tok.Semi117 [ Expression:increment ] 117 118 &Tok.CloseParen Statement:stmt; 118 119 119 120 ForeachStatement 120 121 = new ForeachStatement(ForeachType[] types,Expression expr,Statement stmt) 121 ::= &Tok.Foreach &Tok.OpenParen ForeachTypeList:types &Tok.Semi Expression ;expr &Tok.CloseParen Statement:stmt;122 ::= &Tok.Foreach &Tok.OpenParen ForeachTypeList:types &Tok.Semi Expression:expr &Tok.CloseParen Statement:stmt; 122 123 123 124 ForeachTypeList … … 183 184 ); 184 185 185 WithExpressionStat ment186 = new WithExpressionStat ment(Expression expr)186 WithExpressionStatement 187 = new WithExpressionStatement(Expression expr) 187 188 ::= &Tok.OpenParen Expression:expr &Tok.CloseParen BlockStatement; 188 189 … … 196 197 197 198 SynchronizeStatement 198 = new SynchronizeStatement(Stat ment stmt,Expression expr)199 = new SynchronizeStatement(Statement stmt,Expression expr) 199 200 ::= &Tok.Synchronized ( 200 201 Statement:stmt | 201 &Tok.OpenParen Expression:expr &Tok.CloseParen Stat ment:stmt202 &Tok.OpenParen Expression:expr &Tok.CloseParen Statement:stmt 202 203 ); 203 204 204 205 TryStatement 205 = new TryStatement(BlockStat ment stmt,Catch[] catches,FinallyStatement fin)206 = new TryStatement(BlockStatement stmt,Catch[] catches,FinallyStatement fin) 206 207 ::= &Tok.Try BlockStatement:stmt (FinallyStatement:fin | Catches:catches [FinallyStatement:fin]); 207 208 … … 217 218 218 219 Catch 219 = new Catch(Declarator decl,BlockStat ment stmt)220 &Tok.Catch &Tok.OpenParen Declarator:decl &Tok.CloseParen BlockStatement:stmt;220 = new Catch(Declarator decl,BlockStatement stmt) 221 ::= &Tok.Catch &Tok.OpenParen Declarator:decl &Tok.CloseParen BlockStatement:stmt; 221 222 222 223 FinallyStatement … … 240 241 = new VolatileStatement(Statement stmt) 241 242 ::= &Tok.Volatile Statement:stmt; 242 243 243 244 244 AsmStatement … … 246 246 ::= &Tok.Asm [ &Tok.OpenCurly { AsmInstruction:~instructions } &Tok.CloseCurly ]; 247 247 248 PragmaStatement 249 = new PragmaStatement(Pragma prag,Statement stmt) 250 ::= Pragma:prag [ Statement:stmt ]; trunk/enki/library/d/parser/Struct.bnf
r236 r245 44 44 StructBody 45 45 = Declaration[] decls 46 &Tok.OpenCurly { StructBodyDeclaration:~decls } &Tok.CloseCurly;46 ::= &Tok.OpenCurly { StructBodyDeclaration:~decls } &Tok.CloseCurly; 47 47 48 48 StructBodyDeclaration 49 = Declaration :decl49 = Declaration decl 50 50 ::= Declaration:decl | 51 51 Invariant:decl | trunk/enki/library/d/parser/Template.bnf
r235 r245 24 24 +/}}} 25 25 26 .import(enki.library.d.Template); 27 26 28 TemplateDeclaration 27 29 = new TemplateDeclaration(String name,TemplateParameter[] params,Declaration[] decls) … … 40 42 TemplateParameter 41 43 = TemplateParameter param 42 ::= T ypeParameter:param |43 ValueParameter:param |44 AliasParameter:param;44 ::= TemplateTypeParameter:param | 45 TemplateValueParameter:param | 46 TemplateAliasParameter:param; 45 47 46 48 TemplateTypeParameter … … 62 64 TemplateValueParameterSpecialization 63 65 = Expression expr 64 ::= ConditionalExpression:expr 66 ::= ConditionalExpression:expr; 65 67 66 68 TemplateValueParameterDefault 67 69 = Expression expr 68 ::= ConditionalExpression:expr 70 ::= ConditionalExpression:expr; 69 71 70 72 TemplateAliasParameter … … 81 83 82 84 TemplateInstance 83 = new TemplateInstance(String name,TemplateArgument[] args) ;84 ::= TemplateIdentif er &Tok.Not &Tok.OpenParen TemplateArgumentList &Tok.CloseParen;85 = new TemplateInstance(String name,TemplateArgument[] args) 86 ::= TemplateIdentifier &Tok.Not &Tok.OpenParen TemplateArgumentList &Tok.CloseParen; 85 87 86 88 TemplateArgumentList … … 108 110 ClassTemplateDeclaration 109 111 = new ClassTemplateDeclaration(TemplateParameter[] params,String name,InterfaceRef[] interfaces,Declaration[] classBody) 110 ::= &Tok.Class Token.Identifier:name112 ::= &Tok.Class &Token.Identifier:name 111 113 &Tok.OpenParen TemplateParameterList:params &Tok.CloseParen 112 [&Tok.Colon BaseClasslist:interfaces] ClassBody:classBody;114 [&Tok.Colon InterfaceClasses:interfaces] ClassBody:classBody; 113 115 114 116 FunctionTemplateDeclaration … … 116 118 ::= Type Identifier &Tok.OpenParen TemplateParameterList &Tok.CloseParen 117 119 &Tok.OpenParen FunctionParameterList &Tok.CloseParen FunctionBody; 120 121 //TODO: fix me! 122 FunctionParameterList 123 ::= "";
