SmaCC__SmaCCSequenceRENode.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 07 Dec 2016 13:18:16 +0000
changeset 26 b2c091b8cea1
parent 15 8b8cd1701c33
permissions -rw-r--r--
Fixed initialization of SmaCCEdge There's no `UnicodeString` anymore. Changed: WriteStream on: UnicodeString new to: String new writeStream
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:#SmaCCSequenceRENode
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
SmaCCSequenceRENode comment:'SmaCCSequenceRENode represents a regular expression that is made up of several other regular expressions concatenated together.
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 children nodes in left-to-right order'
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
!SmaCCSequenceRENode 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
!SmaCCSequenceRENode methodsFor:'accessing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    28
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    29
, aScannerNode 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    30
	self action = aScannerNode action ifFalse: [^super , aScannerNode].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    31
	nodes add: aScannerNode.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    32
	^self
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    33
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    34
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    35
possibleMatchesSize
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    36
	^nodes inject: 1 into: [:sum :each | sum * each possibleMatchesSize]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    37
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    38
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    39
!SmaCCSequenceRENode 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
!SmaCCSequenceRENode 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
!SmaCCSequenceRENode 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
	nodes do: [:each | each printOn: aStream] separatedBy: [aStream space]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    56
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    57
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    58
!SmaCCSequenceRENode methodsFor:'private'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    59
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    60
asNFAStartingWith: startNode 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    61
	| endNode |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    62
	endNode := SmaCCNode new.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    63
	endNode action: action.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    64
	(nodes inject: startNode into: [:sum :each | each asNFAStartingWith: sum]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    65
		addEdgeTo: endNode.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    66
	^endNode
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    67
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    68
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    69
possibleMatchesDo: aBlock on: aStream 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    70
	self 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    71
		possibleMatchesDo: aBlock
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    72
		on: aStream
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    73
		startingAt: 1
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 startingAt: anInteger 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    77
	| node |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    78
	node := nodes at: anInteger.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    79
	nodes size = anInteger 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    80
		ifTrue: [node possibleMatchesDo: aBlock on: aStream]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    81
		ifFalse: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    82
			[node possibleMatchesDo: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    83
					[self 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    84
						possibleMatchesDo: aBlock
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    85
						on: aStream
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    86
						startingAt: anInteger + 1]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    87
				on: aStream]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    88
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    89
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    90
!SmaCCSequenceRENode class methodsFor:'documentation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    91
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    92
version
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    93
    ^ '$Header: /opt/data/cvs/stx/goodies/smaCC/SmaCC__SmaCCSequenceRENode.st,v 1.1 2006-02-09 21:14:56 vranyj1 Exp $'
15
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    94
!
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    95
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    96
version_SVN
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
    97
    ^ '$Id$'
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    98
! !