class LL::Parser

Constants

CONFIG

Public Class Methods

new(*args) click to toggle source

@see [LL::Lexer#initialize]

# File lib/ll/parser.rb, line 135
def initialize(*args)
  @lexer = Lexer.new(*args)
end

Public Instance Methods

_rule_0(val) click to toggle source
# File lib/ll/parser.rb, line 172
def _rule_0(val)
   s(:grammar, val[0]) 
end
_rule_1(val) click to toggle source
# File lib/ll/parser.rb, line 176
def _rule_1(val)
  val[0]
end
_rule_10(val) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/ll/parser.rb, line 228
def _rule_12(val)
  val[0]
end
_rule_13(val) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/ll/parser.rb, line 250
def _rule_16(val)
   [:plus, val[0].source_line] 
end
_rule_17(val) click to toggle source
# File lib/ll/parser.rb, line 254
def _rule_17(val)
   [:star, val[0].source_line] 
end
_rule_18(val) click to toggle source
# File lib/ll/parser.rb, line 258
def _rule_18(val)
   [:question, val[0].source_line] 
end
_rule_19(val) click to toggle source
# 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) click to toggle source
# File lib/ll/parser.rb, line 180
def _rule_2(val)
  val[0]
end
_rule_20(val) click to toggle source
# 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) click to toggle source
# File lib/ll/parser.rb, line 274
def _rule_21(val)
   s(:epsilon, [], :source_line => val[0].source_line) 
end
_rule_22(val) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/ll/parser.rb, line 292
def _rule_24(val)
   [val[0], *val[1]] 
end
_rule_25(val) click to toggle source
# File lib/ll/parser.rb, line 296
def _rule_25(val)
   val[1] 
end
_rule_26(val) click to toggle source
# 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) click to toggle source
# File lib/ll/parser.rb, line 306
def _rule_27(val)
  val[0]
end
_rule_28(val) click to toggle source
# File lib/ll/parser.rb, line 310
def _rule_28(val)
  val[0]
end
_rule_29(val) click to toggle source
# File lib/ll/parser.rb, line 314
def _rule_29(val)
  val[0]
end
_rule_3(val) click to toggle source
# File lib/ll/parser.rb, line 184
def _rule_3(val)
  val[0]
end
_rule_30(val) click to toggle source
# File lib/ll/parser.rb, line 318
def _rule_30(val)
  val[0]
end
_rule_31(val) click to toggle source
# File lib/ll/parser.rb, line 322
def _rule_31(val)
  val[0]
end
_rule_32(val) click to toggle source
# File lib/ll/parser.rb, line 326
def _rule_32(val)
  val[0]
end
_rule_33(val) click to toggle source
# File lib/ll/parser.rb, line 330
def _rule_33(val)
  val[0]
end
_rule_4(val) click to toggle source
# File lib/ll/parser.rb, line 188
def _rule_4(val)
  val[0]
end
_rule_5(val) click to toggle source
# File lib/ll/parser.rb, line 192
def _rule_5(val)
  val[0]
end
_rule_6(val) click to toggle source
# File lib/ll/parser.rb, line 196
def _rule_6(val)
  val[0]
end
_rule_7(val) click to toggle source
# 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) click to toggle source
# File lib/ll/parser.rb, line 206
def _rule_8(val)
   val[2] 
end
_rule_9(val) click to toggle source
# 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, token| ... } click to toggle source

@yieldparam [Symbol] type @yieldparam [String] value

# 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) click to toggle source

@see [LL::Driver#parser_error]

# 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) click to toggle source

@see [LL::AST::Node#initialize]

# File lib/ll/parser.rb, line 154
def s(*args)
  return AST::Node.new(*args)
end