compiler/tests/extras/PPLL1ExpressionGrammar.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jul 2015 08:37:37 +0100
changeset 510 869853decf31
parent 503 ff58cd9f1f3c
child 512 694a247a12ba
permissions -rw-r--r--
Tests refactoring - use generated test cases to make sure all posibilities are tested. Do not generate resource for all combinations, use PPCSetUpBeforeTearDownAfterResource instead that delegates parser compilation to the testcase itself (it calls it's #setUpBefore method).

"{ Package: 'stx:goodies/petitparser/compiler/tests/extras' }"

"{ NameSpace: Smalltalk }"

PPCompositeParser subclass:#PPLL1ExpressionGrammar
	instanceVariableNames:'add prod term mul prim parens number mulPrime addPrime termPrime'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Extras-Tests-Expressions'
!

!PPLL1ExpressionGrammar methodsFor:'as yet unclassified'!

add
   ^ prod, addPrime optional
		map: [ :_prod :_addPrime |
				_addPrime isNil 
						ifTrue: [ _prod  ]
						ifFalse: [ (Array with: _prod) , _addPrime ]
				
		]

	"Modified (format): / 26-05-2015 / 07:23:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

addPrime
    ^ $+ asParser trimmingToken , term
!

mul
   ^ prim, mulPrime optional
		map: [ :_prim :_mulPrime |
				_mulPrime isNil 
						ifTrue: [ _prim  ]
						ifFalse: [ (Array with: _prim) , _mulPrime ]
				
		]

	"Modified (format): / 26-05-2015 / 07:23:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

mulPrime
   ^ $* asParser trimmingToken, prod
!

number
   ^ #digit asParser plus trimmingToken ==> [ :token | token inputValue asNumber ]
!

parens
   ^ ($( asParser token trim), term , ($) asParser token trim)
!

prim
   ^ parens / number
!

prod
   ^ mul
!

start
   ^ term end
!

term
    ^ prod, termPrime optional
        map: [ :_prod :_termPrime |
        _termPrime isNil 
            ifTrue: [ _prod  ]
            ifFalse: [ (Array with: _prod) , _termPrime ]
    ]

    "Modified: / 26-05-2015 / 07:24:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

termPrime
    ^ $+ asParser trimmingToken, term
! !