compiler/FooScanner.st
changeset 502 1e45d3c96ec5
child 515 b5316ef15274
equal deleted inserted replaced
464:f6d77fee9811 502:1e45d3c96ec5
       
     1 "{ Package: 'stx:goodies/petitparser/compiler' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 PPCScanner subclass:#FooScanner
       
     6 	instanceVariableNames:''
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'PetitCompiler-Scanner'
       
    10 !
       
    11 
       
    12 !FooScanner methodsFor:'as yet unclassified'!
       
    13 
       
    14 nextTokenA
       
    15     "a"
       
    16     self step.
       
    17     self peek == $a ifFalse: [ ^ self return ].
       
    18 
       
    19     self recordMatch: #a.
       
    20 
       
    21     ^ self return
       
    22 !
       
    23 
       
    24 nextTokenAAorA
       
    25     "aa / a"
       
    26     self step.
       
    27     (self peek == $a) ifFalse: [ ^ self return ].
       
    28     self recordMatch: #a priority: -1.	
       
    29 
       
    30     self step.
       
    31     (self peek == $a) ifFalse: [ ^ self return ].
       
    32     self recordMatch: #aa priority: 0.	
       
    33 
       
    34     ^ self return.
       
    35 !
       
    36 
       
    37 nextTokenAAplusA
       
    38     "(aa)+a"
       
    39     self step.
       
    40     self peek == $a ifFalse: [ ^ self return ].
       
    41 
       
    42     self step.
       
    43     self peek == $a ifFalse: [ ^ self return. ].
       
    44 
       
    45     [ 
       
    46         self step.
       
    47         self peek == $a ifFalse: [ ^ self returnPriority: 0 ].
       
    48         self recordMatch: #AAplusA priority: -1.
       
    49 
       
    50         self step.
       
    51         self peek == $a.
       
    52     ] whileTrue.
       
    53 
       
    54     ^ self returnPriority: -1
       
    55 !
       
    56 
       
    57 nextTokenAAstarA
       
    58     "(aa)*a"
       
    59     self step.
       
    60     self peek == $a ifFalse: [ ^ self return ].
       
    61 
       
    62     [ 
       
    63         self recordMatch: #AAstarA priority: -1.
       
    64 
       
    65         self step.
       
    66         self peek == $a ifFalse: [ ^ self returnPriority: -1 ].
       
    67         self step.
       
    68         
       
    69         self peek == $a	
       
    70     ] whileTrue.
       
    71     
       
    72     ^ self returnPriority: 0
       
    73 !
       
    74 
       
    75 nextTokenAB
       
    76     "ab"
       
    77     self step.
       
    78     self peek == $a ifFalse: [ ^ self return ].
       
    79     
       
    80     self step.
       
    81     self peek == $b ifFalse: [ ^ self return ].
       
    82     self recordMatch: #b.
       
    83     
       
    84     ^ self return.
       
    85 !
       
    86 
       
    87 nextTokenABorBC
       
    88     "a"
       
    89     self step.
       
    90     (self peek == $a) ifTrue: [ 
       
    91 
       
    92         self step.
       
    93         self peek == $b ifFalse: [ ^ self return ].
       
    94         self recordMatch: #ab.
       
    95 
       
    96         ^ self return	
       
    97     ].
       
    98 
       
    99     (self peek == $b) ifTrue: [ 
       
   100         self step.
       
   101         self peek == $c ifFalse: [ ^ self return ].
       
   102         self recordMatch: #bc.	
       
   103 
       
   104         ^ self return
       
   105     ].
       
   106 
       
   107     ^ self return
       
   108 !
       
   109 
       
   110 nextTokenABstarA
       
   111     "(ab)*a"
       
   112     self step.
       
   113     self peek == $a ifFalse: [ ^ self return ].
       
   114 
       
   115     [ 
       
   116         self recordMatch: #ABstarA priority: -1.
       
   117         
       
   118         self step.
       
   119         self peek == $b ifFalse: [ ^ self returnPriority: -1 ].
       
   120     
       
   121         self step.
       
   122         self peek == $a.
       
   123     ] whileTrue.
       
   124 
       
   125     ^ self returnPriority: 0
       
   126 !
       
   127 
       
   128 nextTokenA_Bstar_A
       
   129     "ab"
       
   130     self step.
       
   131     self peek == $a ifFalse: [ ^ self return ].
       
   132 
       
   133     [
       
   134         self step.
       
   135         self peek == $b.
       
   136     ] whileTrue.
       
   137 
       
   138 
       
   139     self peek == $a ifFalse: [ ^ self return ].
       
   140     self recordMatch: #A_Bstar_A.
       
   141 
       
   142     ^ self return.
       
   143 !
       
   144 
       
   145 nextTokenAorAA
       
   146     "aa / a"
       
   147     self step.
       
   148     (self peek == $a) ifTrue: [ 
       
   149         self recordMatch: #a priority: 0.	
       
   150         ^ self return
       
   151     ].
       
   152 
       
   153     self step.
       
   154     (self peek == $a) ifTrue: [ 
       
   155         self recordMatch: #aa priority: -1.	
       
   156         ^ self return
       
   157     ].
       
   158 !
       
   159 
       
   160 nextTokenAorB
       
   161     "a"
       
   162     self step.
       
   163     (self peek == $a) ifTrue: [ 
       
   164         self recordMatch: #a.	
       
   165         ^ self return
       
   166     ].
       
   167     (self peek == $b) ifTrue: [ 
       
   168         self recordMatch: #b.	
       
   169         ^ self return
       
   170     ].
       
   171 
       
   172     ^ self return
       
   173 !
       
   174 
       
   175 nextTokenAstarA
       
   176     "a*a"
       
   177     [
       
   178         self step.
       
   179         self peek == $a.
       
   180     ] whileTrue.
       
   181 
       
   182     self peek == $a ifFalse: [ ^ self return ].
       
   183     self recordMatch: #AstarA.
       
   184     ^ self return
       
   185 !
       
   186 
       
   187 nextTokenAstarB
       
   188     "a*b"
       
   189     [ 
       
   190         self step.
       
   191         self peek == $a.
       
   192     ] whileTrue.
       
   193 
       
   194     self peek == $b ifFalse: [ ^ self return ].
       
   195     self recordMatch: #AstarB.
       
   196     ^ self return
       
   197 !
       
   198 
       
   199 nextTokenAuorA
       
   200     "a | a"
       
   201     self step.
       
   202     (self peek == $a) ifTrue: [ 
       
   203         self recordMatch: #a1.	
       
   204         self recordMatch: #a2.
       
   205         ^ self return	
       
   206     ].
       
   207 
       
   208     ^ self return	
       
   209 ! !
       
   210