--- a/compiler/PPCTokenVisitor.st Thu Apr 30 23:43:14 2015 +0200
+++ b/compiler/PPCTokenVisitor.st Sun May 10 06:28:36 2015 +0100
@@ -9,86 +9,66 @@
category:'PetitCompiler-Visitors'
!
-!PPCTokenVisitor methodsFor:'accessing'!
+!PPCTokenVisitor methodsFor:'as yet unclassified'!
-forbiddenNodes: nodeSet
- forbiddenNodes := nodeSet.
-! !
+visitActionNode: node
-!PPCTokenVisitor methodsFor:'initialization'!
+ (node hasProperty: #trimmingToken) ifTrue: [
+ | child newChild |
+ "trimming token in token, remove it"
+ self change.
+
+ child := node child secondChild.
+ newChild := self visit: child.
+
+ child name isNil ifTrue: [
+ newChild name: node name.
+ ^ newChild.
+ ].
+ ^ PPCForwardNode new
+ child: newChild;
+ name: node name;
+ yourself
+ ].
-initialize
- super initialize.
- forbiddenNodes := IdentitySet new.
+ ^ super visitActionNode: node
+!
+
+visitTokenNode: node
+ "token in token, remove the token"
+ self visitChildren: node.
+
+ node child name isNil ifTrue: [
+ self change.
+ node child name: node name.
+ ^ node child
+ ].
+
+ self change.
+ ^ PPCForwardNode new
+ child: node child;
+ name: node name;
+ yourself
! !
!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.
+afterAccept: node retval: retval
- (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
+ (retval name isNil not and: [ (retval name endsWith: '_ws') ]) ifTrue: [
+ self change.
+ ^ PPCTokenWhitespaceNode new
+ child: retval;
+ yourself
+ ].
+ ^ super afterAccept: node retval: retval
!
-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
+beforeAccept: node
+ self assert: (forbiddenNodes includes: node) not description: 'Does not look like a token'
!
-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>"
+forbiddenNodes: nodeSet
+ forbiddenNodes := nodeSet.
! !