--- 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'.
! !