Updated to PetitCompiler-JanKurs.111, PetitCompiler-Tests-JanKurs.51, PetitCompiler-Benchmarks-JanKurs.7, added PetitCompiler-Extras-Tests-JanKurs.4
Name: PetitCompiler-JanKurs.111
Author: JanKurs
Time: 08-05-2015, 05:56:05.327 PM
UUID: 8805e696-9933-49b8-a5c8-a963b931b996
Name: PetitCompiler-Tests-JanKurs.51
Author: JanKurs
Time: 08-05-2015, 05:17:44.224 PM
UUID: 21c24114-73be-4ba2-86cd-5a4402f778a0
Name: PetitCompiler-Benchmarks-JanKurs.7
Author: JanKurs
Time: 07-05-2015, 06:06:12.918 PM
UUID: 0e6e2c0a-90f6-4f46-9663-c66f636da602
Name: PetitCompiler-Extras-Tests-JanKurs.4
Author: JanKurs
Time: 08-05-2015, 05:56:46.180 PM
UUID: 4d4d4d23-c5bc-41ef-ad41-8a56528ddb42
"{ Package: 'stx:goodies/petitparser/compiler' }"
"{ NameSpace: Smalltalk }"
PPCRewritingVisitor subclass:#PPCTokenVisitor
instanceVariableNames:'forbiddenNodes'
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Visitors'
!
!PPCTokenVisitor methodsFor:'as yet unclassified'!
visitActionNode: node
(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
].
^ 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'!
afterAccept: node retval: retval
(retval name isNil not and: [ (retval name endsWith: '_ws') ]) ifTrue: [
self change.
^ PPCTokenWhitespaceNode new
child: retval;
yourself
].
^ super afterAccept: node retval: retval
!
beforeAccept: node
self assert: (forbiddenNodes includes: node) not description: 'Does not look like a token'
!
forbiddenNodes: nodeSet
forbiddenNodes := nodeSet.
! !