analyzer/tests/PPAnalyzerTest.st
author Claus Gittinger <cg@exept.de>
Tue, 04 Mar 2014 16:42:53 +0100
changeset 208 42c859858c78
child 259 0f1afe248885
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
208
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/analyzer/tests' }"
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
PPAbstractParserTest subclass:#PPAnalyzerTest
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:''
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PetitAnalyzer-Tests'
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PPAnalyzerTest class methodsFor:'accessing'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
packageNamesUnderTest
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ #('PetitAnalyzer')
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!PPAnalyzerTest methodsFor:'accessing'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
grammarA
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	"Güting, Erwig, Übersetzerbau, Springer (p.63)"
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
	grammar := Dictionary new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	" terminals "
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	grammar at: #a put: $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	grammar at: #b put: $b asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	grammar at: #c put: $c asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
	grammar at: #d put: $d asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
	grammar at: #e put: nil asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	" non terminals "
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	grammar at: #B put: (grammar at: #b) / (grammar at: #e).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	grammar at: #A put: (grammar at: #a) / (grammar at: #B).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	grammar at: #S put: (grammar at: #A) , (grammar at: #B) , (grammar at: #c) , (grammar at: #d).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
	^ grammar	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
grammarB
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	"The canonical grammar to exercise first- and follow-set calculation, probably originally from the dragon-book."
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	grammar := Dictionary new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	#(E Ep T Tp F) 		do: [ :each | grammar at: each put: (PPUnresolvedParser named: each) ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
		
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	(grammar at: #E)		def: (grammar at: #T) , (grammar at: #Ep).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	(grammar at: #Ep)	def: ($+ asParser , (grammar at: #T) , (grammar at: #Ep)) optional.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	(grammar at: #T)		def: (grammar at: #F) , (grammar at: #Tp).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	(grammar at: #Tp)	def: ($* asParser , (grammar at: #F) , (grammar at: #Tp)) optional.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	(grammar at: #F)		def: ($( asParser , (grammar at: #E) , $) asParser) / $i asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
			
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	#(E Ep T Tp F) 		do: [ :each | (grammar at: each) name: each ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	^ grammar
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
grammarC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
	"A highly recrusive grammar."
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
	grammar := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
	grammar def: (grammar , $+ asParser , grammar) / $1 asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
	^ grammar
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
grammarD
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
	"A highly ambiguous grammar from: Saichaitanya Jampana. Exploring the problem of ambiguity in context-free grammars. Masters thesis, Oklahoma State Un                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
grammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
	"The most stupid parser, it just references itself and never consumes anything. All algorithms should survive such an attack."
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
	| parser |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
	parser := PPDelegateParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	parser setParser: parser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	^ parser
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
!PPAnalyzerTest methodsFor:'testing'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
testAllNamedParsers
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	| p1 p2 p3 |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	p1 := (#digit asParser name: 'a').
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
	p2 := (#digit asParser name: 'b') star.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
	p3 := (#digit asParser name: 'c') token end.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	self assert: p1 allNamedParsers size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
	self assert: p1 allNamedParsers first name = 'a'.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	self assert: p2 allNamedParsers size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
	self assert: p2 allNamedParsers first name = 'b'.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
	self assert: p3 allNamedParsers size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
	self assert: p3 allNamedParsers first name = 'c'
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
testAllParsers
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
	| p1 p2 p3 |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
	p1 := #lowercase asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	p2 := p1 ==> #asUppercase.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
	p3 := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
	p3 def: p2 / p3.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
	self assert: p1 allParsers size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
	self assert: p2 allParsers size = 2.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
	self assert: p3 allParsers size = 3
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
testInnerChildren
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
	| p1 p2 p3 |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
	p1 := (#digit asParser name: 'a').
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
	p2 := (#digit asParser star name: 'b').
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
	p3 := (#digit asParser name: 'c') token star end.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
	self assert: p1 innerChildren isEmpty.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
	self assert: p2 innerChildren size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
	self assert: (p2 innerChildren allSatisfy: [ :each | each name isNil ]).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
	self assert: p3 innerChildren size = 2.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
	self assert: (p3 innerChildren allSatisfy: [ :each | each name isNil ])
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
testIsNullable
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
	self assert: $a asParser star isNullable.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
	self assert: nil asParser isNullable.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
	self deny: $a asParser plus isNullable.	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
	self deny: PPLiteralSequenceParser new isNullable.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
	self deny: PPLiteralObjectParser new isNullable.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
	self deny: PPPredicateParser new isNullable.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
	self deny: PPChoiceParser new isNullable.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
	self deny: PPSequenceParser new isNullable.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
	self deny: PPAndParser new isNullable.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
	self deny: PPTokenParser new isNullable
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
testIsTerminal
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
	self assert: PPEpsilonParser new isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
	self assert: PPFailingParser new isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
	self assert: PPPluggableParser new isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
	self assert: PPLiteralObjectParser new isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
	self assert: PPLiteralSequenceParser new isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
	self assert: PPPredicateObjectParser new isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
	self assert: PPPredicateSequenceParser new isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
	self deny: ($a asParser / $b asParser) isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
	self deny: ($a asParser , $b asParser) isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
	self deny: ($a asParser and) isTerminal.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
	self deny: ($a asParser not) isTerminal
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
testNamedChildren
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
	| p1 p2 p3 p4 |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
	p1 := (#digit asParser name: 'a').
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
	p2 := (#digit asParser name: 'b') star.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
	p3 := (#digit asParser name: 'c') token end.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
	p4 := ((#digit asParser name: 'c') token name: 'd') end.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
	self assert: p1 namedChildren isEmpty.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
	self assert: p2 namedChildren size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
	self assert: p2 namedChildren first name = 'b'.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
	self assert: p3 namedChildren size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
	self assert: p3 namedChildren first name = 'c'.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
	self assert: p4 namedChildren size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
	self assert: p4 namedChildren first name = 'd'
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
!PPAnalyzerTest methodsFor:'testing-cycleset'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
testCycleSetGrammarA
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
	self grammarA do: [ :each | self assert: each cycleSet isEmpty ]
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
testCycleSetGrammarB
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
	self grammarB do: [ :each | self assert: each cycleSet isEmpty ]
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
testCycleSetGrammarC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
	| grammar cycleSet |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
	grammar := self grammarC.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
	cycleSet := grammar cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
	self assert: (cycleSet size = 2).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
	self assert: (cycleSet includes: grammar)
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
testCycleSetGrammarD
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
	| grammar cycleSet |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
	grammar := self grammarD.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
	cycleSet := (grammar at: #S) cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
	self assert: (cycleSet size = 4).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
	self assert: (cycleSet includes: (grammar at: #A)).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
	self assert: (cycleSet includes: (grammar at: #S)).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
	cycleSet := (grammar at: #A) cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
	self assert: (cycleSet size = 4).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
	self assert: (cycleSet includes: (grammar at: #A)).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
	self assert: (cycleSet includes: (grammar at: #S)).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
	cycleSet := (grammar at: #B) cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
	self assert: (cycleSet size = 2).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
	self assert: (cycleSet includes: (grammar at: #B))
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
testCycleSetGrammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
	| grammar cycleSet |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
	grammar := self grammarE.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
	cycleSet := grammar cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
	self assert: (cycleSet size = 1).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
	self assert: (cycleSet includes: grammar)
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
testCycleSetInChoice
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
	| parser cycleSet |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
	parser := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
	parser def: parser / $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
	cycleSet := parser cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
	self assert: (cycleSet size = 1).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
	self assert: (cycleSet includes: parser).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
	parser := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
	parser def: $a asParser / parser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
	cycleSet := parser cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
	self assert: (cycleSet size = 1).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
	self assert: (cycleSet includes: parser).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
testCycleSetInSequence
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
	| parser cycleSet |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
	parser := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
	parser def: parser , $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
	cycleSet := parser cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
	self assert: (cycleSet size = 1).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
	self assert: (cycleSet includes: parser).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
	parser := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
	parser def: nil asParser , parser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
	cycleSet := parser cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
	self assert: (cycleSet size = 1).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
	self assert: (cycleSet includes: parser).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
	parser := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
	parser def: $a asParser , parser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
	cycleSet := parser cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
	self assert: cycleSet isEmpty
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
!PPAnalyzerTest methodsFor:'testing-firstset'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
testFirstSetExpression
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
	grammar := PPArithmeticParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
	self assert: grammar start firstSet includes: '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
	self assert: grammar addition firstSet includes: '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
	self assert: grammar factors firstSet includes:  '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
	self assert: grammar multiplication firstSet includes:  '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
	self assert: grammar number firstSet includes: '-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
	self assert: grammar parentheses firstSet includes: '(' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
	self assert: grammar power firstSet includes: '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
	self assert: grammar primary firstSet includes: '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
	self assert: grammar terms firstSet includes: '(-0123456789' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
testFirstSetGrammarA
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
	grammar := self grammarA.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
	self assert: (grammar at: #a) firstSet includes: 'a' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
	self assert: (grammar at: #b) firstSet includes: 'b' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
	self assert: (grammar at: #c) firstSet includes: 'c' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
	self assert: (grammar at: #d) firstSet includes: 'd' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
	self assert: (grammar at: #e) firstSet includes: '' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
	self assert: (grammar at: #S) firstSet includes: 'abc' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
	self assert: (grammar at: #A) firstSet includes: 'ab' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
	self assert: (grammar at: #B) firstSet includes: 'b' epsilon: true
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
testFirstSetGrammarB
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
	grammar := self grammarB.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
	self assert: (grammar at: #E) firstSet includes: '(i' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
	self assert: (grammar at: #Ep) firstSet includes: '+' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
	self assert: (grammar at: #T) firstSet includes: '(i' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
	self assert: (grammar at: #Tp) firstSet includes: '*' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
	self assert: (grammar at: #F) firstSet includes: '(i' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
testFirstSetGrammarC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
	grammar := self grammarC.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
	self assert: grammar firstSet includes: '1' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
testFirstSetGrammarD
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
	grammar := self grammarD.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
	self assert: (grammar at: #S) firstSet includes: 'ab' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
	self assert: (grammar at: #A) firstSet includes: 'ab' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
	self assert: (grammar at: #B) firstSet includes: 'a' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
	self assert: (grammar at: #a) firstSet includes: 'a' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
	self assert: (grammar at: #b) firstSet includes: 'b' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
testFirstSetGrammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
	self assert: self grammarE firstSet includes: '' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
testFirstSetLambda
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
	grammar := PPLambdaParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
	self assert: grammar start firstSet includes: '(ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
	self assert: grammar abstraction firstSet includes: '\' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
	self assert: grammar application firstSet includes: '(' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
	self assert: grammar expression firstSet includes: '(ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
	self assert: grammar variable firstSet includes: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
!PPAnalyzerTest methodsFor:'testing-followset'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
testFollowSetExampleA
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
	| grammar followSets |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
	grammar := self grammarA.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
	followSets := (grammar at: #S) followSets.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
	self assert: (followSets at: (grammar at: #a)) includes: 'bc' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
	self assert: (followSets at: (grammar at: #b)) includes: 'bc' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
	self assert: (followSets at: (grammar at: #c)) includes: 'd' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
	self assert: (followSets at: (grammar at: #d)) includes: '' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
	self assert: (followSets at: (grammar at: #e)) includes: 'bc' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
	self assert: (followSets at: (grammar at: #S)) includes: '' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
	self assert: (followSets at: (grammar at: #A)) includes: 'bc' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
	self assert: (followSets at: (grammar at: #B)) includes: 'bc' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
testFollowSetExampleB
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
	| grammar followSets |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
	grammar := self grammarB.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
	followSets := (grammar at: #E) followSets.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
	self assert: (followSets at: (grammar at: #E)) includes: ')' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
	self assert: (followSets at: (grammar at: #Ep)) includes: ')' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
	self assert: (followSets at: (grammar at: #T)) includes: ')+' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
	self assert: (followSets at: (grammar at: #Tp)) includes: ')+' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
	self assert: (followSets at: (grammar at: #F)) includes: ')*+' epsilon: true
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
testFollowSetExampleC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
	self assert: self grammarC followSet includes: '+' epsilon: true
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
testFollowSetExampleD
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
	| grammar followSets |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
	grammar := self grammarD.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
	followSets := (grammar at: #S) followSets.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
	self assert: (followSets at: (grammar at: #S)) includes: 'a' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
	self assert: (followSets at: (grammar at: #A)) includes: 'ab' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
	self assert: (followSets at: (grammar at: #B)) includes: 'ab' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
	self assert: (followSets at: (grammar at: #a)) includes: 'ab' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
	self assert: (followSets at: (grammar at: #b)) includes: 'ab' epsilon: true
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
testFollowSetExampleE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
	self assert: self grammarE followSet includes: '' epsilon: true
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
!PPAnalyzerTest methodsFor:'testing-transform'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
testDelegateReplace
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
	| one other delegate |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
	one := $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
	other := $b asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
	delegate := one token.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
	self assert: delegate children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
	self deny: delegate children first == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
	delegate replace: other with: one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
	self assert: delegate children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
	self deny: delegate children first == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
	delegate replace: one with: other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
	self deny: delegate children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
	self assert: delegate children first == other
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
testListReplace
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
	| one other another list |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
	one := $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
	other := $b asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
	another := $c asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
	list := one , another , one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
	self assert: list children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
	self assert: list children second == another.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
	self assert: list children last == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
	list replace: other with: one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
	self assert: list children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
	self assert: list children second == another.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
	self assert: list children last == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
	list replace: one with: other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
	self assert: list children first == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
	self assert: list children second == another.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
	self assert: list children last == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
	list replace: another with: one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
	self assert: list children first == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
	self assert: list children second == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
	self assert: list children last == other
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
testRepetitionReplace
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
	| one two otherone othertwo repetition |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
	one := $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
	two := $b asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
	otherone := $1 asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
	othertwo := $2 asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
	repetition := one starLazy: two.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
	self assert: repetition children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
	self assert: repetition children second == two.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
	repetition replace: one with: otherone.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
	self assert: repetition children first == otherone.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
	self assert: repetition children second == two.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
	repetition replace: two with: othertwo.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
	self assert: repetition children first == otherone.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
	self assert: repetition children second == othertwo
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
testTransformIdentityGrammarC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
	| orig tran |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
	orig := self grammarC.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
	tran := orig transform: [ :each | each ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
	self deny: orig == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
	self deny: orig children first == tran children first.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
	self deny: orig children first children first == tran children first children first.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
	self deny: orig children first children last == tran children first children last.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
	self deny: orig children last == tran children last.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
	self assert: orig class == PPChoiceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
	self assert: orig children first class == PPSequenceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
	self assert: orig children first children first == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
	self assert: orig children first children last == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
	self assert: orig children last class == PPLiteralObjectParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
	self assert: tran class == PPChoiceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
	self assert: tran children first class == PPSequenceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
	self assert: tran children first children first == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
	self assert: tran children first children last == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
	self assert: tran children last class == PPLiteralObjectParser
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
testTransformIdentityGrammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
	| orig tran |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
	orig := self grammarE.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
	tran := orig transform: [ :each | each ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
	self deny: orig == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
	self deny: orig children first = tran children first.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
	self assert: orig class == PPDelegateParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
	self assert: orig children first == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
	self assert: tran class == PPDelegateParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
	self assert: tran children first == tran
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
testTransformWrapGrammarC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
	| orig tran |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
	orig := self grammarC.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
	tran := orig transform: [ :each | each memoized ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
	self assert: orig class == PPChoiceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
	self assert: orig children first class == PPSequenceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
	self assert: orig children first children first == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
	self assert: orig children first children last == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
	self assert: orig children last class == PPLiteralObjectParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
	self assert: tran class == PPMemoizedParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
	self assert: tran children first class == PPChoiceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
	self assert: tran children first children first class == PPMemoizedParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
	self assert: tran children first children first children first class == PPSequenceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
	self assert: tran children first children first children first children first == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
	self assert: tran children first children first children first children last == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
	self assert: tran children first children last class == PPMemoizedParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
	self assert: tran children first children last children first class == PPLiteralObjectParser
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
testTransformWrapGrammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
	| orig tran |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
	orig := self grammarE.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
	tran := orig transform: [ :each | each memoized ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
	self assert: orig class == PPDelegateParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
	self assert: orig children first == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
	self assert: tran class == PPMemoizedParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
	self assert: tran children first class == PPDelegateParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
	self assert: tran children first children first == tran
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
!PPAnalyzerTest methodsFor:'utilities'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
assert: aCollection includes: aString epsilon: aBoolean
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
	| parsers checker stream |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
	parsers := aCollection
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
		collect: [ :each | each end ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
	checker := [ :string |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
		parsers anySatisfy: [ :parser |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
			(parser parse: string asPetitStream)
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
				isPetitFailure not ] ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
	stream := WriteStream on: String new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
	32 to: 127 do: [ :index |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
		(checker value: (String with: (Character value: index)))
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
			ifTrue: [ stream nextPut: (Character value: index) ] ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
	self
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
		assert: stream contents = aString
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
		description: 'Expected ' , aString printString , ', but got ' , stream contents printString.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
	self
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
		assert: (checker value: '') = aBoolean
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
		description: 'Expected epsilon to ' , (aBoolean ifTrue: [ 'be' ] ifFalse: [ 'not be' ]) , '  included'
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
!PPAnalyzerTest class methodsFor:'documentation'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
version
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPAnalyzerTest.st,v 1.1 2014-03-04 15:42:53 cg Exp $'
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
version_CVS
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
    ^ '$Header: /cvs/stx/stx/goodies/petitparser/analyzer/tests/PPAnalyzerTest.st,v 1.1 2014-03-04 15:42:53 cg Exp $'
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526