Class: Keisan::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/keisan/parser.rb

Constant Summary collapse

KEYWORDS =
%w(let puts break continue).freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(string: nil, tokens: nil) ⇒ Parser

Returns a new instance of Parser.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/keisan/parser.rb', line 7

def initialize(string: nil, tokens: nil)
  if string.nil? && tokens.nil?
    raise Exceptions::InternalError.new("Invalid arguments")
  end

  if !string.nil?
    @tokens = Tokenizer.new(string).tokens
  else
    raise Exceptions::InternalError.new("Invalid argument: tokens = #{tokens}") if tokens.nil? || !tokens.is_a?(Array)
    @tokens = tokens
  end

  @components = []

  if multi_line?
    parse_multi_line!
  elsif @tokens.first&.is_a?(Tokens::Word) && KEYWORDS.include?(@tokens.first.string)
    parse_keyword!
  else
    parse_components!
    remove_unary_identity!
  end
end

Instance Attribute Details

#componentsObject (readonly)

Returns the value of attribute components.



5
6
7
# File 'lib/keisan/parser.rb', line 5

def components
  @components
end

#tokensObject (readonly)

Returns the value of attribute tokens.



5
6
7
# File 'lib/keisan/parser.rb', line 5

def tokens
  @tokens
end

Instance Method Details

#astObject



31
32
33
# File 'lib/keisan/parser.rb', line 31

def ast
  @ast ||= AST::Builder.new(parser: self).ast
end