class Parser::Parser
Public Class Methods
new()
click to toggle source
# File lib/amy/parser/parser.rb, line 7 def initialize @lexer = Lexer.new end
Public Instance Methods
parse(file)
click to toggle source
# File lib/amy/parser/parser.rb, line 11 def parse(file) @lexer.set_input(file) parse_tokens(@lexer) end
Private Instance Methods
parse_defs(lexer)
click to toggle source
# File lib/amy/parser/parser.rb, line 30 def parse_defs(lexer) defs = Defs.new return defs if (lexer.eof?) finish = false prop = "" value = "" mode = :normal while (not lexer.eof? and not finish) token = lexer.next if :normal == mode and token.is_ct? then set_property defs, prop, value finish = true elsif :content == mode and token.is_p? and "@end" == token.value then mode = :normal set_property defs, prop, value elsif prop.empty? and token.is_p? then prop = token.value mode = :content if "@content" == prop elsif not prop.empty? and token.is_p? then set_property defs, prop, value prop = token.value value = "" mode = :content if "@content" == prop elsif not prop.empty? and token.is_s? then value << " #{token.value}" end end lexer.next defs.method = lexer.next.value finish = false lexer.next while(not lexer.eof? and not finish) token = lexer.next if ["'", '"'].include?(token.value) then finish = true else defs.url << token.value end end return defs end
parse_tokens(lexer)
click to toggle source
# File lib/amy/parser/parser.rb, line 18 def parse_tokens(lexer) defs = [] while(not lexer.eof?) token = lexer.next if token.is_ct? then _def = parse_defs(lexer) defs << _def unless _def.empty? end end return defs end
set_property(defs, prop, value)
click to toggle source
# File lib/amy/parser/parser.rb, line 72 def set_property(defs, prop, value) if ("@params" == prop) then params = {} fields = value.split(" ") last_key = "" fields.each_with_index do |field, i| if (i%2 == 0) then last_key = field else params[last_key] = field last_key = "" end end defs.add_prop prop, params else defs.add_prop prop, value.strip end end