SmaCC__SmaCCOrRENode.st
author vranyj1
Wed, 17 Nov 2010 21:57:55 +0000
changeset 20 4ea23addc2c4
parent 15 8b8cd1701c33
permissions -rw-r--r--
Makefile updated
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
SmaCCRegularExpressionNode subclass:#SmaCCOrRENode
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     6
	instanceVariableNames:'nodes'
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-Scanner 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
SmaCCOrRENode comment:'SmaCCOrRENode is a SmaCCRegularExpressionNode that represents an alternative.
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
	nodes	<Collection of: SmaCCRegularExpressionNode>	our possible choices'
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
!SmaCCOrRENode class methodsFor:'instance creation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    20
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    21
nodes: aCollection 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    22
	^(self new)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    23
		nodes: aCollection;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    24
		yourself
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    25
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    26
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    27
!SmaCCOrRENode methodsFor:'accessing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    28
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    29
possibleMatchesSize
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    30
	^nodes inject: 0 into: [:sum :each | sum + each possibleMatchesSize]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    31
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    32
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    33
| aScannerNode 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    34
	self action = aScannerNode action ifFalse: [^super | aScannerNode].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    35
	nodes add: aScannerNode.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    36
	^self
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    37
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    38
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    39
!SmaCCOrRENode methodsFor:'copying'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    40
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    41
postCopy
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    42
	super postCopy.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    43
	nodes := nodes copy
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    44
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    45
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    46
!SmaCCOrRENode methodsFor:'initialize-release'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    47
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    48
nodes: aCollection 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    49
	nodes := aCollection
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    50
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    51
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    52
!SmaCCOrRENode methodsFor:'printing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    53
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    54
printOn: aStream 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    55
	aStream nextPut: $(.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    56
	nodes do: [:each | each printOn: aStream]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    57
		separatedBy: [aStream nextPutAll: ' | '].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    58
	aStream nextPut: $)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    59
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    60
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    61
!SmaCCOrRENode methodsFor:'private'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    62
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    63
asNFAStartingWith: startNode 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    64
	| endNode |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    65
	endNode := SmaCCNode new.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    66
	endNode action: action.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    67
	nodes do: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    68
			[:each | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    69
			| componentStart |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    70
			componentStart := SmaCCNode new.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    71
			startNode addEdgeTo: componentStart.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    72
			(each asNFAStartingWith: componentStart) addEdgeTo: endNode].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    73
	^endNode
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    74
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    75
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    76
possibleMatchesDo: aBlock on: aStream 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    77
	nodes do: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    78
			[:each | 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    79
			| pos |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    80
			pos := aStream position.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    81
			each possibleMatchesDo: aBlock on: aStream.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    82
			aStream position: pos]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    83
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    84
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    85
!SmaCCOrRENode class methodsFor:'documentation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    86
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    87
version
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    88
    ^ '$Header: /opt/data/cvs/stx/goodies/smaCC/SmaCC__SmaCCOrRENode.st,v 1.1 2006-02-09 21:16:22 vranyj1 Exp $'
15
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    89
!
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    90
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    91
version_SVN
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    92
    ^ '$Id$'
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    93
! !