PPCConfiguration refactoring: [2/10]: introduced PPCCompilationContext
Moved parser class/scanner class instvars from PPCConfiguration subclasses
to the context. Made PPCConfiguration to keep an instance of context.
This is a preparation for having only one PPCConfiguration-like class.
"{ Package: 'stx:goodies/petitparser/compiler' }"
"{ NameSpace: Smalltalk }"
PPCConfiguration subclass:#PPCUniversalConfiguration
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Core'
!
!PPCUniversalConfiguration methodsFor:'compiling'!
buildClass
| builder |
self assert: (context parserClass isKindOf: PPCClass).
builder := PPCClassBuilder new.
builder compiledClassName: options parserName.
builder compiledSuperclass: PPCompiledParser.
builder methodDictionary: context parserClass methodDictionary.
builder constants: context parserClass constants.
^ builder compileClass.
"Modified: / 25-08-2015 / 00:04:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
initialize
super initialize.
"Modified: / 25-08-2015 / 00:03:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
invokePhases
self toPPCIr.
self createTokens.
self cacheFirstFollow.
self specialize.
self createRecognizingComponents.
self specialize.
self inline.
self merge.
self check.
self generate.
! !
!PPCUniversalConfiguration methodsFor:'hooks'!
codeGenerator
^ PPCUniversalCodeGenerator new
options: options
! !
!PPCUniversalConfiguration methodsFor:'phases'!
generate
| rootMethod compiledParser |
options generate ifFalse: [ ^ self ].
rootMethod := self codeGenerator
options: options;
clazz: context parserClass;
visit: ir.
compiledParser := self buildClass.
compiledParser startSymbol: rootMethod methodName.
compiledParser := compiledParser new.
ir := compiledParser.
"Modified: / 25-08-2015 / 00:03:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !