diff -r e36906742693 -r dc3d13c2837d compiler/PPCTokenizingConfiguration.st --- a/compiler/PPCTokenizingConfiguration.st Tue Aug 25 01:30:32 2015 +0100 +++ b/compiler/PPCTokenizingConfiguration.st Wed Aug 26 21:41:20 2015 +0100 @@ -9,7 +9,6 @@ category:'PetitCompiler-Core' ! - !PPCTokenizingConfiguration methodsFor:'compiling'! buildClass: clazz @@ -45,56 +44,96 @@ self buildScannerScans. self generateScanner. self generateParser. -! - -options: args - super options: args. ! ! -!PPCTokenizingConfiguration methodsFor:'phases'! +!PPCTokenizingConfiguration methodsFor:'error handling'! buildParserClazz | rootMethod | - rootMethod := PPCTokenizingCodeGenerator new - clazz: context parserClass; - options: options; - visit: ir. - - context parserClass propertyAt: #rootMethod put: rootMethod - "Modified: / 25-08-2015 / 00:07:38 / Jan Vrany " + rootMethod := (PPCTokenizingCodeGenerator new) + clazz:context parserClass; + options:context options; + visit:ir. + context parserClass propertyAt:#rootMethod put:rootMethod + + "Modified: / 25-08-2015 / 00:07:38 / Jan Vrany " ! 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: options; - yourself. - - fsas do: [ :fsa | generator generate: fsa ]. + 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 + ]. - "Modified: / 25-08-2015 / 00:04:43 / Jan Vrany " + "Modified: / 25-08-2015 / 00:04:43 / Jan Vrany " ! buildScannerTokens - | generator | - generator := PPCTokenCodeGenerator new - clazz: context scannerClass; - options: options; - yourself. + | generator | + + generator := (PPCTokenCodeGenerator new) + clazz:context scannerClass; + options:context options; + yourself. + generator visit:ir. + + "Modified: / 25-08-2015 / 00:04:46 / Jan Vrany " +! + +generateParser + | parserClass rootMethod | - generator visit: ir. + context options generate ifFalse:[ + ^ self + ]. + 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 + + "Modified: / 25-08-2015 / 00:05:49 / Jan Vrany" + "Modified: / 26-08-2015 / 19:57:58 / Jan Vrany " +! - "Modified: / 25-08-2015 / 00:04:46 / Jan Vrany " -! +generateScanner + | scanner | + + 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 + + "Modified: / 25-08-2015 / 00:06:49 / Jan Vrany" + "Modified: / 26-08-2015 / 19:58:12 / Jan Vrany " +! ! + +!PPCTokenizingConfiguration methodsFor:'phases'! createFSAs ir := PPCFSAVisitor new @@ -107,61 +146,24 @@ ! createLL1Choices - self flag: 'This phase needs revisit and update'. - - ir := PPCLL1Visitor new - options: options; - visit: ir. - - self remember: (self copyTree: ir) as: #LL1 -! - -generateParser - | parserClass rootMethod | - options generate ifFalse: [ ^ self ]. - rootMethod := context parserClass propertyAt: #rootMethod. - - context parserClass name: options parserName. - context parserClass superclass: options parserSuperclass. - - parserClass := self buildClass: context parserClass. - parserClass startSymbol: rootMethod methodName. - - self remember: parserClass as: #parser. - ir := parserClass new - - "Modified: / 25-08-2015 / 00:05:49 / Jan Vrany " -! - -generateScanner - | scanner | - options generate ifFalse: [ ^ self ]. - - context scannerClass name: options scannerName. - context scannerClass superclass: options scannerSuperclass. - - scanner := (self buildClass: context scannerClass). - context parserClass addConstant: scanner as: #scannerClass. - - ir := scanner. - - self remember: scanner as: #scanner - - "Modified: / 25-08-2015 / 00:06:49 / Jan Vrany " + self flag:'This phase needs revisit and update'. + ir := (PPCLL1Visitor new) + options:context options; + visit:ir. + self remember:(self copyTree:ir) as:#LL1 ! tokenize " - This will try transform the parser into the tokenizing parser - " - options tokenize ifFalse: [ ^ self ] . + This will try transform the parser into the tokenizing parser" - ir := PPCTokenizingVisitor new - options: options; - visit: ir. - - - self remember: (self copyTree: ir) as: #tokenize + context options tokenize ifFalse:[ + ^ self + ]. + ir := (PPCTokenizingVisitor new) + options:context options; + visit:ir. + self remember:(self copyTree:ir) as:#tokenize ! unmarkConsumeTokensForInline @@ -173,10 +175,3 @@ ] ! ! -!PPCTokenizingConfiguration class methodsFor:'documentation'! - -version_HG - - ^ '$Changeset: $' -! ! -