Class: LL::Parser

Inherits:
Driver show all
Defined in:
lib/ll/parser.rb

Constant Summary

CONFIG =
LL::DriverConfig.new

Instance Method Summary (collapse)

Methods inherited from Driver

#id_to_terminal, #id_to_type, #parser_error_message

Constructor Details

- (Parser) initialize(*args)

Returns a new instance of Parser

See Also:

  • LL::Parser.[LL[LL::Lexer[LL::Lexer#initialize]


135
136
137
# File 'lib/ll/parser.rb', line 135

def initialize(*args)
  @lexer = Lexer.new(*args)
end

Instance Method Details

- (Object) _rule_0(val)



172
173
174
# File 'lib/ll/parser.rb', line 172

def _rule_0(val)
   s(:grammar, val[0]) 
end

- (Object) _rule_1(val)



176
177
178
# File 'lib/ll/parser.rb', line 176

def _rule_1(val)
  val[0]
end

- (Object) _rule_10(val)



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

- (Object) _rule_11(val)



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

- (Object) _rule_12(val)



228
229
230
# File 'lib/ll/parser.rb', line 228

def _rule_12(val)
  val[0]
end

- (Object) _rule_13(val)



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

- (Object) _rule_14(val)



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

- (Object) _rule_15(val)



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

- (Object) _rule_16(val)



250
251
252
# File 'lib/ll/parser.rb', line 250

def _rule_16(val)
   [:plus, val[0].source_line] 
end

- (Object) _rule_17(val)



254
255
256
# File 'lib/ll/parser.rb', line 254

def _rule_17(val)
   [:star, val[0].source_line] 
end

- (Object) _rule_18(val)



258
259
260
# File 'lib/ll/parser.rb', line 258

def _rule_18(val)
   [:question, val[0].source_line] 
end

- (Object) _rule_19(val)



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

- (Object) _rule_2(val)



180
181
182
# File 'lib/ll/parser.rb', line 180

def _rule_2(val)
  val[0]
end

- (Object) _rule_20(val)



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

- (Object) _rule_21(val)



274
275
276
# File 'lib/ll/parser.rb', line 274

def _rule_21(val)
   s(:epsilon, [], :source_line => val[0].source_line) 
end

- (Object) _rule_22(val)



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

- (Object) _rule_23(val)



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

- (Object) _rule_24(val)



292
293
294
# File 'lib/ll/parser.rb', line 292

def _rule_24(val)
   [val[0], *val[1]] 
end

- (Object) _rule_25(val)



296
297
298
# File 'lib/ll/parser.rb', line 296

def _rule_25(val)
   val[1] 
end

- (Object) _rule_26(val)



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

- (Object) _rule_27(val)



306
307
308
# File 'lib/ll/parser.rb', line 306

def _rule_27(val)
  val[0]
end

- (Object) _rule_28(val)



310
311
312
# File 'lib/ll/parser.rb', line 310

def _rule_28(val)
  val[0]
end

- (Object) _rule_29(val)



314
315
316
# File 'lib/ll/parser.rb', line 314

def _rule_29(val)
  val[0]
end

- (Object) _rule_3(val)



184
185
186
# File 'lib/ll/parser.rb', line 184

def _rule_3(val)
  val[0]
end

- (Object) _rule_30(val)



318
319
320
# File 'lib/ll/parser.rb', line 318

def _rule_30(val)
  val[0]
end

- (Object) _rule_31(val)



322
323
324
# File 'lib/ll/parser.rb', line 322

def _rule_31(val)
  val[0]
end

- (Object) _rule_32(val)



326
327
328
# File 'lib/ll/parser.rb', line 326

def _rule_32(val)
  val[0]
end

- (Object) _rule_33(val)



330
331
332
# File 'lib/ll/parser.rb', line 330

def _rule_33(val)
  val[0]
end

- (Object) _rule_4(val)



188
189
190
# File 'lib/ll/parser.rb', line 188

def _rule_4(val)
  val[0]
end

- (Object) _rule_5(val)



192
193
194
# File 'lib/ll/parser.rb', line 192

def _rule_5(val)
  val[0]
end

- (Object) _rule_6(val)



196
197
198
# File 'lib/ll/parser.rb', line 196

def _rule_6(val)
  val[0]
end

- (Object) _rule_7(val)



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

- (Object) _rule_8(val)



206
207
208
# File 'lib/ll/parser.rb', line 206

def _rule_8(val)
   val[2] 
end

- (Object) _rule_9(val)



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

- (Object) each_token {|type, value| ... }

Yield Parameters:

  • type (Symbol)
  • value (String)


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

- (Object) parser_error(stack_type, stack_value, token_type, token_value)

Raises:

See Also:

  • LL::Parser.[LL[LL::Driver[LL::Driver#parser_error]


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

- (Object) s(*args)

See Also:

  • LL::Parser.[LL[LL::AST[LL::AST::Node[LL::AST::Node#initialize]


154
155
156
# File 'lib/ll/parser.rb', line 154

def s(*args)
  return AST::Node.new(*args)
end