Class: LL::Parser
Constant Summary
collapse
- CONFIG =
LL::DriverConfig.new
Instance Method Summary
collapse
Methods inherited from Driver
#id_to_terminal, #id_to_type, #parser_error_message
Constructor Details
#initialize(*args) ⇒ Parser
Returns a new instance of Parser.
135
136
137
|
# File 'lib/ll/parser.rb', line 135
def initialize(*args)
@lexer = Lexer.new(*args)
end
|
Instance Method Details
#_rule_0(val) ⇒ Object
172
173
174
|
# File 'lib/ll/parser.rb', line 172
def _rule_0(val)
s(:grammar, val[0])
end
|
#_rule_1(val) ⇒ Object
176
177
178
|
# File 'lib/ll/parser.rb', line 176
def _rule_1(val)
val[0]
end
|
#_rule_10(val) ⇒ Object
216
217
218
219
220
|
# File 'lib/ll/parser.rb', line 216
def _rule_10(val)
s(:inner, [val[1]], :source_line => val[0].source_line)
end
|
#_rule_11(val) ⇒ Object
222
223
224
225
226
|
# File 'lib/ll/parser.rb', line 222
def _rule_11(val)
s(:header, [val[1]], :source_line => val[0].source_line)
end
|
#_rule_12(val) ⇒ Object
228
229
230
|
# File 'lib/ll/parser.rb', line 228
def _rule_12(val)
val[0]
end
|
#_rule_13(val) ⇒ Object
232
233
234
235
236
|
# File 'lib/ll/parser.rb', line 232
def _rule_13(val)
s(:ident, [val[0].value], :source_line => val[0].source_line)
end
|
#_rule_14(val) ⇒ Object
238
239
240
241
242
|
# File 'lib/ll/parser.rb', line 238
def _rule_14(val)
val[1] ? s(val[1][0], [val[0]], :source_line => val[1][1]) : val[0]
end
|
#_rule_15(val) ⇒ Object
244
245
246
247
248
|
# File 'lib/ll/parser.rb', line 244
def _rule_15(val)
s(val[3][0], val[1], :source_line => val[0].source_line)
end
|
#_rule_16(val) ⇒ Object
250
251
252
|
# File 'lib/ll/parser.rb', line 250
def _rule_16(val)
[:plus, val[0].source_line]
end
|
#_rule_17(val) ⇒ Object
254
255
256
|
# File 'lib/ll/parser.rb', line 254
def _rule_17(val)
[:star, val[0].source_line]
end
|
#_rule_18(val) ⇒ Object
258
259
260
|
# File 'lib/ll/parser.rb', line 258
def _rule_18(val)
[:question, val[0].source_line]
end
|
#_rule_19(val) ⇒ Object
262
263
264
265
266
|
# File 'lib/ll/parser.rb', line 262
def _rule_19(val)
s(:steps, val[0], :source_line => val[0][0].source_line)
end
|
#_rule_2(val) ⇒ Object
180
181
182
|
# File 'lib/ll/parser.rb', line 180
def _rule_2(val)
val[0]
end
|
#_rule_20(val) ⇒ Object
268
269
270
271
272
|
# File 'lib/ll/parser.rb', line 268
def _rule_20(val)
s(:steps, [val[0]], :source_line => val[0].source_line)
end
|
#_rule_21(val) ⇒ Object
274
275
276
|
# File 'lib/ll/parser.rb', line 274
def _rule_21(val)
s(:epsilon, [], :source_line => val[0].source_line)
end
|
#_rule_22(val) ⇒ Object
278
279
280
281
282
283
284
285
286
|
# File 'lib/ll/parser.rb', line 278
def _rule_22(val)
steps = [val[0]]
steps << val[1] if val[1]
s(:branch, steps, :source_line => val[0].source_line)
end
|
#_rule_23(val) ⇒ Object
288
289
290
|
# File 'lib/ll/parser.rb', line 288
def _rule_23(val)
s(:ruby, [val[0].value], :source_line => val[0].source_line)
end
|
#_rule_24(val) ⇒ Object
292
293
294
|
# File 'lib/ll/parser.rb', line 292
def _rule_24(val)
[val[0], *val[1]]
end
|
#_rule_25(val) ⇒ Object
296
297
298
|
# File 'lib/ll/parser.rb', line 296
def _rule_25(val)
val[1]
end
|
#_rule_26(val) ⇒ Object
300
301
302
303
304
|
# File 'lib/ll/parser.rb', line 300
def _rule_26(val)
s(:rule, [val[0], *val[2]], :source_line => val[0].source_line)
end
|
#_rule_27(val) ⇒ Object
306
307
308
|
# File 'lib/ll/parser.rb', line 306
def _rule_27(val)
val[0]
end
|
#_rule_28(val) ⇒ Object
310
311
312
|
# File 'lib/ll/parser.rb', line 310
def _rule_28(val)
val[0]
end
|
#_rule_29(val) ⇒ Object
314
315
316
|
# File 'lib/ll/parser.rb', line 314
def _rule_29(val)
val[0]
end
|
#_rule_3(val) ⇒ Object
184
185
186
|
# File 'lib/ll/parser.rb', line 184
def _rule_3(val)
val[0]
end
|
#_rule_30(val) ⇒ Object
318
319
320
|
# File 'lib/ll/parser.rb', line 318
def _rule_30(val)
val[0]
end
|
#_rule_31(val) ⇒ Object
322
323
324
|
# File 'lib/ll/parser.rb', line 322
def _rule_31(val)
val[0]
end
|
#_rule_32(val) ⇒ Object
326
327
328
|
# File 'lib/ll/parser.rb', line 326
def _rule_32(val)
val[0]
end
|
#_rule_33(val) ⇒ Object
330
331
332
|
# File 'lib/ll/parser.rb', line 330
def _rule_33(val)
val[0]
end
|
#_rule_4(val) ⇒ Object
188
189
190
|
# File 'lib/ll/parser.rb', line 188
def _rule_4(val)
val[0]
end
|
#_rule_5(val) ⇒ Object
192
193
194
|
# File 'lib/ll/parser.rb', line 192
def _rule_5(val)
val[0]
end
|
#_rule_6(val) ⇒ Object
196
197
198
|
# File 'lib/ll/parser.rb', line 196
def _rule_6(val)
val[0]
end
|
#_rule_7(val) ⇒ Object
200
201
202
203
204
|
# File 'lib/ll/parser.rb', line 200
def _rule_7(val)
s(:name, [val[1], *val[2]], :source_line => val[0].source_line)
end
|
#_rule_8(val) ⇒ Object
206
207
208
|
# File 'lib/ll/parser.rb', line 206
def _rule_8(val)
val[2]
end
|
#_rule_9(val) ⇒ Object
210
211
212
213
214
|
# File 'lib/ll/parser.rb', line 210
def _rule_9(val)
s(:terminals, val[1], :source_line => val[0].source_line)
end
|
#each_token {|type, value| ... } ⇒ Object
143
144
145
146
147
148
149
|
# File 'lib/ll/parser.rb', line 143
def each_token
@lexer.advance do |token|
yield [token.type, token]
end
yield [-1, -1]
end
|
#parser_error(stack_type, stack_value, token_type, token_value) ⇒ Object
161
162
163
164
165
166
167
168
169
170
|
# File 'lib/ll/parser.rb', line 161
def parser_error(stack_type, stack_value, token_type, token_value)
message = parser_error_message(stack_type, stack_value, token_type)
if token_value.is_a?(LL::Token)
sl = token_value.source_line
message += " (line #{sl.line}, column #{sl.column})"
end
raise ParserError, message
end
|
#s(*args) ⇒ Object
154
155
156
|
# File 'lib/ll/parser.rb', line 154
def s(*args)
return AST::Node.new(*args)
end
|