162 self assert: first anySatisfy: [:e | (e isKindOf: PPCNotNode) and: [ e child literal = 'c' ]]. |
162 self assert: first anySatisfy: [:e | (e isKindOf: PPCNotNode) and: [ e child literal = 'c' ]]. |
163 self assert: first noneMatchesType: PPCNilNode. |
163 self assert: first noneMatchesType: PPCNilNode. |
164 ! |
164 ! |
165 |
165 |
166 testFirstNegate1 |
166 testFirstNegate1 |
167 configuration context options specialize: true. |
167 configuration removePass: PPCSpecializingVisitor. |
168 tree := self treeFrom: ('a' asParser negate, 'b' asParser). |
168 tree := self treeFrom: ('a' asParser negate, 'b' asParser). |
169 |
169 |
170 first := self first: tree. |
170 first := self first: tree. |
171 |
171 |
172 self assert: first size: 1. |
172 self assert: first size: 1. |
173 self assert: first anyMatchesType: PPCNotNode. |
173 self assert: first anyMatchesType: PPCNotNode. |
174 self assert: first anyOne child literal = 'a'. |
174 self assert: first anyOne child literal = 'a'. |
175 |
175 |
176 "Modified: / 28-08-2015 / 14:18:11 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
176 "Modified: / 04-09-2015 / 14:55:15 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
177 ! |
177 ! |
178 |
178 |
179 testFirstNot |
179 testFirstNot |
180 tree := self treeFrom: ('a' asParser not star, 'b' asParser). |
180 tree := self treeFrom: ('a' asParser not star, 'b' asParser). |
181 |
181 |
185 self assert: first anyMatchesType: PPCNotNode. |
185 self assert: first anyMatchesType: PPCNotNode. |
186 self assert: first anyMatchesType: PPCLiteralNode. |
186 self assert: first anyMatchesType: PPCLiteralNode. |
187 ! |
187 ! |
188 |
188 |
189 testFirstNot2 |
189 testFirstNot2 |
190 configuration context options specialize: true. |
190 configuration removePass: PPCSpecializingVisitor. |
191 tree := self treeFrom: (#letter asParser not star, #letter asParser). |
191 tree := self treeFrom: (#letter asParser not star, #letter asParser). |
192 |
192 |
193 first := self first: tree. |
193 first := self first: tree. |
194 |
194 |
195 self assert: first size: 2. |
195 self assert: first size: 2. |
196 self assert: first anyMatchesType: PPCNotNode. |
196 self assert: first anyMatchesType: PPCNotNode. |
197 self assert: first anyMatchesType: PPCPredicateNode. |
197 self assert: first anyMatchesType: PPCPredicateNode. |
198 |
198 |
199 "Modified: / 28-08-2015 / 14:18:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
199 "Modified: / 04-09-2015 / 14:55:21 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
200 ! |
200 ! |
201 |
201 |
202 testFirstNot4 |
202 testFirstNot4 |
203 tree := self treeFrom: (#letter asParser negate plus, #letter asParser). |
203 tree := self treeFrom: (#letter asParser negate plus, #letter asParser). |
204 |
204 |
327 self assert: first anySatisfy: [ :e | e literal = 'b' ]. |
327 self assert: first anySatisfy: [ :e | e literal = 'b' ]. |
328 self assert: first noneMatchesType: PPCNilNode. |
328 self assert: first noneMatchesType: PPCNilNode. |
329 ! |
329 ! |
330 |
330 |
331 testFirstSequence6 |
331 testFirstSequence6 |
332 configuration context options specialize: true. |
332 configuration removePass: PPCSpecializingVisitor. |
333 tree := self treeFrom: #space asParser star, 'a' asParser. |
333 tree := self treeFrom: #space asParser star, 'a' asParser. |
334 |
334 |
335 tree firstFollowCache: nil. |
335 tree firstFollowCache: nil. |
336 self should: [ self first: tree. ] raise: Exception. |
336 self should: [ self first: tree. ] raise: Exception. |
337 |
337 |
338 "Modified: / 28-08-2015 / 14:18:34 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
338 "Modified: / 04-09-2015 / 14:55:25 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
339 ! |
339 ! |
340 |
340 |
341 testFirstSequence7 |
341 testFirstSequence7 |
342 tree := self treeFrom: #space asParser star, 'a' asParser. |
342 tree := self treeFrom: #space asParser star, 'a' asParser. |
343 |
343 |
357 self assert: first anyMatchesType: PPCMessagePredicateNode. |
357 self assert: first anyMatchesType: PPCMessagePredicateNode. |
358 self assert: first anyMatchesType: PPCSentinelNode. |
358 self assert: first anyMatchesType: PPCSentinelNode. |
359 ! |
359 ! |
360 |
360 |
361 testFirstStarMessagePredicate2 |
361 testFirstStarMessagePredicate2 |
362 configuration context options specialize: true. |
|
363 tree := self treeFrom: #space asParser star. |
362 tree := self treeFrom: #space asParser star. |
364 |
363 |
365 first := self first: tree. |
364 first := self first: tree. |
366 |
365 |
367 self assert: first size: 2. |
366 self assert: first size: 2. |
368 self assert: first anyMatchesType: PPCMessagePredicateNode. |
367 self assert: first anyMatchesType: PPCMessagePredicateNode. |
369 self assert: first anyMatchesType: PPCSentinelNode. |
368 self assert: first anyMatchesType: PPCSentinelNode. |
370 |
369 |
371 "Modified: / 28-08-2015 / 14:18:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
370 "Modified: / 04-09-2015 / 15:00:54 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
372 ! |
371 ! |
373 |
372 |
374 testFirstTerminal |
373 testFirstTerminal |
375 configuration context options specialize: true. |
|
376 tree := self treeFrom: 'a' asParser not. |
374 tree := self treeFrom: 'a' asParser not. |
377 |
375 |
378 first := self first: tree. |
376 first := self first: tree. |
379 |
377 |
380 self assert: first size: 1. |
378 self assert: first size: 1. |
381 self assert: (self first: tree) anyMatchesType: PPCNotLiteralNode. |
379 self assert: (self first: tree) anyMatchesType: PPCNotLiteralNode. |
382 |
380 |
383 "Modified: / 28-08-2015 / 14:18:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
381 "Modified: / 04-09-2015 / 15:00:26 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
384 ! |
382 ! |
385 |
383 |
386 testFirstTerminal2 |
384 testFirstTerminal2 |
387 tree := self treeFrom: 'a' asParser and. |
385 tree := self treeFrom: 'a' asParser and. |
388 |
386 |
667 self assert: followSet anyMatchesType: PPCNilNode |
665 self assert: followSet anyMatchesType: PPCNilNode |
668 ! |
666 ! |
669 |
667 |
670 testFollowTrimmingToken |
668 testFollowTrimmingToken |
671 | token1 token2 | |
669 | token1 token2 | |
672 configuration context options specialize: false. |
670 configuration removePass: PPCSpecializingVisitor. |
673 token1 := #letter asParser plus trimmingToken name: 'token1'; yourself. |
671 token1 := #letter asParser plus trimmingToken name: 'token1'; yourself. |
674 token2 := #letter asParser plus trimmingToken name: 'token2'; yourself. |
672 token2 := #letter asParser plus trimmingToken name: 'token2'; yourself. |
675 |
673 |
676 |
674 |
677 tree := self treeFrom: token1, token2. |
675 tree := self treeFrom: token1, token2. |
680 suchThat: [:e | e isFirstSetTerminal or: [e isKindOf: PPCTrimmingTokenNode ]]. |
678 suchThat: [:e | e isFirstSetTerminal or: [e isKindOf: PPCTrimmingTokenNode ]]. |
681 |
679 |
682 self assert: followSet size: 1. |
680 self assert: followSet size: 1. |
683 self assert: followSet anyMatchesType: PPCTrimmingTokenNode. |
681 self assert: followSet anyMatchesType: PPCTrimmingTokenNode. |
684 |
682 |
685 "Modified: / 28-08-2015 / 14:18:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
683 "Modified: / 04-09-2015 / 14:55:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
686 ! ! |
684 ! ! |
687 |
685 |
688 !PPCNodeFirstFollowNextTests class methodsFor:'documentation'! |
686 !PPCNodeFirstFollowNextTests class methodsFor:'documentation'! |
689 |
687 |
690 version_HG |
688 version_HG |