equal
deleted
inserted
replaced
9 category:'PetitCompiler-Core' |
9 category:'PetitCompiler-Core' |
10 ! |
10 ! |
11 |
11 |
12 !PPCTokenizingConfiguration methodsFor:'compiling'! |
12 !PPCTokenizingConfiguration methodsFor:'compiling'! |
13 |
13 |
14 arguments: args |
14 options: args |
15 super arguments: args. |
15 super options: args. |
16 ! |
16 ! |
17 |
17 |
18 buildClass: clazz |
18 buildClass: clazz |
19 | builder | |
19 | builder | |
20 builder := PPCClassBuilder new. |
20 builder := PPCClassBuilder new. |
51 ! ! |
51 ! ! |
52 |
52 |
53 !PPCTokenizingConfiguration methodsFor:'initialization'! |
53 !PPCTokenizingConfiguration methodsFor:'initialization'! |
54 |
54 |
55 fillInClazzes |
55 fillInClazzes |
56 parserClazz name: arguments parserName. |
56 parserClazz name: options parserName. |
57 parserClazz superclass: PPTokenizingCompiledParser. |
57 parserClazz superclass: PPTokenizingCompiledParser. |
58 |
58 |
59 scannerClazz name: arguments scannerName. |
59 scannerClazz name: options scannerName. |
60 scannerClazz superclass: arguments scannerSuperclass. |
60 scannerClazz superclass: options scannerSuperclass. |
61 |
61 |
62 ! |
62 ! |
63 |
63 |
64 initialize |
64 initialize |
65 super initialize. |
65 super initialize. |
80 |
80 |
81 buildParserClazz |
81 buildParserClazz |
82 | rootMethod | |
82 | rootMethod | |
83 rootMethod := PPCTokenizingCodeGenerator new |
83 rootMethod := PPCTokenizingCodeGenerator new |
84 clazz: parserClazz; |
84 clazz: parserClazz; |
85 arguments: arguments; |
85 options: options; |
86 visit: ir. |
86 visit: ir. |
87 |
87 |
88 parserClazz propertyAt: #rootMethod put: rootMethod |
88 parserClazz propertyAt: #rootMethod put: rootMethod |
89 ! |
89 ! |
90 |
90 |
97 fsas addAll: (ir allNodes select: [ :node | node hasNextFsa ] thenCollect: [:node | node nextFsa]). |
97 fsas addAll: (ir allNodes select: [ :node | node hasNextFsa ] thenCollect: [:node | node nextFsa]). |
98 fsas := fsas reject: [ :fsa | fsa hasDistinctRetvals not ]. |
98 fsas := fsas reject: [ :fsa | fsa hasDistinctRetvals not ]. |
99 |
99 |
100 generator := PPCScannerCodeGenerator new |
100 generator := PPCScannerCodeGenerator new |
101 clazz: scannerClazz; |
101 clazz: scannerClazz; |
102 arguments: arguments; |
102 options: options; |
103 yourself. |
103 yourself. |
104 |
104 |
105 fsas do: [ :fsa | generator generate: fsa ]. |
105 fsas do: [ :fsa | generator generate: fsa ]. |
106 ! |
106 ! |
107 |
107 |
108 buildScannerTokens |
108 buildScannerTokens |
109 | generator | |
109 | generator | |
110 generator := PPCTokenCodeGenerator new |
110 generator := PPCTokenCodeGenerator new |
111 clazz: scannerClazz; |
111 clazz: scannerClazz; |
112 arguments: arguments; |
112 options: options; |
113 yourself. |
113 yourself. |
114 |
114 |
115 generator visit: ir. |
115 generator visit: ir. |
116 ! |
116 ! |
117 |
117 |
125 |
125 |
126 createLL1Choices |
126 createLL1Choices |
127 self flag: 'This phase needs revisit and update'. |
127 self flag: 'This phase needs revisit and update'. |
128 |
128 |
129 ir := PPCLL1Visitor new |
129 ir := PPCLL1Visitor new |
130 arguments: arguments; |
130 options: options; |
131 visit: ir. |
131 visit: ir. |
132 |
132 |
133 self remember: (self copyTree: ir) as: #LL1 |
133 self remember: (self copyTree: ir) as: #LL1 |
134 ! |
134 ! |
135 |
135 |
136 generateParser |
136 generateParser |
137 | parserClass rootMethod | |
137 | parserClass rootMethod | |
138 arguments generate ifFalse: [ ^ self ]. |
138 options generate ifFalse: [ ^ self ]. |
139 rootMethod := parserClazz propertyAt: #rootMethod. |
139 rootMethod := parserClazz propertyAt: #rootMethod. |
140 |
140 |
141 parserClazz name: arguments parserName. |
141 parserClazz name: options parserName. |
142 parserClazz superclass: arguments parserSuperclass. |
142 parserClazz superclass: options parserSuperclass. |
143 |
143 |
144 parserClass := self buildClass: parserClazz. |
144 parserClass := self buildClass: parserClazz. |
145 parserClass startSymbol: rootMethod methodName. |
145 parserClass startSymbol: rootMethod methodName. |
146 |
146 |
147 self remember: parserClass as: #parser. |
147 self remember: parserClass as: #parser. |
150 |
150 |
151 ! |
151 ! |
152 |
152 |
153 generateScanner |
153 generateScanner |
154 | scanner | |
154 | scanner | |
155 arguments generate ifFalse: [ ^ self ]. |
155 options generate ifFalse: [ ^ self ]. |
156 |
156 |
157 scannerClazz name: arguments scannerName. |
157 scannerClazz name: options scannerName. |
158 scannerClazz superclass: arguments scannerSuperclass. |
158 scannerClazz superclass: options scannerSuperclass. |
159 |
159 |
160 scanner := (self buildClass: scannerClazz). |
160 scanner := (self buildClass: scannerClazz). |
161 parserClazz addConstant: scanner as: #scannerClass. |
161 parserClazz addConstant: scanner as: #scannerClass. |
162 |
162 |
163 ir := scanner. |
163 ir := scanner. |
167 |
167 |
168 tokenize |
168 tokenize |
169 " |
169 " |
170 This will try transform the parser into the tokenizing parser |
170 This will try transform the parser into the tokenizing parser |
171 " |
171 " |
172 arguments tokenize ifFalse: [ ^ self ] . |
172 options tokenize ifFalse: [ ^ self ] . |
173 |
173 |
174 ir := PPCTokenizingVisitor new |
174 ir := PPCTokenizingVisitor new |
175 arguments: arguments; |
175 options: options; |
176 visit: ir. |
176 visit: ir. |
177 |
177 |
178 |
178 |
179 self remember: (self copyTree: ir) as: #tokenize |
179 self remember: (self copyTree: ir) as: #tokenize |
180 ! |
180 ! |