compiler/PPCTokenVisitor.st
changeset 438 20598d7ce9fa
child 452 9f4558b3be66
--- /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>"
+! !
+