compiler/PPCTokenizingCodeGenerator.st
changeset 516 3b81c9e53352
parent 508 c74a0dbfa161
parent 515 b5316ef15274
child 525 751532c8f3db
equal deleted inserted replaced
514:46dd1237b20a 516:3b81c9e53352
    16     "When tokenizing, do not use guards"
    16     "When tokenizing, do not use guards"
    17     ^ false
    17     ^ false
    18 !
    18 !
    19 
    19 
    20 tokenGenerator
    20 tokenGenerator
       
    21     self error: 'deprecated'.
       
    22     
    21     tokenGenerator isNil ifTrue: [ 
    23     tokenGenerator isNil ifTrue: [ 
    22         tokenGenerator := PPCTokenCodeGenerator on: compiler.
    24         tokenGenerator := (PPCTokenCodeGenerator on: compiler)
    23         tokenGenerator arguments: arguments.
    25             arguments: arguments;
       
    26             yourself.
    24     ].
    27     ].
    25     ^ tokenGenerator
    28     ^ tokenGenerator
    26 !
    29 !
    27 
    30 
    28 tokenGenerator: whatever
    31 tokenGenerator: whatever
    61         compiler addOnLine: '].'.
    64         compiler addOnLine: '].'.
    62     ].
    65     ].
    63     ^ true
    66     ^ true
    64 ! !
    67 ! !
    65 
    68 
       
    69 !PPCTokenizingCodeGenerator methodsFor:'scanner'!
       
    70 
       
    71 compileScanner
       
    72     compiler addConstant: self tokenGenerator compileScanner as: #scannerClass.
       
    73 ! !
       
    74 
    66 !PPCTokenizingCodeGenerator methodsFor:'visiting'!
    75 !PPCTokenizingCodeGenerator methodsFor:'visiting'!
    67 
    76 
    68 visitAndNode: node
    77 visitAndNode: node
    69     | mementoVar currentTokenVar |
    78     | mementoVar currentTokenVar |
    70     
    79     
    93     node children do: [ :child |
   102     node children do: [ :child |
    94         | tokenMethodName |
   103         | tokenMethodName |
    95 
   104 
    96         "TODO: JK: fix this in a proper way. Commented for now to make LRPParser cimpilable 
   105         "TODO: JK: fix this in a proper way. Commented for now to make LRPParser cimpilable 
    97          with tokenizing"
   106          with tokenizing"
    98         "child acceptsEpsilon"false ifTrue: [  
   107         child acceptsEpsilon "false" ifTrue: [  
    99             possibleError := false.
   108             possibleError := false.
   100             compiler codeAssignParsedValueOf:[ self visit:child ] to:self retvalVar.
   109             compiler codeIf: 'true' then: [ 
   101             compiler codeReturn
   110                 compiler codeAssignParsedValueOf:[ self visit:child ] to:self retvalVar.
       
   111                 compiler codeReturn
       
   112             ].
   102         ] ifFalse: [
   113         ] ifFalse: [
   103             child firstSetWithTokens do: [ :first |
   114             child firstSetWithTokens do: [ :first |
   104                 "For each child, for each first compile this:"
   115                 "For each child, for each first compile this:"
   105             
   116             
   106                 tokenMethodName := compiler idFor: first.
   117                 tokenMethodName := compiler idFor: first.
   184     ].
   195     ].
   185     super visitChoiceNode: node."
   196     super visitChoiceNode: node."
   186 !
   197 !
   187 
   198 
   188 visitTokenConsumeNode: node
   199 visitTokenConsumeNode: node
   189     | id |
   200     "dont do anything here"
   190     id := (compiler idFor: node child).
   201     ^ node
   191     compiler add: 'self ', id asString, ' ifTrue: ['.
       
   192         compiler indent.
       
   193         compiler codeAssign: 'nil.' to: 'currentTokenType'.
       
   194         compiler codeReturn: 'currentTokenValue'.
       
   195         compiler dedent.
       
   196     compiler add: '] ifFalse: ['.
       
   197     compiler indent.
       
   198     compiler codeError: id asString, ' expected'.
       
   199     compiler dedent.
       
   200     compiler add: '].'.
       
   201 
       
   202 "
       
   203     compiler codeReturn: 'self consume: ', (compiler idFor: node child) storeString, '.'
       
   204 "
       
   205 !
   202 !
   206 
   203 
   207 visitTokenNode: node
   204 visitTokenNode: node
   208     self error: 'shoudl not happend!!'
   205     self error: 'should not happen!!'
   209 !
   206 !
   210 
   207 
   211 visitTokenizingParserNode: node
   208 visitTokenizingParserNode: node
   212     self visit: node tokenizer.
       
   213     self visit: node whitespace.
   209     self visit: node whitespace.
   214     
   210     
   215     compiler codeHaltIfShiftPressed.
   211     compiler codeHaltIfShiftPressed.
   216     compiler 
   212     compiler 
   217           codeAssignParsedValueOf:[ self visit:node parser ]
   213           codeAssignParsedValueOf:[ self visit:node parser ]
   218           to:self retvalVar.
   214           to:self retvalVar.
   219     compiler codeReturn.
   215     compiler codeReturn.
   220 !
   216 !
   221 
   217 
       
   218 visitTrimmingTokenCharacterNode: node
       
   219     self error: 'should not happen!!'
       
   220 !
       
   221 
   222 visitTrimmingTokenNode: node
   222 visitTrimmingTokenNode: node
   223     self error: 'shoudl not happend!!'
   223     self error: 'should not happen!!'
   224 ! !
   224 ! !
   225 
   225 
   226 !PPCTokenizingCodeGenerator class methodsFor:'documentation'!
   226 !PPCTokenizingCodeGenerator class methodsFor:'documentation'!
   227 
   227 
   228 version_HG
   228 version_HG