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