--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/PPCTokenVisitor.st Thu Apr 30 23:43:14 2015 +0200
@@ -0,0 +1,94 @@
+"{ Package: 'stx:goodies/petitparser/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCRewritingVisitor subclass:#PPCTokenVisitor
+ instanceVariableNames:'forbiddenNodes'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitCompiler-Visitors'
+!
+
+!PPCTokenVisitor methodsFor:'accessing'!
+
+forbiddenNodes: nodeSet
+ forbiddenNodes := nodeSet.
+! !
+
+!PPCTokenVisitor methodsFor:'initialization'!
+
+initialize
+ super initialize.
+ forbiddenNodes := IdentitySet new.
+! !
+
+!PPCTokenVisitor methodsFor:'traversing'!
+
+beforeAccept: node
+ self assert: (forbiddenNodes includes: node) not description: 'Does not look like a token'
+! !
+
+!PPCTokenVisitor methodsFor:'visiting'!
+
+visitActionNode: node
+ self visitChildren: node.
+
+ (node hasProperty: #trimmingToken) ifTrue: [
+ | child |
+ "token in token..."
+ child := node child children second.
+ child name ifNil: [
+ self change.
+ child name: node name.
+ ^ child
+ ]
+ ].
+
+ self change.
+ ^ node child
+!
+
+visitSequenceNode: node
+ self visitChildren: node.
+
+ self change.
+ ^ PPCTokenSequenceNode new
+ children: node children;
+ name: node name;
+ properties: node properties;
+ yourself
+!
+
+visitStarMessagePredicateNode: node
+ self visitChildren: node.
+
+ self change.
+ ^ PPCTokenStarMessagePredicateNode new
+ name: node name;
+ message: node message;
+ child: node child;
+ yourself
+!
+
+visitSymbolActionNode: node
+ self visitChildren: node.
+
+ self change.
+ ^ node child
+!
+
+visitTokenNode: node
+ self visitChildren: node.
+ self change.
+ ^ node child
+!
+
+visitTrimmingTokenNode: node
+ self visitChildren: node.
+
+ self change.
+ ^ node child
+
+ "Modified: / 23-04-2015 / 12:11:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+