compiler/PPCUniversalConfiguration.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 25 Aug 2015 01:30:32 +0100
changeset 530 e36906742693
parent 529 439c4057517f
child 531 dc3d13c2837d
permissions -rw-r--r--
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>"
! !