Updated to PetitCompiler-JanKurs.160, PetitCompiler-Tests-JanKurs.112, PetitCompiler-Extras-Tests-JanKurs.25, PetitCompiler-Benchmarks-JanKurs.17
Name: PetitCompiler-JanKurs.160
Author: JanKurs
Time: 17-08-2015, 09:52:26.291 AM
UUID: 3b4bfc98-8098-4951-af83-a59e2585b121
Name: PetitCompiler-Tests-JanKurs.112
Author: JanKurs
Time: 16-08-2015, 05:00:32.936 PM
UUID: 85613d47-08f3-406f-9823-9cdab451e805
Name: PetitCompiler-Extras-Tests-JanKurs.25
Author: JanKurs
Time: 16-08-2015, 05:00:10.328 PM
UUID: 09731810-51a1-4151-8d3a-56b636fbd1f7
Name: PetitCompiler-Benchmarks-JanKurs.17
Author: JanKurs
Time: 05-08-2015, 05:29:32.407 PM
UUID: e544b5f1-bcf8-470b-93a6-d2363e4dfc8a
"{ Package: 'stx:goodies/petitparser/compiler' }"
"{ NameSpace: Smalltalk }"
PPCScanner subclass:#FooScanner
instanceVariableNames:''
classVariableNames:'MaxSymbolNumber Tokens'
poolDictionaries:''
category:'PetitCompiler-Scanner'
!
!FooScanner class methodsFor:'as yet unclassified'!
initialize
super initialize.
MaxSymbolNumber := 3.
Tokens := #(#A1 #A2 #B).
! !
!FooScanner methodsFor:'distinct'!
nextTokenA
"a"
self resetDistinct.
self step.
self peek == $a ifFalse: [ ^ self return ].
self recordDistinctMatch: #a.
^ self returnDistinct
!
nextTokenAAorA
"aa / a"
self resetDistinct.
self step.
(self peek == $a) ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: #a.
self step.
(self peek == $a) ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: #aa.
^ self returnDistinct.
!
nextTokenAAplusA
"(aa)+a"
self resetDistinct.
self step.
self peek == $a ifFalse: [ ^ self returnDistinct ].
self step.
self peek == $a ifFalse: [ ^ self returnDistinct. ].
[
self recordDistinctMatch: nil.
self step.
self peek == $a ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: #AAplusA.
self step.
self peek == $a.
] whileTrue.
^ self returnDistinct
!
nextTokenAAstarA
"(aa)*a"
self resetDistinct.
self step.
self peek == $a ifFalse: [ ^ self returnDistinct ].
[
self recordDistinctMatch: #AAstarA.
self step.
self peek == $a ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: nil.
self step.
self peek == $a
] whileTrue.
^ self returnDistinct
!
nextTokenABorBC
"a"
self resetDistinct.
self step.
(self peek == $a) ifTrue: [
self step.
self peek == $b ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: #ab.
^ self returnDistinct
].
(self peek == $b) ifTrue: [
self step.
self peek == $c ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: #bc.
^ self returnDistinct
].
^ self returnDistinct
!
nextTokenABstarA
"(ab)*a"
self resetDistinct.
self step.
self peek == $a ifFalse: [ ^ self returnDistinct ].
[
self recordDistinctMatch: #ABstarA.
self step.
self peek == $b ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: nil.
self step.
self peek == $a.
] whileTrue.
^ self returnDistinct
!
nextTokenA_Bstar_A
"ab"
self resetDistinct.
self step.
self peek == $a ifFalse: [ ^ self returnDistinct ].
[
self step.
self peek == $b.
] whileTrue.
self peek == $a ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: #A_Bstar_A.
^ self returnDistinct.
!
nextTokenAorAA
"aa / a"
self resetDistinct.
self step.
(self peek == $a) ifTrue: [
self recordDistinctMatch: #a.
^ self returnDistinct
].
self step.
(self peek == $a) ifTrue: [
self recordDistinctMatch: #aa.
^ self returnDistinct
].
!
nextTokenAorB
"a"
self resetDistinct.
self step.
(self peek == $a) ifTrue: [
self recordDistinctMatch: #a.
^ self returnDistinct
].
(self peek == $b) ifTrue: [
self recordDistinctMatch: #b.
^ self returnDistinct
].
^ self returnDistinct
!
nextTokenAstarA
"a*a"
[
self step.
self peek == $a.
] whileTrue.
self peek == $a ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: #AstarA.
^ self returnDistinct
!
nextTokenAstarB
"a*b"
self resetDistinct.
[
self step.
self peek == $a.
] whileTrue.
self peek == $b ifFalse: [ ^ self returnDistinct ].
self recordDistinctMatch: #AstarB.
^ self returnDistinct
! !
!FooScanner methodsFor:'initialization'!
initialize
super initialize.
! !
!FooScanner methodsFor:'mutlivalue'!
nextMultiTokenA
"a|a"
self reset.
self step.
self peek == $a ifFalse: [ ^ self ].
self recordMatch: 1. "A1 in matches"
self recordMatch: 2. "A2 in matches"
!
nextTokenAB
"ab"
self reset.
self step.
self peek == $a ifFalse: [ ^ self ].
self step.
self peek == $b ifFalse: [ ^ self ].
self recordMatch: 3. "ID of #B"
^ self
!
nextTokenAuorA
"a | a"
self reset.
self step.
(self peek == $a) ifTrue: [
self recordMatch: 1.
self recordMatch: 2.
^ self
].
^ self
! !
FooScanner initialize!