--- a/compiler/PPCTokenizingConfiguration.st Fri Jul 24 15:06:54 2015 +0100
+++ b/compiler/PPCTokenizingConfiguration.st Mon Aug 17 12:13:16 2015 +0100
@@ -3,7 +3,7 @@
"{ NameSpace: Smalltalk }"
PPCConfiguration subclass:#PPCTokenizingConfiguration
- instanceVariableNames:''
+ instanceVariableNames:'codeGen'
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Core'
@@ -11,6 +11,18 @@
!PPCTokenizingConfiguration methodsFor:'compiling'!
+buildClass: compiler
+ | builder |
+ builder := PPCClassBuilder new.
+
+ builder compiledClassName: arguments parserName.
+ builder compiledSuperclass: PPTokenizingCompiledParser.
+ builder methodDictionary: compiler methodDictionary.
+ builder constants: compiler constants.
+
+ ^ builder compileClass.
+!
+
invokePhases
self toPPCIr.
self createTokens.
@@ -25,11 +37,17 @@
self merge.
self check.
self cacheFirstFollow.
+ self generateScanner. "Please note that codeGen is shared between these two phases"
self generate.
! !
!PPCTokenizingConfiguration methodsFor:'hooks'!
+codeCompiler
+ codeGen isNil ifTrue: [ codeGen := PPCTokenizingCodeGen on: arguments ].
+ ^ codeGen
+!
+
codeCompilerOn: args
^ PPCTokenizingCompiler on: args
!
@@ -47,6 +65,19 @@
self remember: #LL1
!
+generateScanner
+ | generator scanner |
+ generator := PPCTokenCodeGenerator new
+ compiler: self codeCompiler;
+ arguments: arguments;
+ yourself.
+
+ generator visit: ir.
+
+ scanner := generator compileScanner.
+ self codeCompiler addConstant: scanner as: #scannerClass.
+!
+
tokenize
"
This will try transform the parser into the tokenizing parser