1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }" |
1 "{ Package: 'stx:goodies/petitparser/compiler/tests' }" |
2 |
2 |
3 "{ NameSpace: Smalltalk }" |
3 "{ NameSpace: Smalltalk }" |
4 |
4 |
5 PPAbstractParserTest subclass:#PPCTokenizingCodeGeneratorTest |
5 PPAbstractParserTest subclass:#PPCTokenizingCodeGeneratorTest |
6 instanceVariableNames:'visitor node result compiler parser context arguments tokenizer' |
6 instanceVariableNames:'visitor node result compiler parser context arguments tokenizer |
|
7 whitespace' |
7 classVariableNames:'' |
8 classVariableNames:'' |
8 poolDictionaries:'' |
9 poolDictionaries:'' |
9 category:'PetitCompiler-Tests-Visitors' |
10 category:'PetitCompiler-Tests-Visitors' |
10 ! |
11 ! |
11 |
12 |
131 ! ! |
136 ! ! |
132 |
137 |
133 !PPCTokenizingCodeGeneratorTest methodsFor:'testing'! |
138 !PPCTokenizingCodeGeneratorTest methodsFor:'testing'! |
134 |
139 |
135 testSimpleChoice1 |
140 testSimpleChoice1 |
136 | token1 token2 token1Consume token2Consume tokenizerNode eof choiceNode | |
141 | token1 token2 token1Consume token2Consume tokenizerNode eof choiceNode wsNode | |
137 |
142 |
138 token1 := (self tokenNodeForLiteral: 'foo') yourself. |
143 token1 := (self tokenNodeForLiteral: 'foo') yourself. |
139 token2 := (self tokenNodeForLiteral: 'bar') yourself. |
144 token2 := (self tokenNodeForLiteral: 'bar') yourself. |
140 eof := (self tokenNodeForEOF) yourself. |
145 eof := (self tokenNodeForEOF) yourself. |
141 |
146 |
152 |
157 |
153 tokenizerNode := PPCTokenChoiceNode new |
158 tokenizerNode := PPCTokenChoiceNode new |
154 children: { token1 . token2 . eof }; |
159 children: { token1 . token2 . eof }; |
155 name: 'nextToken'; |
160 name: 'nextToken'; |
156 yourself. |
161 yourself. |
157 |
162 |
|
163 wsNode := PPCTokenStarSeparatorNode new |
|
164 name: 'consumeWhitespace'; |
|
165 yourself. |
|
166 |
|
167 self compileWs: wsNode. |
158 self compileTokenizer: tokenizerNode. |
168 self compileTokenizer: tokenizerNode. |
159 self compileTree: choiceNode. |
169 self compileTree: choiceNode. |
160 |
170 |
161 self assert: parser recognizesToken: 'foo'. |
|
162 self assert: parser recognizesToken: 'bar'. |
|
163 self assert: parser recognizesToken: ''. |
|
164 |
|
165 parser := compiler compiledParser new. |
171 parser := compiler compiledParser new. |
166 self assert: parser parse: 'foo'. |
172 self assert: parser parse: 'foo'. |
167 self assert: result inputValue = 'foo'. |
173 self assert: result inputValue = 'foo'. |
168 |
174 |
169 parser := compiler compiledParser new. |
175 parser := compiler compiledParser new. |
173 parser := compiler compiledParser new. |
179 parser := compiler compiledParser new. |
174 self assert: parser fail: 'baz'. |
180 self assert: parser fail: 'baz'. |
175 ! |
181 ! |
176 |
182 |
177 testTokenizingParserNode |
183 testTokenizingParserNode |
178 | tokenNode tokenizerNode consumeNode eof | |
184 | tokenNode tokenizerNode consumeNode eof wsNode | |
179 tokenNode := (self tokenNodeForLiteral: 'bar') yourself. |
185 tokenNode := (self tokenNodeForLiteral: 'bar') yourself. |
180 eof := (self tokenNodeForEOF) yourself. |
186 eof := (self tokenNodeForEOF) yourself. |
181 |
187 |
182 tokenizerNode := PPCTokenChoiceNode new |
188 tokenizerNode := PPCTokenChoiceNode new |
183 children: { tokenNode . eof }; |
189 children: { tokenNode . eof }; |
184 name: 'nextToken'; |
190 name: 'nextToken'; |
185 yourself. |
191 yourself. |
186 consumeNode := PPCTokenConsumeNode new |
192 consumeNode := PPCTokenConsumeNode new |
187 child: tokenNode; |
193 child: tokenNode; |
188 yourself. |
194 yourself. |
|
195 wsNode := PPCTokenStarSeparatorNode new |
|
196 name: 'consumeWhitespace'; |
|
197 yourself. |
|
198 |
189 node := PPCTokenizingParserNode new |
199 node := PPCTokenizingParserNode new |
190 parser: consumeNode; |
200 parser: consumeNode; |
191 tokenizer: tokenizerNode; |
201 tokenizer: tokenizerNode; |
|
202 whitespace: wsNode; |
192 yourself. |
203 yourself. |
193 |
204 |
194 |
205 |
195 self compileTree: node. |
206 self compileTree: node. |
196 |
|
197 self assert: parser recognizesToken: 'bar'. |
|
198 self assert: parser recognizesToken: ''. |
|
199 self assert: parser rejectsToken: 'foo'. |
|
200 |
207 |
201 parser := compiler compiledParser new. |
208 parser := compiler compiledParser new. |
202 self assert: parser parse: 'bar'. |
209 self assert: parser parse: 'bar'. |
203 self assert: result inputValue = 'bar'. |
210 self assert: result inputValue = 'bar'. |
204 |
211 |
205 parser := compiler compiledParser new. |
212 parser := compiler compiledParser new. |
206 self assert: parser fail: 'foo'. |
213 self assert: parser fail: 'foo'. |
207 ! |
214 ! |
208 |
215 |
209 testTrimmingToken1 |
216 testTrimmingToken1 |
210 | token tokenConsume tokenizerNode eof | |
217 | token tokenConsume tokenizerNode eof wsNode | |
211 |
218 |
212 token := self trimmingTokenNode: (self literalNode: 'foo'). |
219 token := self trimmingTokenNode: (self literalNode: 'foo'). |
213 eof := (self tokenNodeForEOF) yourself. |
220 eof := (self tokenNodeForEOF) yourself. |
214 |
221 |
215 tokenConsume := PPCTokenConsumeNode new |
222 tokenConsume := PPCTokenConsumeNode new |
219 tokenizerNode := PPCTokenChoiceNode new |
226 tokenizerNode := PPCTokenChoiceNode new |
220 children: { token . eof }; |
227 children: { token . eof }; |
221 name: 'nextToken'; |
228 name: 'nextToken'; |
222 yourself. |
229 yourself. |
223 |
230 |
|
231 wsNode := PPCTokenStarSeparatorNode new |
|
232 name: 'consumeWhitespace'; |
|
233 yourself. |
|
234 |
|
235 self compileWs: wsNode. |
224 self compileTokenizer: tokenizerNode. |
236 self compileTokenizer: tokenizerNode. |
225 self compileTree: tokenConsume. |
237 self compileTree: tokenConsume. |
226 |
238 |
227 self assert: parser recognizesToken: 'foo'. |
|
228 self assert: parser recognizesToken: ' foo'. |
|
229 self assert: parser recognizesToken: ' '. |
|
230 self assert: parser recognizesToken: ''. |
|
231 |
239 |
232 parser := compiler compiledParser new. |
240 parser := compiler compiledParser new. |
233 self assert: parser parse: ' foo'. |
241 self assert: parser parse: ' foo'. |
234 self assert: result inputValue = 'foo'. |
242 self assert: result inputValue = 'foo'. |
235 |
243 |
|
244 |
|
245 parser := compiler compiledParser new. |
|
246 self assert: parser parse: ' foo '. |
|
247 self assert: result inputValue = 'foo'. |
|
248 |
|
249 |
236 parser := compiler compiledParser new. |
250 parser := compiler compiledParser new. |
237 self assert: parser fail: 'baz'. |
251 self assert: parser fail: 'baz'. |
238 ! ! |
252 ! ! |
239 |
253 |