diff -r f6d77fee9811 -r 1e45d3c96ec5 compiler/FooScanner.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/compiler/FooScanner.st Fri Jul 24 15:06:54 2015 +0100 @@ -0,0 +1,210 @@ +"{ Package: 'stx:goodies/petitparser/compiler' }" + +"{ NameSpace: Smalltalk }" + +PPCScanner subclass:#FooScanner + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + category:'PetitCompiler-Scanner' +! + +!FooScanner methodsFor:'as yet unclassified'! + +nextTokenA + "a" + self step. + self peek == $a ifFalse: [ ^ self return ]. + + self recordMatch: #a. + + ^ self return +! + +nextTokenAAorA + "aa / a" + self step. + (self peek == $a) ifFalse: [ ^ self return ]. + self recordMatch: #a priority: -1. + + self step. + (self peek == $a) ifFalse: [ ^ self return ]. + self recordMatch: #aa priority: 0. + + ^ self return. +! + +nextTokenAAplusA + "(aa)+a" + self step. + self peek == $a ifFalse: [ ^ self return ]. + + self step. + self peek == $a ifFalse: [ ^ self return. ]. + + [ + self step. + self peek == $a ifFalse: [ ^ self returnPriority: 0 ]. + self recordMatch: #AAplusA priority: -1. + + self step. + self peek == $a. + ] whileTrue. + + ^ self returnPriority: -1 +! + +nextTokenAAstarA + "(aa)*a" + self step. + self peek == $a ifFalse: [ ^ self return ]. + + [ + self recordMatch: #AAstarA priority: -1. + + self step. + self peek == $a ifFalse: [ ^ self returnPriority: -1 ]. + self step. + + self peek == $a + ] whileTrue. + + ^ self returnPriority: 0 +! + +nextTokenAB + "ab" + self step. + self peek == $a ifFalse: [ ^ self return ]. + + self step. + self peek == $b ifFalse: [ ^ self return ]. + self recordMatch: #b. + + ^ self return. +! + +nextTokenABorBC + "a" + self step. + (self peek == $a) ifTrue: [ + + self step. + self peek == $b ifFalse: [ ^ self return ]. + self recordMatch: #ab. + + ^ self return + ]. + + (self peek == $b) ifTrue: [ + self step. + self peek == $c ifFalse: [ ^ self return ]. + self recordMatch: #bc. + + ^ self return + ]. + + ^ self return +! + +nextTokenABstarA + "(ab)*a" + self step. + self peek == $a ifFalse: [ ^ self return ]. + + [ + self recordMatch: #ABstarA priority: -1. + + self step. + self peek == $b ifFalse: [ ^ self returnPriority: -1 ]. + + self step. + self peek == $a. + ] whileTrue. + + ^ self returnPriority: 0 +! + +nextTokenA_Bstar_A + "ab" + self step. + self peek == $a ifFalse: [ ^ self return ]. + + [ + self step. + self peek == $b. + ] whileTrue. + + + self peek == $a ifFalse: [ ^ self return ]. + self recordMatch: #A_Bstar_A. + + ^ self return. +! + +nextTokenAorAA + "aa / a" + self step. + (self peek == $a) ifTrue: [ + self recordMatch: #a priority: 0. + ^ self return + ]. + + self step. + (self peek == $a) ifTrue: [ + self recordMatch: #aa priority: -1. + ^ self return + ]. +! + +nextTokenAorB + "a" + self step. + (self peek == $a) ifTrue: [ + self recordMatch: #a. + ^ self return + ]. + (self peek == $b) ifTrue: [ + self recordMatch: #b. + ^ self return + ]. + + ^ self return +! + +nextTokenAstarA + "a*a" + [ + self step. + self peek == $a. + ] whileTrue. + + self peek == $a ifFalse: [ ^ self return ]. + self recordMatch: #AstarA. + ^ self return +! + +nextTokenAstarB + "a*b" + [ + self step. + self peek == $a. + ] whileTrue. + + self peek == $b ifFalse: [ ^ self return ]. + self recordMatch: #AstarB. + ^ self return +! + +nextTokenAuorA + "a | a" + self step. + (self peek == $a) ifTrue: [ + self recordMatch: #a1. + self recordMatch: #a2. + ^ self return + ]. + + ^ self return +! ! +