analyzer/tests/PPAnalyzerTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sun, 05 Oct 2014 00:05:20 +0100
changeset 380 8fe3cb4e607f
parent 325 cd6b25955d98
child 402 1d7503124bc8
permissions -rw-r--r--
Remove Pharoisms to make code more portable and running on Smalltalk/X * Use ANSI `(Character codePoint: 13)` (`10`) instead of `Character cr` (`lf`), This is more portable and does not depend on dialects interpretation of `#cr` - Smalltalk/X convert it according to platform line end convention (UNIX/Windows/Mac) * Do not assume exact value of a printstring in tests, i.e., instead of `msg includesSubstring: '$a' code `msg includesSubstring: $a printString. This way, the test is independent on the printString value, which may differ among dialects. Q: Is printString value of String and/or Character defined in ANSI? * In assestions, instead of `#equals:` use plain old `#=`, which is more portable. * Removed Character>>- used to create range parser. Use portable `(Interval from: $a to: $z) asParser` instead of just `$a - $z`. Do not use ($a to: $z) asParser as in Pharo, Character>>to: does not create an Interval but an Array (sigh).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
259
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
     1
"{ Encoding: utf8 }"
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
     2
208
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ Package: 'stx:goodies/petitparser/analyzer/tests' }"
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
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
259
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
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.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	^ grammar
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
259
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
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."
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    73
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    74
        | grammar |
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    75
        grammar := Dictionary new.
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    76
        #(S A a B b)                    do: [ :each | grammar at: each put: (PPUnresolvedParser named: each) ].
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    77
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    78
        (grammar at: #a)                def: $a asParser.
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    79
        (grammar at: #b)                def: $b asParser.
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    80
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    81
        (grammar at: #S)                def: (grammar at: #A) , (grammar at: #B) / (grammar at: #a).
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    82
        (grammar at: #A)                def: (grammar at: #S) , (grammar at: #B) / (grammar at: #b).
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    83
        (grammar at: #B)                def: (grammar at: #B) , (grammar at: #A) / (grammar at: #a).
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
diff changeset
    84
0f1afe248885 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 208
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 |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
	p1 := (#digit asParser name: 'a').
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.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
	self assert: p1 allNamedParsers size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
	self assert: p1 allNamedParsers first name = 'a'.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
	self assert: p2 allNamedParsers size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
	self assert: p2 allNamedParsers first name = 'b'.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
	self assert: p3 allNamedParsers size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
	self assert: p3 allNamedParsers first name = 'c'
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.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
	self assert: p1 allParsers size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
	self assert: p2 allParsers size = 2.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
	self assert: p3 allParsers size = 3
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 |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
	p1 := (#digit asParser name: 'a').
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
	p2 := (#digit asParser star name: 'b').
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.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
	self assert: p2 innerChildren size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
	self assert: (p2 innerChildren allSatisfy: [ :each | each name isNil ]).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
	self assert: p3 innerChildren size = 2.
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 |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
	p1 := (#digit asParser name: 'a').
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.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
	self assert: p2 namedChildren size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
	self assert: p2 namedChildren first name = 'b'.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
	self assert: p3 namedChildren size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
	self assert: p3 namedChildren first name = 'c'.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
	self assert: p4 namedChildren size = 1.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
	self assert: p4 namedChildren first name = 'd'
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.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
	self assert: (cycleSet size = 2).
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
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
	cycleSet := (grammar at: #S) cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
	self assert: (cycleSet size = 4).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
	self assert: (cycleSet includes: (grammar at: #A)).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
	self assert: (cycleSet includes: (grammar at: #S)).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
	cycleSet := (grammar at: #A) cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
	self assert: (cycleSet size = 4).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
	self assert: (cycleSet includes: (grammar at: #A)).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
	self assert: (cycleSet includes: (grammar at: #S)).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
	cycleSet := (grammar at: #B) cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
	self assert: (cycleSet size = 2).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
	self assert: (cycleSet includes: (grammar at: #B))
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
testCycleSetGrammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
	| grammar cycleSet |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
	grammar := self grammarE.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
	cycleSet := grammar 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: grammar)
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
testCycleSetInChoice
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: $a 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
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
testCycleSetInSequence
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
	| parser cycleSet |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
	parser := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
	parser def: parser , $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
	cycleSet := parser cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
	self assert: (cycleSet size = 1).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
	self assert: (cycleSet includes: parser).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
	
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: nil 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 size = 1).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
	self assert: (cycleSet includes: parser).
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
	parser := PPUnresolvedParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
	parser def: $a asParser , parser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
	cycleSet := parser cycleSet.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
	self assert: cycleSet isEmpty
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
!PPAnalyzerTest methodsFor:'testing-firstset'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
testFirstSetExpression
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
	grammar := PPArithmeticParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
	self assert: grammar start firstSet includes: '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
	self assert: grammar addition firstSet includes: '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
	self assert: grammar factors firstSet includes:  '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
	self assert: grammar multiplication firstSet includes:  '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
	self assert: grammar number firstSet includes: '-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
	self assert: grammar parentheses firstSet includes: '(' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
	self assert: grammar power firstSet includes: '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
	self assert: grammar primary firstSet includes: '(-0123456789' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
	self assert: grammar terms firstSet includes: '(-0123456789' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
testFirstSetGrammarA
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
	grammar := self grammarA.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
	self assert: (grammar at: #a) firstSet includes: 'a' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
	self assert: (grammar at: #b) firstSet includes: 'b' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
	self assert: (grammar at: #c) firstSet includes: 'c' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
	self assert: (grammar at: #d) firstSet includes: 'd' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
	self assert: (grammar at: #e) firstSet includes: '' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
	self assert: (grammar at: #S) firstSet includes: 'abc' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
	self assert: (grammar at: #A) firstSet includes: 'ab' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
	self assert: (grammar at: #B) firstSet includes: 'b' epsilon: true
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
testFirstSetGrammarB
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
	grammar := self grammarB.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
	self assert: (grammar at: #E) firstSet includes: '(i' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
	self assert: (grammar at: #Ep) firstSet includes: '+' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
	self assert: (grammar at: #T) firstSet includes: '(i' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
	self assert: (grammar at: #Tp) firstSet includes: '*' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
	self assert: (grammar at: #F) firstSet includes: '(i' 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
testFirstSetGrammarC
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 grammarC.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
	self assert: grammar firstSet includes: '1' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
testFirstSetGrammarD
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
	grammar := self grammarD.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
	self assert: (grammar at: #S) firstSet includes: 'ab' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
	self assert: (grammar at: #A) firstSet includes: 'ab' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
	self assert: (grammar at: #B) firstSet includes: 'a' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
	self assert: (grammar at: #a) firstSet includes: 'a' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
	self assert: (grammar at: #b) firstSet includes: 'b' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
testFirstSetGrammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
	self assert: self grammarE firstSet includes: '' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
testFirstSetLambda
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
	| grammar |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
	grammar := PPLambdaParser new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
	self assert: grammar start firstSet includes: '(ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
	self assert: grammar abstraction firstSet includes: '\' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
	self assert: grammar application firstSet includes: '(' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
	self assert: grammar expression firstSet includes: '(ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
	self assert: grammar variable firstSet includes: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' epsilon: false
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
!PPAnalyzerTest methodsFor:'testing-followset'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
testFollowSetExampleA
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
	| grammar followSets |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
	grammar := self grammarA.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
	followSets := (grammar at: #S) followSets.
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
	self assert: (followSets at: (grammar at: #c)) includes: 'd' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
	self assert: (followSets at: (grammar at: #d)) includes: '' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
	self assert: (followSets at: (grammar at: #e)) includes: 'bc' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
	self assert: (followSets at: (grammar at: #S)) includes: '' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
	self assert: (followSets at: (grammar at: #A)) includes: 'bc' epsilon: false.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
	self assert: (followSets at: (grammar at: #B)) includes: 'bc' epsilon: false
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
testFollowSetExampleB
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 grammarB.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
	followSets := (grammar at: #E) followSets.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
	self assert: (followSets at: (grammar at: #E)) includes: ')' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
	self assert: (followSets at: (grammar at: #Ep)) includes: ')' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
	self assert: (followSets at: (grammar at: #T)) includes: ')+' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
	self assert: (followSets at: (grammar at: #Tp)) includes: ')+' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
	self assert: (followSets at: (grammar at: #F)) includes: ')*+' 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
testFollowSetExampleC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
	self assert: self grammarC 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
testFollowSetExampleD
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
	| grammar followSets |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
	grammar := self grammarD.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
	followSets := (grammar at: #S) followSets.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
	self assert: (followSets at: (grammar at: #S)) includes: 'a' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
	self assert: (followSets at: (grammar at: #A)) includes: 'ab' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
	self assert: (followSets at: (grammar at: #B)) includes: 'ab' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
	self assert: (followSets at: (grammar at: #a)) includes: 'ab' epsilon: true.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
	self assert: (followSets at: (grammar at: #b)) includes: 'ab' epsilon: true
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
testFollowSetExampleE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
	self assert: self grammarE followSet includes: '' epsilon: true
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
!PPAnalyzerTest methodsFor:'testing-transform'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
testDelegateReplace
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
	| one other delegate |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
	one := $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
	other := $b asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
	delegate := one token.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
	self assert: delegate children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
	self deny: delegate children first == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
	delegate replace: other with: one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
	self assert: delegate children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
	self deny: delegate children first == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
	delegate replace: one with: other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
	self deny: delegate children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
	self assert: delegate children first == other
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
testListReplace
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
	| one other another list |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
	one := $a asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
	other := $b asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
	another := $c asParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
	list := one , another , one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
	self assert: list children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
	self assert: list children second == another.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
	self assert: list children last == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
	list replace: other with: one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
	self assert: list children first == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
	self assert: list children second == another.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
	self assert: list children last == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
	list replace: one with: other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
	self assert: list children first == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
	self assert: list children second == another.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
	self assert: list children last == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
	list replace: another with: one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
	self assert: list children first == other.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
	self assert: list children second == one.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
	self assert: list children last == other
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
testRepetitionReplace
263
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   420
        | one two otherone othertwo repetition |
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   421
        one := $a asParser.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   422
        two := $b asParser.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   423
        otherone := $1 asParser.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   424
        othertwo := $2 asParser.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   425
        
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   426
        repetition := one starLazy: two.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   427
        self assert: repetition children first == one.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   428
        self assert: repetition children second == two.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   429
        
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   430
        repetition replace: one with: otherone.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   431
        self assert: repetition children first == otherone.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   432
        self assert: repetition children second == two.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   433
        
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   434
        repetition replace: two with: othertwo.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   435
        self assert: repetition children first == otherone.
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   436
        self assert: repetition children second == othertwo
208
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
testTransformIdentityGrammarC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
	| orig tran |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
	orig := self grammarC.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
	tran := orig transform: [ :each | each ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
	self deny: orig == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
	self deny: orig children first == tran children first.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
	self deny: orig children first children first == tran children first children first.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
	self deny: orig children first children last == tran children first children last.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
	self deny: orig children last == tran children last.
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: orig class == PPChoiceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
	self assert: orig children first class == PPSequenceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
	self assert: orig children first children first == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
	self assert: orig children first children last == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
	self assert: orig 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
	self assert: tran class == PPChoiceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
	self assert: tran children first class == PPSequenceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
	self assert: tran children first children first == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
	self assert: tran children first children last == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
	self assert: tran children last class == PPLiteralObjectParser
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
testTransformIdentityGrammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
	| orig tran |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
	orig := self grammarE.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
	tran := orig transform: [ :each | each ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
	self deny: orig == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
	self deny: orig children first = tran children first.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
	self assert: orig class == PPDelegateParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
	self assert: orig children first == orig.
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 == PPDelegateParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
	self assert: tran children first == tran
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
testTransformWrapGrammarC
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
	| orig tran |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
	orig := self grammarC.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
	tran := orig transform: [ :each | each memoized ].
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: orig class == PPChoiceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
	self assert: orig children first class == PPSequenceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
	self assert: orig children first children first == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
	self assert: orig children first children last == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
	self assert: orig children last class == PPLiteralObjectParser.
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: tran class == PPMemoizedParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   488
	self assert: tran children first class == PPChoiceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
	self assert: tran children first children first class == PPMemoizedParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
	self assert: tran children first children first children first class == PPSequenceParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
	self assert: tran children first children first children first children first == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
	self assert: tran children first children first children first children last == tran.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
	self assert: tran children first children last class == PPMemoizedParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
	self assert: tran children first children last children first class == PPLiteralObjectParser
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
testTransformWrapGrammarE
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
	| orig tran |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
	orig := self grammarE.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
	tran := orig transform: [ :each | each memoized ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
	self assert: orig class == PPDelegateParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
	self assert: orig children first == orig.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
	
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
	self assert: tran class == PPMemoizedParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
	self assert: tran children first class == PPDelegateParser.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
	self assert: tran children first children first == tran
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
!PPAnalyzerTest methodsFor:'utilities'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
assert: aCollection includes: aString epsilon: aBoolean
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
	| parsers checker stream |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
	parsers := aCollection
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
		collect: [ :each | each end ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
	checker := [ :string |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
		parsers anySatisfy: [ :parser |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
			(parser parse: string asPetitStream)
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
				isPetitFailure not ] ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
	stream := WriteStream on: String new.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
	32 to: 127 do: [ :index |
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
		(checker value: (String with: (Character value: index)))
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
			ifTrue: [ stream nextPut: (Character value: index) ] ].
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
	self
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
		assert: stream contents = aString
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
		description: 'Expected ' , aString printString , ', but got ' , stream contents printString.
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
	self
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
		assert: (checker value: '') = aBoolean
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
		description: 'Expected epsilon to ' , (aBoolean ifTrue: [ 'be' ] ifFalse: [ 'not be' ]) , '  included'
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
!PPAnalyzerTest class methodsFor:'documentation'!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
version
325
cd6b25955d98 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 263
diff changeset
   535
    ^ '$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
   536
!
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
version_CVS
325
cd6b25955d98 class: PPAnalyzerTest
Claus Gittinger <cg@exept.de>
parents: 263
diff changeset
   539
    ^ '$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
   540
!
8fe3cb4e607f Remove Pharoisms to make code more portable and running on Smalltalk/X
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 325
diff changeset
   541
8fe3cb4e607f Remove Pharoisms to make code more portable and running on Smalltalk/X
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 325
diff changeset
   542
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
   543
8fe3cb4e607f Remove Pharoisms to make code more portable and running on Smalltalk/X
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 325
diff changeset
   544
    ^ '$Changeset: <not expanded> $'
208
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
! !
42c859858c78 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546