class Ascode::Parser::Main

Public Class Methods

new(code, impl_o = true) click to toggle source
# File lib/ascode/parser/main.rb, line 8
def initialize(code, impl_o = true)
  @function = Function.new
  @code = code

  @do_implicit_output = impl_o
end

Public Instance Methods

block(index) click to toggle source
# File lib/ascode/parser/main.rb, line 50
def block(index)
  block = ConditionBlock.new @code, index
  @ast.push block.parse
  @skip_chars = block.block.length
end
character(char, index) click to toggle source
# File lib/ascode/parser/main.rb, line 34
def character(char, index)
  if char == "\"" || char =~ /[0-9.]/
    literal index
  elsif char == "["
    block index
  else
    function char
  end
end
function(char) click to toggle source
# File lib/ascode/parser/main.rb, line 56
def function(char)
  function = @function.parse char
  return unless function
  @implicit_output = false if function[:action] == "output"
  @ast.push function
end
literal(index) click to toggle source
# File lib/ascode/parser/main.rb, line 44
def literal(index)
  literal = Literal.new @code, index
  @ast.push literal.parse
  @skip_chars = literal.length
end
parse() click to toggle source
# File lib/ascode/parser/main.rb, line 15
def parse
  @ast = []
  @skip_chars = 0
  @implicit_output = @do_implicit_output

  @code.split("").to_enum.each_with_index do |char, index|
    if @skip_chars > 0
      @skip_chars -= 1
      next
    end

    character char, index
  end

  @ast.push(type: :io, action: "output") if @implicit_output

  @ast
end