class Aspen::CustomGrammar::Parser

Public Instance Methods

parse() click to toggle source

expression = { segment } segment = BARE || capture_segment capture_segment = OPEN_PARENS, type, VAR_NAME, CLOSE_PARENS type = { node CONTENT } || numeric | float | integer | string

# File lib/aspen/custom_grammar/parser.rb, line 10
def parse
  Aspen::CustomGrammar::AST::Nodes::Expression.new(parse_expression)
end
parse_bare_segment() click to toggle source
# File lib/aspen/custom_grammar/parser.rb, line 31
def parse_bare_segment
  if content = expect(:BARE)
    Aspen::CustomGrammar::AST::Nodes::Bare.new(content.first.last)
  end
end
parse_capture_segment() click to toggle source
# File lib/aspen/custom_grammar/parser.rb, line 37
def parse_capture_segment
  if (_, type, var_name, _ = expect(:OPEN_PARENS, :TYPE, :VAR_NAME, :CLOSE_PARENS))
    type_name, label = type.last

    Aspen::CustomGrammar::AST::Nodes::CaptureSegment.new(
      type:     type_name.to_sym,
      var_name: var_name.last,
      label:    label
    )
  end
end
parse_expression() click to toggle source
# File lib/aspen/custom_grammar/parser.rb, line 14
def parse_expression
  segments = []

  # Make sure this returns on empty
  while segment = parse_segment
    segments << segment
    break if tokens[position].nil?
  end

  segments
end
parse_segment() click to toggle source
# File lib/aspen/custom_grammar/parser.rb, line 26
def parse_segment
  return parse_bare_segment || parse_capture_segment
  raise Aspen::ParseError, "Didn't match expected tokens, got\n\t#{upcoming.inspect}"
end