compiler/Dart__Parser.st
changeset 6 06efdfe62106
parent 4 5ef74750c3bc
child 10 5df5a2f8e4b5
equal deleted inserted replaced
5:77d56b3a771b 6:06efdfe62106
   109 	
   109 	
   110 !
   110 !
   111 
   111 
   112 arguments
   112 arguments
   113 
   113 
   114 	^('(' asParser) , (argumentList optional) , (')' asParser)
   114 	^(TokenParser for:$() , (argumentList optional) , (TokenParser for:$))
   115 !
   115 !
   116 
   116 
   117 assignableExpression
   117 assignableExpression
   118 
   118 
   119         ^ (primary , (((arguments star) , assignableSelector) plus))
   119         ^ (primary , (((arguments star) , assignableSelector) plus))
   130 	
   130 	
   131 !
   131 !
   132 
   132 
   133 assignmentOperator
   133 assignmentOperator
   134 
   134 
   135 	^ ('=' asParser)
   135         ^ (TokenParser for: $=)
   136 	/ ('*=' asParser)
   136         / (TokenParser for: #'*=' )
   137 	/ ('/=' asParser)
   137         / (TokenParser for: #'/=' )
   138 	/ ('~/=' asParser)
   138         / (TokenParser for: #'~/=' )
   139 	/ ('%=' asParser)
   139         / (TokenParser for: #'%=' )
   140 	/ ('+=' asParser)
   140         / (TokenParser for: #'+=' )
   141 	/ ('-=' asParser)
   141         / (TokenParser for: #'-=' )
   142 	/ ('<<=' asParser)
   142         / (TokenParser for: #'<<=' )
   143 	/ (('>' asParser) , ('>' asParser) , ('>' asParser) , ('=' asParser))
   143         / (('>' asParser) , ('>' asParser) , ('>' asParser) , ('=' asParser))
   144 	/ (('>' asParser) , ('>' asParser) , ('=' asParser))
   144         / (('>' asParser) , ('>' asParser) , ('=' asParser))
   145 	/ ('&=' asParser)
   145         / (TokenParser for: #'&=' )
   146 	/ ('^=' asParser)
   146         / (TokenParser for: #'^=' )
   147 	/ ('|=' asParser)
   147         / (TokenParser for: #'|=' )
   148 	
   148 
       
   149     "Modified: / 11-01-2013 / 15:51:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   149 !
   150 !
   150 
   151 
   151 bitwiseAndExpression
   152 bitwiseAndExpression
   152 
   153 
   153         ^ (equalityExpression , ((('&' asParser) , equalityExpression) star))
   154         ^ (equalityExpression , ((('&' asParser) , equalityExpression) star))
   178 	
   179 	
   179 !
   180 !
   180 
   181 
   181 block
   182 block
   182 
   183 
   183 	^('{' asParser) , statements , ('}' asParser)
   184         ^(TokenParser for:${) , statements , (TokenParser for:$})
       
   185 
       
   186     "Modified: / 11-01-2013 / 15:06:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   184 !
   187 !
   185 
   188 
   186 catchPart
   189 catchPart
   187 
   190 
   188 	^(TokenParser for:#catch) , ('(' asParser) , declaredIdentifier , (((',' asParser) , declaredIdentifier) optional) , (')' asParser) , block
   191 	^(TokenParser for:#catch) , (TokenParser for:$() , declaredIdentifier , (((',' asParser) , declaredIdentifier) optional) , (TokenParser for:$)) , block
   189 !
   192 !
   190 
   193 
   191 classDefinition
   194 classDefinition
   192 
   195 
   193 	^ ((TokenParser for:#class) , identifier , (typeParameters optional) , (superclass optional) , (interfaces optional) , ('{' asParser) , (classMemberDefinition star) , ('}' asParser))
   196 	^ ((TokenParser for:#class) , identifier , (typeParameters optional) , (superclass optional) , (interfaces optional) , (TokenParser for:${) , (classMemberDefinition star) , (TokenParser for:$}))
   194 	/ ((TokenParser for:#class) , identifier , (typeParameters optional) , (interfaces optional) , (TokenParser for:#native) , (TokenParser for:#string) , ('{' asParser) , (classMemberDefinition star) , ('}' asParser))
   197 	/ ((TokenParser for:#class) , identifier , (typeParameters optional) , (interfaces optional) , (TokenParser for:#native) , (TokenParser for:#string) , (TokenParser for:${) , (classMemberDefinition star) , (TokenParser for:$}))
   195 	
   198 	
   196 !
   199 !
   197 
   200 
   198 classMemberDefinition
   201 classMemberDefinition
   199 
   202 
   200 	^ (declaration , (';' asParser))
   203 	^ (declaration , (TokenParser for:$;))
   201 	/ (constructorDeclaration , (';' asParser))
   204 	/ (constructorDeclaration , (TokenParser for:$;))
   202 	/ (methodDeclaration , functionBodyOrNative)
   205 	/ (methodDeclaration , functionBodyOrNative)
   203 	/ ((TokenParser for:#const) , factoryConstructorDeclaration , functionNative)
   206 	/ ((TokenParser for:#const) , factoryConstructorDeclaration , functionNative)
   204 	
   207 	
   205 !
   208 !
   206 
   209 
   282 	^normalFormalParameter , ((('=' asParser) , constantExpression) optional)
   285 	^normalFormalParameter , ((('=' asParser) , constantExpression) optional)
   283 !
   286 !
   284 
   287 
   285 directive
   288 directive
   286 
   289 
   287 	^('#' asParser) , identifier , arguments , (';' asParser)
   290 	^('#' asParser) , identifier , arguments , (TokenParser for:$;)
   288 !
   291 !
   289 
   292 
   290 equalityExpression
   293 equalityExpression
   291 
   294 
   292 	^ (relationalExpression , ((equalityOperator , relationalExpression) optional))
   295 	^ (relationalExpression , ((equalityOperator , relationalExpression) optional))
   311     "Created: / 11-01-2013 / 13:22:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   314     "Created: / 11-01-2013 / 13:22:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   312 !
   315 !
   313 
   316 
   314 expressionInParentheses
   317 expressionInParentheses
   315 
   318 
   316 	^('(' asParser) , constantExpression , (')' asParser)
   319 	^(TokenParser for:$() , constantExpression , (TokenParser for:$))
   317 !
   320 !
   318 
   321 
   319 expressionList
   322 expressionList
   320 
   323 
   321 	^constantExpression , (((',' asParser) , constantExpression) star)
   324 	^constantExpression , (((',' asParser) , constantExpression) star)
   354 	^(TokenParser for:#finally) , block
   357 	^(TokenParser for:#finally) , block
   355 !
   358 !
   356 
   359 
   357 forInitializerStatement
   360 forInitializerStatement
   358 
   361 
   359 	^ (initializedVariableDeclaration , (';' asParser))
   362 	^ (initializedVariableDeclaration , (TokenParser for:$;))
   360 	/ ((constantExpression optional) , (';' asParser))
   363 	/ ((constantExpression optional) , (TokenParser for:$;))
   361 	
   364 	
   362 !
   365 !
   363 
   366 
   364 forLoopParts
   367 forLoopParts
   365 
   368 
   366 	^ (forInitializerStatement , (constantExpression optional) , (';' asParser) , (expressionList optional))
   369 	^ (forInitializerStatement , (constantExpression optional) , (TokenParser for:$;) , (expressionList optional))
   367 	/ (declaredIdentifier , (TokenParser for:#in) , constantExpression)
   370 	/ (declaredIdentifier , (TokenParser for:#in) , constantExpression)
   368 	/ (identifier , (TokenParser for:#in) , constantExpression)
   371 	/ (identifier , (TokenParser for:#in) , constantExpression)
   369 	
   372 	
   370 !
   373 !
   371 
   374 
   372 formalParameterList
   375 formalParameterList
   373 
   376 
   374 	^ (('(' asParser) , (namedFormalParameters optional) , (')' asParser))
   377 	^ ((TokenParser for:$() , (namedFormalParameters optional) , (TokenParser for:$)))
   375 	/ (('(' asParser) , normalFormalParameter , (normalFormalParameterTail optional) , (')' asParser))
   378 	/ ((TokenParser for:$() , normalFormalParameter , (normalFormalParameterTail optional) , (TokenParser for:$)))
   376 	
   379 	
   377 !
   380 !
   378 
   381 
   379 functionBody
   382 functionBody
   380 
   383 
   381 	^ (('=>' asParser) , constantExpression , (';' asParser))
   384 	^ (('=>' asParser) , constantExpression , (TokenParser for:$;))
   382 	/ block
   385 	/ block
   383 	
   386 	
   384 !
   387 !
   385 
   388 
   386 functionBodyOrNative
   389 functionBodyOrNative
   408 	
   411 	
   409 !
   412 !
   410 
   413 
   411 functionNative
   414 functionNative
   412 
   415 
   413 	^(TokenParser for:#native) , ((TokenParser for:#string) optional) , (';' asParser)
   416 	^(TokenParser for:#native) , ((TokenParser for:#string) optional) , (TokenParser for:$;)
   414 !
   417 !
   415 
   418 
   416 functionPrefix
   419 functionPrefix
   417 
   420 
   418 	^(returnType optional) , identifier
   421 	^(returnType optional) , identifier
   419 !
   422 !
   420 
   423 
   421 functionTypeAlias
   424 functionTypeAlias
   422 
   425 
   423 	^(TokenParser for:#typedef) , functionPrefix , (typeParameters optional) , formalParameterList , (';' asParser)
   426 	^(TokenParser for:#typedef) , functionPrefix , (typeParameters optional) , formalParameterList , (TokenParser for:$;)
   424 !
   427 !
   425 
   428 
   426 getOrSet
   429 getOrSet
   427 
   430 
   428 	^ (TokenParser for:#get)
   431 	^ (TokenParser for:#get)
   431 !
   434 !
   432 
   435 
   433 identifier
   436 identifier
   434 
   437 
   435         ^ (TokenParser for:#identifier_no_dollar)
   438         ^ (TokenParser for:#identifier_no_dollar)
   436         / (TokenParser for:#identifier)
   439         / (TokenParser for:#Identifier)
   437         / (TokenParser for:#abstract)
   440         / (TokenParser for:#abstract)
   438         / (TokenParser for:#assert)
   441         / (TokenParser for:#assert)
   439         / (TokenParser for:#class)
   442         / (TokenParser for:#class)
   440         / (TokenParser for:#extends)
   443         / (TokenParser for:#extends)
   441         / (TokenParser for:#factory)
   444         / (TokenParser for:#factory)
   451         / (TokenParser for:#set)
   454         / (TokenParser for:#set)
   452         / (TokenParser for:#source)
   455         / (TokenParser for:#source)
   453         / (TokenParser for:#static)
   456         / (TokenParser for:#static)
   454         / (TokenParser for:#typedef)
   457         / (TokenParser for:#typedef)
   455 
   458 
   456     "Modified: / 11-01-2013 / 13:25:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   459     "Modified: / 11-01-2013 / 15:04:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   457 !
   460 !
   458 
   461 
   459 importReference
   462 importReference
   460 
   463 
   461 	^(((TokenParser for:#identifier) , (':' asParser)) optional) , (TokenParser for:#string)
   464 	^(((TokenParser for:#identifier) , (':' asParser)) optional) , (TokenParser for:#string)
   494 	^(':' asParser) , superCallOrFieldInitializer , (((',' asParser) , superCallOrFieldInitializer) star)
   497 	^(':' asParser) , superCallOrFieldInitializer , (((',' asParser) , superCallOrFieldInitializer) star)
   495 !
   498 !
   496 
   499 
   497 interfaceDefinition
   500 interfaceDefinition
   498 
   501 
   499 	^(TokenParser for:#interface) , identifier , (typeParameters optional) , (superinterfaces optional) , (factorySpecification optional) , ('{' asParser) , (interfaceMemberDefinition star) , ('}' asParser)
   502 	^(TokenParser for:#interface) , identifier , (typeParameters optional) , (superinterfaces optional) , (factorySpecification optional) , (TokenParser for:${) , (interfaceMemberDefinition star) , (TokenParser for:$})
   500 !
   503 !
   501 
   504 
   502 interfaceMemberDefinition
   505 interfaceMemberDefinition
   503 
   506 
   504 	^ ((TokenParser for:#static) , (TokenParser for:#final) , (type optional) , initializedIdentifierList , (';' asParser))
   507 	^ ((TokenParser for:#static) , (TokenParser for:#final) , (type optional) , initializedIdentifierList , (TokenParser for:$;))
   505 	/ (functionDeclaration , (';' asParser))
   508 	/ (functionDeclaration , (TokenParser for:$;))
   506 	/ (constantConstructorDeclaration , (';' asParser))
   509 	/ (constantConstructorDeclaration , (TokenParser for:$;))
   507 	/ (namedConstructorDeclaration , (';' asParser))
   510 	/ (namedConstructorDeclaration , (TokenParser for:$;))
   508 	/ (specialSignatureDefinition , (';' asParser))
   511 	/ (specialSignatureDefinition , (TokenParser for:$;))
   509 	/ (variableDeclaration , (';' asParser))
   512 	/ (variableDeclaration , (TokenParser for:$;))
   510 	
   513 	
   511 !
   514 !
   512 
   515 
   513 interfaces
   516 interfaces
   514 
   517 
   520 	^(TokenParser for:#is) , (('!!' asParser) optional)
   523 	^(TokenParser for:#is) , (('!!' asParser) optional)
   521 !
   524 !
   522 
   525 
   523 iterationStatement
   526 iterationStatement
   524 
   527 
   525 	^ ((TokenParser for:#while) , ('(' asParser) , constantExpression , (')' asParser) , statement)
   528 	^ ((TokenParser for:#while) , (TokenParser for:$() , constantExpression , (TokenParser for:$)) , statement)
   526 	/ ((TokenParser for:#do) , statement , (TokenParser for:#while) , ('(' asParser) , constantExpression , (')' asParser) , (';' asParser))
   529 	/ ((TokenParser for:#do) , statement , (TokenParser for:#while) , (TokenParser for:$() , constantExpression , (TokenParser for:$)) , (TokenParser for:$;))
   527 	/ ((TokenParser for:#for) , ('(' asParser) , forLoopParts , (')' asParser) , statement)
   530 	/ ((TokenParser for:#for) , (TokenParser for:$() , forLoopParts , (TokenParser for:$)) , statement)
   528 	
   531 	
   529 !
   532 !
   530 
   533 
   531 label
   534 label
   532 
   535 
   538 	^(libraryImport optional) , (librarySource optional)
   541 	^(libraryImport optional) , (librarySource optional)
   539 !
   542 !
   540 
   543 
   541 libraryDefinition
   544 libraryDefinition
   542 
   545 
   543 	^(TokenParser for:#library) , ('{' asParser) , libraryBody , ('}' asParser)
   546 	^(TokenParser for:#library) , (TokenParser for:${) , libraryBody , (TokenParser for:$})
   544 !
   547 !
   545 
   548 
   546 libraryImport
   549 libraryImport
   547 
   550 
   548 	^(TokenParser for:#import) , ('=' asParser) , ('[' asParser) , (importReferences optional) , (']' asParser)
   551 	^(TokenParser for:#import) , ('=' asParser) , ('[' asParser) , (importReferences optional) , (']' asParser)
   568 literal
   571 literal
   569 
   572 
   570         ^ (TokenParser for: #null)
   573         ^ (TokenParser for: #null)
   571         / (TokenParser for: #true)
   574         / (TokenParser for: #true)
   572         / (TokenParser for: #false)
   575         / (TokenParser for: #false)
   573         / (TokenParser for: #number)
   576         / (TokenParser for: #Integer)
       
   577         / (TokenParser for: #Float)
   574         / (TokenParser for:#string)
   578         / (TokenParser for:#string)
   575 
   579 
   576     "Modified: / 11-01-2013 / 10:08:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   580     "Modified: / 11-01-2013 / 15:17:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   577 !
   581 !
   578 
   582 
   579 logicalAndExpression
   583 logicalAndExpression
   580 
   584 
   581 	^bitwiseOrExpression , ((('&&' asParser) , bitwiseOrExpression) star)
   585 	^bitwiseOrExpression , ((('&&' asParser) , bitwiseOrExpression) star)
   586 	^logicalAndExpression , ((('||' asParser) , logicalAndExpression) star)
   590 	^logicalAndExpression , ((('||' asParser) , logicalAndExpression) star)
   587 !
   591 !
   588 
   592 
   589 mapLiteral
   593 mapLiteral
   590 
   594 
   591 	^('{' asParser) , ((mapLiteralEntry , (((',' asParser) , mapLiteralEntry) star) , ((',' asParser) optional)) optional) , ('}' asParser)
   595 	^(TokenParser for:${) , ((mapLiteralEntry , (((',' asParser) , mapLiteralEntry) star) , ((',' asParser) optional)) optional) , (TokenParser for:$})
   592 !
   596 !
   593 
   597 
   594 mapLiteralEntry
   598 mapLiteralEntry
   595 
   599 
   596 	^(TokenParser for:#string) , (':' asParser) , constantExpression
   600 	^(TokenParser for:#string) , (':' asParser) , constantExpression
   645 !
   649 !
   646 
   650 
   647 nonLabelledStatement
   651 nonLabelledStatement
   648 
   652 
   649         ^ block
   653         ^ block
   650         / (initializedVariableDeclaration , (';' asParser))
   654         / (initializedVariableDeclaration , (TokenParser for:$;))
   651         / iterationStatement
   655         / iterationStatement
   652         / selectionStatement
   656         / selectionStatement
   653         / tryStatement
   657         / tryStatement
   654         / ((TokenParser for: #break) , (identifier optional) , (';' asParser))
   658         / ((TokenParser for: #break) , (identifier optional) , (TokenParser for:$;))
   655         / ((TokenParser for: #continue) , (identifier optional) , (';' asParser))
   659         / ((TokenParser for: #continue) , (identifier optional) , (TokenParser for:$;))
   656         / ((TokenParser for: #return) , (constantExpression optional) , (';' asParser))
   660         / ((TokenParser for: #return) , (constantExpression optional) , (TokenParser for:$;))
   657         / ((TokenParser for: #throw) , (constantExpression optional) , (';' asParser))
   661         / ((TokenParser for: #throw) , (constantExpression optional) , (TokenParser for:$;))
   658         / ((constantExpression optional) , (';' asParser))
   662         / ((constantExpression optional) , (TokenParser for:$;))
   659         / ((TokenParser for: #assert) , ('(' asParser) , conditionalExpression , (')' asParser) , (';' asParser))
   663         / ((TokenParser for: #assert) , (TokenParser for:$() , conditionalExpression , (TokenParser for:$)) , (TokenParser for:$;))
   660         / (functionDeclaration , functionBody)
   664         / (functionDeclaration , functionBody)
   661 
   665 
   662     "Modified: / 11-01-2013 / 10:09:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   666     "Modified: / 11-01-2013 / 10:09:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   663 !
   667 !
   664 
   668 
   759     "Modified: / 11-01-2013 / 10:09:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   763     "Modified: / 11-01-2013 / 10:09:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   760 !
   764 !
   761 
   765 
   762 selectionStatement
   766 selectionStatement
   763 
   767 
   764         ^ ((TokenParser for: #if) , ('(' asParser) , constantExpression , (')' asParser) , statement , (((TokenParser for: #else) , statement) optional))
   768         ^ ((TokenParser for: #if) , (TokenParser for:$() , constantExpression , (TokenParser for:$)) , statement , (((TokenParser for: #else) , statement) optional))
   765         / ((TokenParser for: #switch) , ('(' asParser) , constantExpression , (')' asParser) , ('{' asParser) , (switchCase star) , (defaultCase optional) , ('}' asParser))
   769         / ((TokenParser for: #switch) , (TokenParser for:$() , constantExpression , (TokenParser for:$)) , (TokenParser for:${) , (switchCase star) , (defaultCase optional) , (TokenParser for:$}))
   766 
   770 
   767     "Modified: / 11-01-2013 / 10:10:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   771     "Modified: / 11-01-2013 / 10:10:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   768 !
   772 !
   769 
   773 
   770 selector
   774 selector
   861 	^ classDefinition
   865 	^ classDefinition
   862 	/ interfaceDefinition
   866 	/ interfaceDefinition
   863 	/ functionTypeAlias
   867 	/ functionTypeAlias
   864 	/ (functionDeclaration , functionBodyOrNative)
   868 	/ (functionDeclaration , functionBodyOrNative)
   865 	/ ((returnType optional) , getOrSet , identifier , formalParameterList , functionBodyOrNative)
   869 	/ ((returnType optional) , getOrSet , identifier , formalParameterList , functionBodyOrNative)
   866 	/ ((TokenParser for:#final) , (type optional) , staticFinalDeclarationList , (';' asParser))
   870 	/ ((TokenParser for:#final) , (type optional) , staticFinalDeclarationList , (TokenParser for:$;))
   867 	/ (constInitializedVariableDeclaration , (';' asParser))
   871 	/ (constInitializedVariableDeclaration , (TokenParser for:$;))
   868 	
   872 	
   869 !
   873 !
   870 
   874 
   871 tryStatement
   875 tryStatement
   872 
   876