compiler/tests/PPCNodeFirstFollowNextTests.st
changeset 534 a949c4fe44df
parent 529 439c4057517f
child 535 a8feb0f47574
equal deleted inserted replaced
533:666372dbe307 534:a949c4fe44df
    23 
    23 
    24 !PPCNodeFirstFollowNextTests methodsFor:'setup'!
    24 !PPCNodeFirstFollowNextTests methodsFor:'setup'!
    25 
    25 
    26 setUp
    26 setUp
    27     configuration := PPCConfiguration default.
    27     configuration := PPCConfiguration default.
    28     configuration options generate: false.
    28     configuration context options generate: false.
       
    29 
       
    30     "Modified: / 28-08-2015 / 14:17:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    29 ! !
    31 ! !
    30 
    32 
    31 !PPCNodeFirstFollowNextTests methodsFor:'support'!
    33 !PPCNodeFirstFollowNextTests methodsFor:'support'!
    32 
    34 
    33 assert: set anyMatchesType: whatever
    35 assert: set anyMatchesType: whatever
   160     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' ]].
   161     self assert: first noneMatchesType: PPCNilNode.
   163     self assert: first noneMatchesType: PPCNilNode.
   162 !
   164 !
   163 
   165 
   164 testFirstNegate1
   166 testFirstNegate1
   165     configuration options specialize: true.
   167     configuration context options specialize: true.
   166     tree := self treeFrom: ('a' asParser negate, 'b' asParser).
   168     tree := self treeFrom: ('a' asParser negate, 'b' asParser).
   167     
   169     
   168     first := self first: tree.
   170     first := self first: tree.
   169 
   171 
   170     self assert: first size: 1.
   172     self assert: first size: 1.
   171     self assert: first anyMatchesType: PPCNotNode.
   173     self assert: first anyMatchesType: PPCNotNode.
   172     self assert: first anyOne child literal = 'a'.
   174     self assert: first anyOne child literal = 'a'.
       
   175 
       
   176     "Modified: / 28-08-2015 / 14:18:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   173 !
   177 !
   174 
   178 
   175 testFirstNot
   179 testFirstNot
   176     tree := self treeFrom: ('a' asParser not star, 'b' asParser).
   180     tree := self treeFrom: ('a' asParser not star, 'b' asParser).
   177     
   181     
   181     self assert: first anyMatchesType: PPCNotNode.
   185     self assert: first anyMatchesType: PPCNotNode.
   182     self assert: first anyMatchesType: PPCLiteralNode.
   186     self assert: first anyMatchesType: PPCLiteralNode.
   183 !
   187 !
   184 
   188 
   185 testFirstNot2
   189 testFirstNot2
   186     configuration options specialize: true.
   190     configuration context options specialize: true.
   187     tree := self treeFrom: (#letter asParser not star, #letter asParser).
   191     tree := self treeFrom: (#letter asParser not star, #letter asParser).
   188     
   192     
   189     first := self first: tree.
   193     first := self first: tree.
   190         
   194         
   191     self assert: first size: 2.
   195     self assert: first size: 2.
   192     self assert: first anyMatchesType: PPCNotNode.
   196     self assert: first anyMatchesType: PPCNotNode.
   193     self assert: first anyMatchesType: PPCPredicateNode.
   197     self assert: first anyMatchesType: PPCPredicateNode.
       
   198 
       
   199     "Modified: / 28-08-2015 / 14:18:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   194 !
   200 !
   195 
   201 
   196 testFirstNot4
   202 testFirstNot4
   197     tree := self treeFrom: (#letter asParser negate plus, #letter asParser).
   203     tree := self treeFrom: (#letter asParser negate plus, #letter asParser).
   198     
   204     
   321     self assert: first anySatisfy: [ :e | e literal = 'b' ].
   327     self assert: first anySatisfy: [ :e | e literal = 'b' ].
   322     self assert: first noneMatchesType: PPCNilNode.
   328     self assert: first noneMatchesType: PPCNilNode.
   323 !
   329 !
   324 
   330 
   325 testFirstSequence6
   331 testFirstSequence6
   326     configuration options specialize: true.
   332     configuration context options specialize: true.
   327     tree := self treeFrom: #space asParser star, 'a' asParser.
   333     tree := self treeFrom: #space asParser star, 'a' asParser.
   328     
   334     
   329     tree firstFollowCache: nil.
   335     tree firstFollowCache: nil.
   330     self should: [ self first: tree. ] raise: Exception.
   336     self should: [ self first: tree. ] raise: Exception.
       
   337 
       
   338     "Modified: / 28-08-2015 / 14:18:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   331 !
   339 !
   332 
   340 
   333 testFirstSequence7
   341 testFirstSequence7
   334     tree := self treeFrom: #space asParser star, 'a' asParser.
   342     tree := self treeFrom: #space asParser star, 'a' asParser.
   335     
   343     
   349     self assert: first anyMatchesType: PPCMessagePredicateNode.
   357     self assert: first anyMatchesType: PPCMessagePredicateNode.
   350     self assert: first anyMatchesType: PPCSentinelNode.
   358     self assert: first anyMatchesType: PPCSentinelNode.
   351 !
   359 !
   352 
   360 
   353 testFirstStarMessagePredicate2
   361 testFirstStarMessagePredicate2
   354     configuration options specialize: true.
   362     configuration context options specialize: true.
   355     tree := self treeFrom: #space asParser star.
   363     tree := self treeFrom: #space asParser star.
   356     
   364     
   357     first := self first: tree.
   365     first := self first: tree.
   358     
   366     
   359     self assert: first size: 2.
   367     self assert: first size: 2.
   360     self assert: first anyMatchesType: PPCMessagePredicateNode.
   368     self assert: first anyMatchesType: PPCMessagePredicateNode.
   361     self assert: first anyMatchesType: PPCSentinelNode.
   369     self assert: first anyMatchesType: PPCSentinelNode.
   362     
   370 
   363     
   371     "Modified: / 28-08-2015 / 14:18:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   364 !
   372 !
   365 
   373 
   366 testFirstTerminal
   374 testFirstTerminal
   367     configuration options specialize: true.
   375     configuration context options specialize: true.
   368     tree := self treeFrom: 'a' asParser not.
   376     tree := self treeFrom: 'a' asParser not.
   369 
   377 
   370     first := self first: tree.
   378     first := self first: tree.
   371     
   379     
   372     self assert: first size: 1.
   380     self assert: first size: 1.
   373     self assert: (self first: tree) anyMatchesType: PPCNotLiteralNode.
   381     self assert: (self first: tree) anyMatchesType: PPCNotLiteralNode.
       
   382 
       
   383     "Modified: / 28-08-2015 / 14:18:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   374 !
   384 !
   375 
   385 
   376 testFirstTerminal2
   386 testFirstTerminal2
   377     tree := self treeFrom: 'a' asParser and.
   387     tree := self treeFrom: 'a' asParser and.
   378     
   388     
   657     self assert: followSet anyMatchesType: PPCNilNode
   667     self assert: followSet anyMatchesType: PPCNilNode
   658 !
   668 !
   659 
   669 
   660 testFollowTrimmingToken
   670 testFollowTrimmingToken
   661     | token1 token2 |
   671     | token1 token2 |
   662     configuration options specialize: false.
   672     configuration context options specialize: false.
   663     token1 := #letter asParser plus trimmingToken name: 'token1'; yourself.
   673     token1 := #letter asParser plus trimmingToken name: 'token1'; yourself.
   664     token2 := #letter asParser plus trimmingToken name: 'token2'; yourself.
   674     token2 := #letter asParser plus trimmingToken name: 'token2'; yourself.
   665     
   675     
   666     
   676     
   667     tree := self treeFrom: token1, token2.
   677     tree := self treeFrom: token1, token2.
   668     followSet := self 	followOf: 'token1' 
   678     followSet := self   followOf: 'token1' 
   669                             in: tree 
   679                             in: tree 
   670                             suchThat: [:e | e isFirstSetTerminal or: [e isKindOf: PPCTrimmingTokenNode ]].
   680                             suchThat: [:e | e isFirstSetTerminal or: [e isKindOf: PPCTrimmingTokenNode ]].
   671 
   681 
   672     self assert: followSet size: 1.
   682     self assert: followSet size: 1.
   673     self assert: followSet anyMatchesType: PPCTrimmingTokenNode. 
   683     self assert: followSet anyMatchesType: PPCTrimmingTokenNode.
       
   684 
       
   685     "Modified: / 28-08-2015 / 14:18:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   674 ! !
   686 ! !
   675 
   687 
   676 !PPCNodeFirstFollowNextTests class methodsFor:'documentation'!
   688 !PPCNodeFirstFollowNextTests class methodsFor:'documentation'!
   677 
   689 
   678 version_HG
   690 version_HG