compiler/PPCTokenizingConfiguration.st
changeset 534 a949c4fe44df
parent 532 132d7898a2a1
--- 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
-        ]
-    ]
-! !
-