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