compiler/PPCChoiceNode.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 24 Aug 2015 17:38:44 +0100
changeset 527 9b50ec9a6918
parent 515 b5316ef15274
permissions -rw-r--r--
Added missing #new methods

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

"{ NameSpace: Smalltalk }"

PPCListNode subclass:#PPCChoiceNode
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Nodes'
!


!PPCChoiceNode methodsFor:'accessing'!

defaultName
    ^ #ch
! !

!PPCChoiceNode methodsFor:'analysis'!

acceptsEpsilon
    ^ self acceptsEpsilonOpenSet: IdentitySet new.
!

acceptsEpsilonOpenSet: set
    set add: self.
    ^ self children anySatisfy: [:e | e acceptsEpsilonOpenSet: set ].
!

check
    ^ self children asIdentitySet size = children size ifFalse: [ 
        Transcript cr; show: 'WARNING: Identical children in choice!!'; cr.
        nil.
    ] ifTrue: [ nil ]
!

recognizedSentencesPrim
    | retval |
    (self children anySatisfy: [ :child | child hasFiniteLanguage not ]) ifTrue: [ ^ #() ].
    
    retval := Set new.
    self children do: [ : child |
        retval addAll: child recognizedSentences.
    ].
    ^ retval asArray
! !

!PPCChoiceNode methodsFor:'visiting'!

accept: visitor
    ^ visitor visitChoiceNode: self
! !

!PPCChoiceNode class methodsFor:'documentation'!

version_HG

    ^ '$Changeset: <not expanded> $'
! !