Revert "Test a different lexer architechture"

This reverts commit 24ddaf1a9c.
This commit is contained in:
Tristan Hume
2013-07-26 09:52:04 -04:00
parent 24ddaf1a9c
commit c0b9d53548
+17 -26
View File
@@ -29,17 +29,11 @@ module Liquid
'[' => :open_square, '[' => :open_square,
']' => :close_square ']' => :close_square
} }
IDENTIFIER = /[\w\-]+/
MATCHERS = { SINGLE_STRING_LITERAL = /'[^\']*'/
/([\w\-]+)/ => :id, DOUBLE_STRING_LITERAL = /"[^\"]*"/
/('[^\']*')/ => :string, INTEGER_LITERAL = /-?\d+/
/("[^\"]*")/ => :string, FLOAT_LITERAL = /-?\d+(?:\.\d+)?/
/(-?\d+)/ => :integer,
/(-?\d+(?:\.\d+)?)/ => :float
}
MATCHER_REGEX = Regexp.union(MATCHERS.keys)
MATCHER_TOKENS = MATCHERS.values
def initialize(input) def initialize(input)
@ss = StringScanner.new(input) @ss = StringScanner.new(input)
@@ -62,23 +56,20 @@ module Liquid
consume_whitespace consume_whitespace
return if @ss.eos? return if @ss.eos?
tok_contents = @ss.scan(MATCHER_REGEX) case
tok_type = nil when t = @ss.scan(IDENTIFIER) then Token[:id, t]
MATCHER_TOKENS.each_with_index do |type, i| when t = @ss.scan(SINGLE_STRING_LITERAL) then Token[:string, t]
if @ss[i+1] when t = @ss.scan(DOUBLE_STRING_LITERAL) then Token[:string, t]
tok_type = type when t = @ss.scan(INTEGER_LITERAL) then Token[:integer, t]
break when t = @ss.scan(FLOAT_LITERAL) then Token[:float, t]
else
c = @ss.getch
if s = SPECIALS[c]
return Token[s,c]
end end
raise SyntaxError, "Unexpected character #{c}."
end end
return Token[tok_type, tok_contents] if tok_type
c = @ss.getch
if s = SPECIALS[c]
return Token[s,c]
end
raise SyntaxError, "Unexpected character #{c}."
end end
def consume_whitespace def consume_whitespace