compiler/PPCTokenVisitor.st
changeset 438 20598d7ce9fa
child 452 9f4558b3be66
equal deleted inserted replaced
437:54b3bc9e3987 438:20598d7ce9fa
       
     1 "{ Package: 'stx:goodies/petitparser/compiler' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 PPCRewritingVisitor subclass:#PPCTokenVisitor
       
     6 	instanceVariableNames:'forbiddenNodes'
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'PetitCompiler-Visitors'
       
    10 !
       
    11 
       
    12 !PPCTokenVisitor methodsFor:'accessing'!
       
    13 
       
    14 forbiddenNodes: nodeSet
       
    15 	forbiddenNodes := nodeSet.
       
    16 ! !
       
    17 
       
    18 !PPCTokenVisitor methodsFor:'initialization'!
       
    19 
       
    20 initialize
       
    21 	super initialize.
       
    22 	forbiddenNodes := IdentitySet new.
       
    23 ! !
       
    24 
       
    25 !PPCTokenVisitor methodsFor:'traversing'!
       
    26 
       
    27 beforeAccept: node
       
    28 	self assert: (forbiddenNodes includes: node) not description: 'Does not look like a token' 
       
    29 ! !
       
    30 
       
    31 !PPCTokenVisitor methodsFor:'visiting'!
       
    32 
       
    33 visitActionNode: node
       
    34 	self visitChildren: node.
       
    35 
       
    36 	(node hasProperty: #trimmingToken) ifTrue: [ 
       
    37 		| child |
       
    38 		"token in token..."
       
    39 		child := node child children second.
       
    40 		child name ifNil: [ 
       
    41 			self change.
       
    42 			child name: node name.
       
    43 			^ child
       
    44 		]
       
    45 	].
       
    46 
       
    47 	self change.
       
    48 	^ node child
       
    49 !
       
    50 
       
    51 visitSequenceNode: node
       
    52 	self visitChildren: node.
       
    53 
       
    54 	self change.
       
    55 	^ PPCTokenSequenceNode new
       
    56 		children: node children;
       
    57 		name: node name;
       
    58 		properties: node properties;
       
    59 		yourself	
       
    60 !
       
    61 
       
    62 visitStarMessagePredicateNode: node
       
    63 	self visitChildren: node.
       
    64 	
       
    65 	self change.
       
    66 	^ PPCTokenStarMessagePredicateNode new
       
    67 		name: node name;
       
    68 		message: node message;
       
    69 		child: node child;
       
    70 		yourself
       
    71 !
       
    72 
       
    73 visitSymbolActionNode: node
       
    74 	self visitChildren: node.
       
    75 	
       
    76 	self change.
       
    77 	^ node child
       
    78 !
       
    79 
       
    80 visitTokenNode: node
       
    81 	self visitChildren: node.
       
    82 	self change.
       
    83 	^ node child
       
    84 !
       
    85 
       
    86 visitTrimmingTokenNode: node
       
    87 	self visitChildren: node.
       
    88         
       
    89 	self change.
       
    90 	^ node child
       
    91 
       
    92     "Modified: / 23-04-2015 / 12:11:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    93 ! !
       
    94