compiler/PPCMergingVisitor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jul 2015 08:37:37 +0100
changeset 510 869853decf31
parent 452 9f4558b3be66
permissions -rw-r--r--
Tests refactoring - use generated test cases to make sure all posibilities are tested. Do not generate resource for all combinations, use PPCSetUpBeforeTearDownAfterResource instead that delegates parser compilation to the testcase itself (it calls it's #setUpBefore method).

"{ Package: 'stx:goodies/petitparser/compiler' }"

"{ NameSpace: Smalltalk }"

PPCRewritingVisitor subclass:#PPCMergingVisitor
	instanceVariableNames:'nodeSet'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Visitors'
!

!PPCMergingVisitor methodsFor:'as yet unclassified'!

equivalentNode: node
    ^  nodeSet detect: [ :e | e = node ]
!

hasEquivalentNode: node
    ^ nodeSet includes: node
!

initialize
    super initialize.
    
    nodeSet := Set new
!

store: node
    self assert: (self hasEquivalentNode: node) not.
    nodeSet add: node
!

visitNode: node
    super visitNode: node.
    
    (self hasEquivalentNode: node) ifTrue: [
        self change.
        ^ self equivalentNode: node
    ] ifFalse: [  
        self store: node
    ].

    ^ node
! !