SmaCC__SmaCCNonTerminalSymbol.st
author vranyj1
Wed, 24 Feb 2016 12:12:00 +0000
changeset 25 5a6921729520
parent 15 8b8cd1701c33
permissions -rw-r--r--
UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols. This may be useful for grammar analysis and for learning pusposes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     1
"{ Package: 'stx:goodies/smaCC' }"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     2
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     3
"{ NameSpace: SmaCC }"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     4
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     5
SmaCCSymbol subclass:#SmaCCNonTerminalSymbol
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     6
	instanceVariableNames:'productions'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     7
	classVariableNames:''
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     8
	poolDictionaries:''
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     9
	category:'SmaCC-Parser Generator'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    10
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    11
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    12
SmaCCNonTerminalSymbol comment:'SmaCCNonTerminalSymbol represents a non-terminal symbol in our grammar.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    13
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    14
Instance Variables:
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    15
	productions	<SequenceableCollection of: SmaCCRHS>	our rhs'' for the symbol'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    16
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    17
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    18
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    19
!SmaCCNonTerminalSymbol methodsFor:'accessing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    20
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    21
addProduction: aRHS
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    22
	productions add: aRHS
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    23
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    24
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    25
calculateFirstTerminals
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    26
	| initialSize |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    27
	initialSize := firstItems size.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    28
	productions isEmpty 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    29
		ifTrue: [firstItems add: self class empty]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    30
		ifFalse: [productions do: [:each | firstItems addAll: each firstTerminals]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    31
	^initialSize ~= firstItems size
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    32
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    33
25
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    34
calculateLastTerminals
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    35
        | initialSize |
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    36
        initialSize := lastItems size.
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    37
        productions isEmpty 
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    38
                ifTrue: [lastItems add: self class empty]
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    39
                ifFalse: [productions do: [:each | lastItems addAll: each lastTerminals]].
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    40
        ^initialSize ~= lastItems size
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    41
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    42
    "Created: / 24-02-2016 / 09:39:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    43
!
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    44
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    45
positionOf: aRHS 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    46
	^productions indexOf: aRHS
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    47
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    48
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    49
productionsDo: aBlock 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    50
	productions do: aBlock
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    51
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    52
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    53
size
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    54
	^productions size
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    55
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    56
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    57
!SmaCCNonTerminalSymbol methodsFor:'initialize-release'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    58
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    59
name: aString 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    60
	super name: aString.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    61
	productions := OrderedCollection new
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    62
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    63
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    64
!SmaCCNonTerminalSymbol methodsFor:'public'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    65
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    66
isEmpty
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    67
	^productions isEmpty
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    68
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    69
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    70
isTerminal
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    71
	^false
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    72
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    73
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    74
!SmaCCNonTerminalSymbol class methodsFor:'documentation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    75
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    76
version
25
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    77
    ^ '$Id$'
15
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    78
!
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    79
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    80
version_SVN
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    81
    ^ '$Id$'
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    82
! !
25
5a6921729520 UI improvements: added menu items to show FIRST() and LAST() sets for non-terminal symbols.
vranyj1
parents: 15
diff changeset
    83