class Ascode::Parser::ConditionBlock
Attributes
block[R]
Public Class Methods
new(code, block_begin)
click to toggle source
# File lib/ascode/parser/condition_block.rb, line 8 def initialize(code, block_begin) @code = code @begin = block_begin + 1 @true = "" @false = "" end
Public Instance Methods
ast_action()
click to toggle source
# File lib/ascode/parser/condition_block.rb, line 69 def ast_action @ast = { action: "condition", true_block: @true, false_block: @false } end
find(what)
click to toggle source
# File lib/ascode/parser/condition_block.rb, line 30 def find(what) level = 0 skip = 0 @block.split("").to_enum.each_with_index do |char, index| if skip > 0 skip -= 1 next elsif char == "\"" literal = Literal.new @block, index literal.parse skip = literal.length else return index if char == what && level.zero? level += 1 if char == "[" level -= 1 if char == "]" end end -1 end
parse()
click to toggle source
# File lib/ascode/parser/condition_block.rb, line 16 def parse @block = @code[@begin..-1] @end = find "]" raise "Unmatched '[' detected." if @end == -1 @block = @block[0..(@end - 1)] @split_pos = find ":" split ast_action end
parse_part(part)
click to toggle source
# File lib/ascode/parser/condition_block.rb, line 65 def parse_part(part) (Main.new part, false).parse end
split()
click to toggle source
# File lib/ascode/parser/condition_block.rb, line 51 def split if @split_pos == -1 @true = @block elsif @split_pos.zero? @false = @block else @true = @block[0..(@split_pos - 1)] @false = @block[(@split_pos + 1)..-1] end @true = parse_part(@true) @false = parse_part(@false) end