--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/PPCRecognizerComponentDetector.st Sun May 10 06:28:36 2015 +0100
@@ -0,0 +1,64 @@
+"{ Package: 'stx:goodies/petitparser/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+PPCRewritingVisitor subclass:#PPCRecognizerComponentDetector
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitCompiler-Visitors'
+!
+
+!PPCRecognizerComponentDetector methodsFor:'visiting'!
+
+visitNotNode: node
+ "We don't need result of the not,..."
+ | child newChild |
+ self change.
+ child := node child.
+ newChild := self visitWithRecognizingComponentVisitor: child.
+ node replace: child with: newChild.
+ ^ node
+!
+
+visitTokenNode: node
+ | child newChild |
+
+ self change.
+ child := node child.
+ newChild := self visitWithRecognizingComponentVisitor: child.
+ node replace: child with: newChild.
+
+ ^ node
+!
+
+visitTrimmingTokenNode: node
+ | child newChild whitespace newWhitespace |
+
+ self change.
+ child := node child.
+ newChild := self visitWithRecognizingComponentVisitor: child.
+ node replace: child with: newChild.
+
+ whitespace := node whitespace.
+ newWhitespace := self visitWithRecognizingComponentVisitor: whitespace.
+ node replace: whitespace with: newWhitespace.
+
+
+ ^ node
+!
+
+visitWithRecognizingComponentVisitor: node
+ | retval forbiddenNodes copyVisitor tokenVisitor |
+
+ copyVisitor := PPCCopyVisitor new.
+ tokenVisitor := PPCRecognizerComponentVisitor new.
+
+ forbiddenNodes := openSet copy.
+ tokenVisitor forbiddenNodes: forbiddenNodes.
+
+ retval := copyVisitor visit: node.
+ retval := tokenVisitor visit: retval.
+ ^ retval
+! !
+