compiler/FooScanner.st
changeset 502 1e45d3c96ec5
child 515 b5316ef15274
--- /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	
+! !
+