compiler/tests/PPCTokenizingCodeGeneratorTest.st
changeset 459 4751c407bb40
parent 452 9f4558b3be66
child 464 f6d77fee9811
equal deleted inserted replaced
452:9f4558b3be66 459:4751c407bb40
     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 
    28     configuration arguments: arguments.
    29     configuration arguments: arguments.
    29     parser := configuration compile: root.
    30     parser := configuration compile: root.
    30     
    31     
    31 !
    32 !
    32 
    33 
       
    34 compileWs: aNode
       
    35     whitespace := visitor visit: aNode	
       
    36 !
       
    37 
    33 context	
    38 context	
    34     ^ context := PPCProfilingContext new
    39     ^ context := PPCProfilingContext new
    35 !
    40 !
    36 
    41 
    37 setUp
    42 setUp
   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