SmaCC__SmaCCNonTerminalSymbol.st
author vranyj1
Wed, 17 Nov 2010 21:57:55 +0000
changeset 20 4ea23addc2c4
parent 15 8b8cd1701c33
child 25 5a6921729520
permissions -rw-r--r--
Makefile updated

"{ Package: 'stx:goodies/smaCC' }"

"{ NameSpace: SmaCC }"

SmaCCSymbol subclass:#SmaCCNonTerminalSymbol
	instanceVariableNames:'productions'
	classVariableNames:''
	poolDictionaries:''
	category:'SmaCC-Parser Generator'
!

SmaCCNonTerminalSymbol comment:'SmaCCNonTerminalSymbol represents a non-terminal symbol in our grammar.

Instance Variables:
	productions	<SequenceableCollection of: SmaCCRHS>	our rhs'' for the symbol'
!


!SmaCCNonTerminalSymbol methodsFor:'accessing'!

addProduction: aRHS
	productions add: aRHS
!

calculateFirstTerminals
	| initialSize |
	initialSize := firstItems size.
	productions isEmpty 
		ifTrue: [firstItems add: self class empty]
		ifFalse: [productions do: [:each | firstItems addAll: each firstTerminals]].
	^initialSize ~= firstItems size
!

positionOf: aRHS 
	^productions indexOf: aRHS
!

productionsDo: aBlock 
	productions do: aBlock
!

size
	^productions size
! !

!SmaCCNonTerminalSymbol methodsFor:'initialize-release'!

name: aString 
	super name: aString.
	productions := OrderedCollection new
! !

!SmaCCNonTerminalSymbol methodsFor:'public'!

isEmpty
	^productions isEmpty
!

isTerminal
	^false
! !

!SmaCCNonTerminalSymbol class methodsFor:'documentation'!

version
    ^ '$Header: /opt/data/cvs/stx/goodies/smaCC/SmaCC__SmaCCNonTerminalSymbol.st,v 1.1 2006-02-09 21:18:48 vranyj1 Exp $'
!

version_SVN
    ^ '$Id$'
! !