--- a/compiler/PPCTokenizingConfiguration.st Wed Aug 26 23:34:48 2015 +0100
+++ b/compiler/PPCTokenizingConfiguration.st Sat Aug 29 07:56:14 2015 +0100
@@ -9,155 +9,57 @@
category:'PetitCompiler-Core'
!
-!PPCTokenizingConfiguration methodsFor:'compiling'!
+!PPCTokenizingConfiguration methodsFor:'accessing - defaults'!
+
+defaultParserSuperclass
+ ^ PPTokenizingCompiledParser
-buildClass: clazz
- | builder |
- builder := PPCClassBuilder new.
-
- builder compiledClassName: clazz name.
- builder compiledSuperclass: clazz superclass.
- builder methodDictionary: clazz methodDictionary.
- builder constants: clazz constants.
+ "Modified (comment): / 01-09-2015 / 08:48:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
- ^ builder compileClass.
-!
+!PPCTokenizingConfiguration methodsFor:'compiling'!
invokePhases
- self toPPCIr.
- self createTokens.
- self cacheFirstFollow.
- self createLL1Choices.
- self tokenize.
- self merge.
- self specialize.
- self createRecognizingComponents.
- self specialize.
- self inline.
- self merge.
- self check.
- self cacheFirstFollow.
- self buildParserClazz.
- self unmarkConsumeTokensForInline.
- self createFSAs.
- self buildScannerTokens.
- self buildScannerScans.
- self generateScanner.
- self generateParser.
-! !
-!PPCTokenizingConfiguration methodsFor:'error handling'!
+ self runPass: PPCTokenDetector.
-buildParserClazz
- self runPass: PPCTokenizingCodeGenerator.
-
- "Modified: / 25-08-2015 / 00:07:38 / Jan Vrany <jan.vrany@fit."
- "Modified: / 26-08-2015 / 22:47:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-buildScannerScans
- | fsas generator |
-
- "TODO JK: Perhpas write separate visitor for this?"
- fsas := IdentitySet new.
- fsas addAll:(ir allNodes
- select:[:node | node hasFsa ]
- thenCollect:[:node | node fsa ]).
- fsas addAll:(ir allNodes
- select:[:node | node hasNextFsa ]
- thenCollect:[:node | node nextFsa ]).
- fsas := fsas reject:[:fsa | fsa hasDistinctRetvals not ].
- generator := (PPCScannerCodeGenerator new)
- clazz:context scannerClass;
- options:context options;
- yourself.
- fsas do:[:fsa |
- generator generate:fsa
+ context options cacheFirstFollow ifTrue:[
+ self runPass: PPCCacheFirstFollowPass
+ ].
+ self runPass: PPCLL1Visitor.
+ context options tokenize ifTrue:[
+ self runPass: PPCTokenizingVisitor
].
- "Modified: / 25-08-2015 / 00:04:43 / Jan Vrany <jan.vrany@fit."
- "Modified: / 26-08-2015 / 19:57:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-buildScannerTokens
- self runPass: PPCTokenCodeGenerator
+ self runPass: PPCMergingVisitor .
- "Modified: / 25-08-2015 / 00:04:46 / Jan Vrany <jan.vrany@fit."
- "Modified: / 26-08-2015 / 22:53:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
+ context options specialize ifTrue:[
+ self runPass: PPCSpecializingVisitor
+ ].
-generateParser
- | parserClass rootMethod |
+ self runPass: PPCRecognizerComponentDetector .
- context options generate ifFalse:[
- ^ self
+ context options specialize ifTrue:[
+ self runPass: PPCSpecializingVisitor
].
- rootMethod := context parserClass propertyAt:#rootMethod.
- context parserClass name:context options parserName.
- context parserClass superclass:context options parserSuperclass.
- parserClass := self buildClass:context parserClass.
- parserClass startSymbol:rootMethod methodName.
- self remember:parserClass as:#parser.
- ir := parserClass new
+ context options inline ifTrue:[
+ self runPass: PPCInliningVisitor
+ ].
- "Modified: / 25-08-2015 / 00:05:49 / Jan Vrany"
- "Modified: / 26-08-2015 / 19:57:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
+ self runPass: PPCMergingVisitor .
-generateScanner
- | scanner |
+ self runPass: PPCCheckingVisitor.
+ context options cacheFirstFollow ifTrue:[
+ self runPass: PPCCacheFirstFollowPass
+ ].
+ self runPass: PPCTokenizingCodeGenerator.
+ self runPass: PPCFSAVisitor.
+ self runPass: PPCTokenCodeGenerator.
+ self runPass: PPCScannerCodeGenerator.
- context options generate ifFalse:[
- ^ self
- ].
- context scannerClass name:context options scannerName.
- context scannerClass superclass:context options scannerSuperclass.
- scanner := (self buildClass:context scannerClass).
- context parserClass addConstant:scanner as:#scannerClass.
- ir := scanner.
- self remember:scanner as:#scanner
+ self generateScanner.
+ self generateParser.
- "Modified: / 25-08-2015 / 00:06:49 / Jan Vrany"
- "Modified: / 26-08-2015 / 19:58:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 04-09-2015 / 10:25:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
-!PPCTokenizingConfiguration methodsFor:'phases'!
-
-createFSAs
- ir := PPCFSAVisitor new
- idGen: context scannerClass idGen;
- visit: ir.
-
- self remember: (self copyTree: ir) as: #withFSAs
-
- "Modified: / 25-08-2015 / 00:07:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-createLL1Choices
- self flag:'This phase needs revisit and update'.
- self runPass: PPCLL1Visitor
-
- "Modified: / 26-08-2015 / 22:52:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-tokenize
- "
- This will try transform the parser into the tokenizing parser"
-
- context options tokenize ifFalse:[
- ^ self
- ].
- self runPass: PPCTokenizingVisitor
-
- "Modified: / 26-08-2015 / 22:48:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-unmarkConsumeTokensForInline
- "TODO JK: Hack alert, use visitor, or at leas isTokenConsume"
- ir allNodesDo: [ :node |
- node class == PPCTokenConsumeNode ifTrue: [
- node unmarkForInline
- ]
- ]
-! !
-