class Aspen::AbstractParser
Attributes
position[R]
tokens[R]
Public Class Methods
new(tokens, env={})
click to toggle source
# File lib/aspen/abstract_parser.rb, line 16 def initialize(tokens, env={}) @tokens = tokens # Nothing is done with environment in the parser. # Calling #next will start at 0 @position = 0 end
parse(tokens, env={})
click to toggle source
# File lib/aspen/abstract_parser.rb, line 4 def self.parse(tokens, env={}) new(tokens).parse end
parse_code(code, env={}, lexer=Aspen::Lexer)
click to toggle source
Convenience method
# File lib/aspen/abstract_parser.rb, line 9 def self.parse_code(code, env={}, lexer=Aspen::Lexer) tokens = lexer.tokenize(code, env) parse(tokens, env) end
Public Instance Methods
expect(*expected_tokens)
click to toggle source
# File lib/aspen/abstract_parser.rb, line 23 def expect(*expected_tokens) upcoming = tokens[position, expected_tokens.size] if upcoming.map(&:first) == expected_tokens advance_by expected_tokens.size upcoming end end
first()
click to toggle source
# File lib/aspen/abstract_parser.rb, line 39 def first tokens.first end
last()
click to toggle source
# File lib/aspen/abstract_parser.rb, line 43 def last tokens.last end
need(*required_tokens)
click to toggle source
# File lib/aspen/abstract_parser.rb, line 32 def need(*required_tokens) upcoming = tokens[position, required_tokens.size] expect(*required_tokens) or raise Aspen::ParseError, <<~ERROR Unexpected tokens. Expected #{required_tokens.inspect} but got #{upcoming.inspect} ERROR end
next_token()
click to toggle source
# File lib/aspen/abstract_parser.rb, line 47 def next_token t = tokens[position] advance return t end
peek(offset = 0)
click to toggle source
# File lib/aspen/abstract_parser.rb, line 53 def peek(offset = 0) if offset > 0 tokens[position + 1..position + offset] else tokens[position] end end
Private Instance Methods
advance()
click to toggle source
# File lib/aspen/abstract_parser.rb, line 63 def advance advance_by 1 end
advance_by(offset = 1)
click to toggle source
# File lib/aspen/abstract_parser.rb, line 67 def advance_by(offset = 1) @position += offset end