compiler/tests/PPLL1ExpressionGrammar.st
changeset 465 f729f6cd3c76
parent 463 d4014e0a47a0
parent 464 f6d77fee9811
child 466 ac2d987a03d3
equal deleted inserted replaced
463:d4014e0a47a0 465:f729f6cd3c76
     1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 PPCompositeParser subclass:#PPLL1ExpressionGrammar
       
     6 	instanceVariableNames:'add prod term mul prim parens number mulPrime addPrime termPrime'
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'PetitCompiler-Tests-ExpressionGrammar'
       
    10 !
       
    11 
       
    12 !PPLL1ExpressionGrammar methodsFor:'as yet unclassified'!
       
    13 
       
    14 add
       
    15    ^ prod, addPrime optional
       
    16         map: [ :_prod :_addPrime |
       
    17                 _addPrime isNil 
       
    18                         ifTrue: [ _prod  ]
       
    19                         ifFalse: [ (Array with: _prod) ,  _addPrime ]
       
    20                 
       
    21         ]
       
    22 
       
    23     "Modified: / 12-05-2015 / 01:35:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    24 !
       
    25 
       
    26 addPrime
       
    27     ^ $+ asParser trimmingToken , term
       
    28 !
       
    29 
       
    30 mul
       
    31    ^ prim, mulPrime optional
       
    32         map: [ :_prim :_mulPrime |
       
    33                 _mulPrime isNil 
       
    34                         ifTrue: [ _prim  ]
       
    35                         ifFalse: [ (Array with: _prim) , _mulPrime ]
       
    36                 
       
    37         ]
       
    38 
       
    39     "Modified: / 12-05-2015 / 01:35:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    40 !
       
    41 
       
    42 mulPrime
       
    43    ^ $* asParser trimmingToken, prod
       
    44 !
       
    45 
       
    46 number
       
    47    ^ #digit asParser plus trimmingToken ==> [ :token | token inputValue asNumber ]
       
    48 !
       
    49 
       
    50 parens
       
    51    ^ ($( asParser token trim), term , ($) asParser token trim)
       
    52 !
       
    53 
       
    54 prim
       
    55    ^ parens / number
       
    56 !
       
    57 
       
    58 prod
       
    59    ^ mul
       
    60 !
       
    61 
       
    62 start
       
    63    ^ term end
       
    64 !
       
    65 
       
    66 term
       
    67     ^ prod, termPrime optional
       
    68         map: [ :_prod :_termPrime |
       
    69         _termPrime isNil 
       
    70             ifTrue: [ _prod  ]
       
    71             ifFalse: [ (Array with: _prod) , _termPrime ]
       
    72     ]
       
    73 
       
    74     "Modified: / 12-05-2015 / 01:36:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    75 !
       
    76 
       
    77 termPrime
       
    78     ^ $+ asParser trimmingToken, term
       
    79 ! !
       
    80