compiler/PPCTokenizingCodeGenerator.st
changeset 515 b5316ef15274
parent 502 1e45d3c96ec5
child 516 3b81c9e53352
child 524 f6f68d32de73
equal deleted inserted replaced
502:1e45d3c96ec5 515:b5316ef15274
    15     "When tokenizing, do not use guards"
    15     "When tokenizing, do not use guards"
    16     ^ false
    16     ^ false
    17 !
    17 !
    18 
    18 
    19 tokenGenerator
    19 tokenGenerator
       
    20     self error: 'deprecated'.
       
    21     
    20     tokenGenerator isNil ifTrue: [ 
    22     tokenGenerator isNil ifTrue: [ 
    21         tokenGenerator := PPCTokenCodeGenerator on: compiler.
    23         tokenGenerator := (PPCTokenCodeGenerator on: compiler)
    22         tokenGenerator arguments: arguments.
    24             arguments: arguments;
       
    25             yourself.
    23     ].
    26     ].
    24     ^ tokenGenerator
    27     ^ tokenGenerator
    25 !
    28 !
    26 
    29 
    27 tokenGenerator: whatever
    30 tokenGenerator: whatever
    60         compiler addOnLine: '].'.
    63         compiler addOnLine: '].'.
    61     ].
    64     ].
    62     ^ true
    65     ^ true
    63 ! !
    66 ! !
    64 
    67 
       
    68 !PPCTokenizingCodeGenerator methodsFor:'scanner'!
       
    69 
       
    70 compileScanner
       
    71     compiler addConstant: self tokenGenerator compileScanner as: #scannerClass.
       
    72 ! !
       
    73 
    65 !PPCTokenizingCodeGenerator methodsFor:'visiting'!
    74 !PPCTokenizingCodeGenerator methodsFor:'visiting'!
    66 
    75 
    67 visitAndNode: node
    76 visitAndNode: node
    68     | mementoVar currentTokenVar |
    77     | mementoVar currentTokenVar |
    69     
    78     
    89     | possibleError |
    98     | possibleError |
    90     possibleError := true.
    99     possibleError := true.
    91 
   100 
    92     node children do: [ :child |
   101     node children do: [ :child |
    93         | tokenMethodName |
   102         | tokenMethodName |
    94         
   103 
    95         child acceptsEpsilon ifTrue: [  
   104         "TODO: JK: fix this in a proper way. Commented for now to make LRPParser cimpilable 
       
   105          with tokenizing"
       
   106         child acceptsEpsilon "false" ifTrue: [  
    96             possibleError := false.
   107             possibleError := false.
    97             compiler codeAssignParsedValueOf:[ self visit:child ] to:self retvalVar.
   108             compiler codeIf: 'true' then: [ 
    98             compiler codeReturn
   109                 compiler codeAssignParsedValueOf:[ self visit:child ] to:self retvalVar.
       
   110                 compiler codeReturn
       
   111             ].
    99         ] ifFalse: [
   112         ] ifFalse: [
   100             child firstSetWithTokens do: [ :first |
   113             child firstSetWithTokens do: [ :first |
   101                 "For each child, for each first compile this:"
   114                 "For each child, for each first compile this:"
   102             
   115             
   103                 tokenMethodName := compiler idFor: first.
   116                 tokenMethodName := compiler idFor: first.
   123     ].
   136     ].
   124     possibleError ifTrue: [
   137     possibleError ifTrue: [
   125         compiler codeError: 'no choice found'.
   138         compiler codeError: 'no choice found'.
   126     ]
   139     ]
   127 
   140 
   128     "Modified: / 10-05-2015 / 07:37:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   141     "Modified: / 31-07-2015 / 08:07:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   129 !
   142 !
   130 
   143 
   131 visitDeterministicChoiceNode: node
   144 visitDeterministicChoiceNode: node
   132     | dictionary isInlined |
   145     | dictionary isInlined |
   133     dictionary := IdentityDictionary new.
   146     dictionary := IdentityDictionary new.
   181     ].
   194     ].
   182     super visitChoiceNode: node."
   195     super visitChoiceNode: node."
   183 !
   196 !
   184 
   197 
   185 visitTokenConsumeNode: node
   198 visitTokenConsumeNode: node
   186     | id |
   199     "dont do anything here"
   187     id := (compiler idFor: node child).
   200     ^ node
   188     compiler add: 'self ', id asString, ' ifTrue: ['.
       
   189         compiler indent.
       
   190         compiler codeAssign: 'nil.' to: 'currentTokenType'.
       
   191         compiler codeReturn: 'currentTokenValue'.
       
   192         compiler dedent.
       
   193     compiler add: '] ifFalse: ['.
       
   194     compiler indent.
       
   195     compiler codeError: id asString, ' expected'.
       
   196     compiler dedent.
       
   197     compiler add: '].'.
       
   198 
       
   199 "
       
   200     compiler codeReturn: 'self consume: ', (compiler idFor: node child) storeString, '.'
       
   201 "
       
   202 !
   201 !
   203 
   202 
   204 visitTokenNode: node
   203 visitTokenNode: node
   205     self error: 'shoudl not happend!!'
   204     self error: 'should not happen!!'
   206 !
   205 !
   207 
   206 
   208 visitTokenizingParserNode: node
   207 visitTokenizingParserNode: node
   209     self visit: node tokenizer.
       
   210     self visit: node whitespace.
   208     self visit: node whitespace.
   211     
   209     
   212     compiler codeHaltIfShiftPressed.
   210     compiler codeHaltIfShiftPressed.
   213     compiler 
   211     compiler 
   214           codeAssignParsedValueOf:[ self visit:node parser ]
   212           codeAssignParsedValueOf:[ self visit:node parser ]
   215           to:self retvalVar.
   213           to:self retvalVar.
   216     compiler codeReturn.
   214     compiler codeReturn.
   217 !
   215 !
   218 
   216 
       
   217 visitTrimmingTokenCharacterNode: node
       
   218     self error: 'should not happen!!'
       
   219 !
       
   220 
   219 visitTrimmingTokenNode: node
   221 visitTrimmingTokenNode: node
   220     self error: 'shoudl not happend!!'
   222     self error: 'should not happen!!'
   221 ! !
   223 ! !
   222 
   224