compiler/PPCCompilerTokenizingRememberStrategy.st
changeset 524 f6f68d32de73
parent 515 b5316ef15274
child 525 751532c8f3db
child 539 610131174c0f
equal deleted inserted replaced
515:b5316ef15274 524:f6f68d32de73
     1 "{ Package: 'stx:goodies/petitparser/compiler' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 Object subclass:#PPCCompilerTokenizingRememberStrategy
       
     6 	instanceVariableNames:'compiler'
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'PetitCompiler-Compiler-Codegen-Straregies'
       
    10 !
       
    11 
       
    12 
       
    13 !PPCCompilerTokenizingRememberStrategy class methodsFor:'instance creation'!
       
    14 
       
    15 on: aPPCCompiler
       
    16     ^ self new
       
    17         compiler: aPPCCompiler;
       
    18         yourself
       
    19 ! !
       
    20 
       
    21 !PPCCompilerTokenizingRememberStrategy methodsFor:'accessing'!
       
    22 
       
    23 compiler: aPPCCompiler
       
    24     compiler := aPPCCompiler 
       
    25 ! !
       
    26 
       
    27 !PPCCompilerTokenizingRememberStrategy methodsFor:'as yet unclassified'!
       
    28 
       
    29 smartRemember: parser to: variableName 
       
    30     compiler allocateTemporaryVariableNamed: '__position'.
       
    31     compiler allocateTemporaryVariableNamed: '__tokenType'.
       
    32     compiler allocateTemporaryVariableNamed: '__tokenValue'.
       
    33 
       
    34     compiler codeAssign: 'context position.' to: '__position'.	
       
    35     compiler codeAssign: 'currentTokenType.' to: '__tokenType'.	
       
    36     compiler codeAssign: 'currentTokenValue.' to: '__tokenValue'.	
       
    37 
       
    38 false ifFalse: [ 
       
    39     parser isContextFree ifTrue: [ 
       
    40 "		compiler codeAssign: '{ context lwRemember. currentTokenType . currentTokenValue }.' "
       
    41         compiler codeAssign: 'scanner position.' 
       
    42                     to: variableName.
       
    43     ] ifFalse: [ 
       
    44         compiler codeAssign: '{ context remember. currentTokenType . currentTokenValue }.'
       
    45                     to: variableName.
       
    46     ]
       
    47 ]
       
    48 !
       
    49 
       
    50 smartRestore: parser from: mementoName
       
    51     compiler add: 'context lwRestore: __position.'.
       
    52     compiler codeAssign: '__tokenType.' to: 'currentTokenType'.
       
    53     compiler codeAssign: '__tokenValue.' to: 'currentTokenValue'.
       
    54 
       
    55 
       
    56 false ifTrue: [ 
       
    57     parser isContextFree ifTrue: [ 
       
    58 "		compiler add: 'context lwRestore: (', mementoName, ' at: 1).'."
       
    59         compiler add: 'context lwRestore: ', mementoName, '.'.
       
    60     ] ifFalse: [ 
       
    61         compiler add: 'context restore: (', mementoName, ' at: 1).'.
       
    62     ].
       
    63 
       
    64     compiler codeAssign: 'nil.' to: 'currentTokenType'.
       
    65 "	
       
    66     compiler codeAssign: '(', mementoName, ' at: 2).' to: 'currentTokenType'.
       
    67     compiler codeAssign: '(', mementoName, ' at: 3).' to: 'currentTokenValue'.	
       
    68 "
       
    69 "	
       
    70     compiler code: 'scanner backtrack.'.
       
    71 "
       
    72     
       
    73 ]
       
    74 ! !
       
    75 
       
    76 !PPCCompilerTokenizingRememberStrategy class methodsFor:'documentation'!
       
    77 
       
    78 version_HG
       
    79 
       
    80     ^ '$Changeset: <not expanded> $'
       
    81 ! !
       
    82