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