compiler/tests/PPCNodeFirstFollowNextTests.st
changeset 535 a8feb0f47574
parent 534 a949c4fe44df
child 537 fb212e14d1f4
equal deleted inserted replaced
534:a949c4fe44df 535:a8feb0f47574
   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