diff -r 1e45d3c96ec5 -r b5316ef15274 compiler/tests/PPCTokenizingCodeGeneratorTest.st --- a/compiler/tests/PPCTokenizingCodeGeneratorTest.st Fri Jul 24 15:06:54 2015 +0100 +++ b/compiler/tests/PPCTokenizingCodeGeneratorTest.st Mon Aug 17 12:13:16 2015 +0100 @@ -12,21 +12,35 @@ !PPCTokenizingCodeGeneratorTest methodsFor:'setup'! +cleanClass + | parserClass scannerClass | + parserClass := (Smalltalk at: arguments parserName ifAbsent: [nil]). + parserClass notNil ifTrue:[ + parserClass removeFromSystem + ]. + + scannerClass := (Smalltalk at: arguments scannerName ifAbsent: [nil]). + scannerClass notNil ifTrue:[ + scannerClass removeFromSystem + ]. +! + compileTokenizer: aNode tokenizer := visitor visit: aNode ! compileTree: root - | configuration | + | configuration | configuration := PPCPluggableConfiguration on: [ :_self | - result := (visitor visit: _self ir). - compiler compileParser startSymbol: result methodName. - parser := compiler compileParser new. - _self ir: parser + _self cacheFirstFollow. + _self generateScanner. + _self generate. + ]. configuration arguments: arguments. + configuration base: PPCConfiguration tokenizing. parser := configuration compile: root. ! @@ -43,8 +57,10 @@ arguments := PPCArguments default profile: true; yourself. - - compiler := PPCTokenizingCompiler new. + + self cleanClass. + + compiler := PPCTokenizingCodeGen new. compiler arguments: arguments. visitor := PPCTokenizingCodeGenerator new. @@ -53,12 +69,7 @@ ! tearDown - | class | - - class := (Smalltalk at: #PPGeneratedParser ifAbsent: [nil]). - class notNil ifTrue:[ - class removeFromSystem - ]. + "nothing to do now" ! ! !PPCTokenizingCodeGeneratorTest methodsFor:'support'! @@ -138,7 +149,7 @@ !PPCTokenizingCodeGeneratorTest methodsFor:'testing'! testSimpleChoice1 - | token1 token2 token1Consume token2Consume tokenizerNode eof choiceNode wsNode | + | token1 token2 token1Consume token2Consume tokenNode eof choiceNode wsNode | token1 := (self tokenNodeForLiteral: 'foo') yourself. token2 := (self tokenNodeForLiteral: 'bar') yourself. @@ -155,28 +166,33 @@ children: { token1Consume . token2Consume }; yourself. - tokenizerNode := PPCTokenChoiceNode new + tokenNode := PPCListNode new children: { token1 . token2 . eof }; name: 'nextToken'; yourself. wsNode := PPCTokenStarSeparatorNode new name: 'consumeWhitespace'; + child: PPCNilNode new; + yourself. + + node := PPCTokenizingParserNode new + tokens: tokenNode; + whitespace: wsNode; + parser: choiceNode; yourself. - self compileWs: wsNode. - self compileTokenizer: tokenizerNode. - self compileTree: choiceNode. + self compileTree: node. - parser := compiler compiledParser new. + parser := parser class new. self assert: parser parse: 'foo'. self assert: result inputValue = 'foo'. - parser := compiler compiledParser new. + parser := parser class new. self assert: parser parse: 'bar'. self assert: result inputValue = 'bar'. - parser := compiler compiledParser new. + parser := parser class new. self assert: parser fail: 'baz'. ! @@ -185,7 +201,7 @@ tokenNode := (self tokenNodeForLiteral: 'bar') yourself. eof := (self tokenNodeForEOF) yourself. - tokenizerNode := PPCTokenChoiceNode new + tokenizerNode := PPCListNode new children: { tokenNode . eof }; name: 'nextToken'; yourself. @@ -199,23 +215,23 @@ node := PPCTokenizingParserNode new parser: consumeNode; - tokenizer: tokenizerNode; + tokens: tokenizerNode; whitespace: wsNode; yourself. self compileTree: node. - parser := compiler compiledParser new. + parser := parser class new. self assert: parser parse: 'bar'. self assert: result inputValue = 'bar'. - parser := compiler compiledParser new. + parser := parser class new. self assert: parser fail: 'foo'. ! testTrimmingToken1 - | token tokenConsume tokenizerNode eof wsNode | + | token tokenConsume tokensNode eof wsNode | token := self trimmingTokenNode: (self literalNode: 'foo'). eof := (self tokenNodeForEOF) yourself. @@ -224,31 +240,37 @@ child: token; yourself. - tokenizerNode := PPCTokenChoiceNode new + tokensNode := PPCListNode new children: { token . eof }; name: 'nextToken'; yourself. wsNode := PPCTokenStarSeparatorNode new name: 'consumeWhitespace'; + child: PPCNilNode new; + yourself. + + node := PPCTokenizingParserNode new + tokens: tokensNode; + whitespace: wsNode; + parser: tokenConsume; yourself. - self compileWs: wsNode. - self compileTokenizer: tokenizerNode. - self compileTree: tokenConsume. + + self compileTree: node. - parser := compiler compiledParser new. + parser := parser class new. self assert: parser parse: ' foo'. self assert: result inputValue = 'foo'. - parser := compiler compiledParser new. + parser := parser class new. self assert: parser parse: ' foo '. self assert: result inputValue = 'foo'. - parser := compiler compiledParser new. + parser := parser class new. self assert: parser fail: 'baz'. ! !