Updated to PetitCompiler-JanKurs.160, PetitCompiler-Tests-JanKurs.112, PetitCompiler-Extras-Tests-JanKurs.25, PetitCompiler-Benchmarks-JanKurs.17
Name: PetitCompiler-JanKurs.160
Author: JanKurs
Time: 17-08-2015, 09:52:26.291 AM
UUID: 3b4bfc98-8098-4951-af83-a59e2585b121
Name: PetitCompiler-Tests-JanKurs.112
Author: JanKurs
Time: 16-08-2015, 05:00:32.936 PM
UUID: 85613d47-08f3-406f-9823-9cdab451e805
Name: PetitCompiler-Extras-Tests-JanKurs.25
Author: JanKurs
Time: 16-08-2015, 05:00:10.328 PM
UUID: 09731810-51a1-4151-8d3a-56b636fbd1f7
Name: PetitCompiler-Benchmarks-JanKurs.17
Author: JanKurs
Time: 05-08-2015, 05:29:32.407 PM
UUID: e544b5f1-bcf8-470b-93a6-d2363e4dfc8a
"{ 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.
! !