Add \s to expand to whitespace characters

This commit is contained in:
Josh Holtrop 2021-06-09 22:37:00 -04:00
parent c6bac6d3a1
commit f67dd62b20
3 changed files with 31 additions and 0 deletions

View File

@ -136,6 +136,15 @@ module Imbecile
case c
when "d"
CharacterRangeUnit.new("0", "9")
when "s"
ccu = CharacterClassUnit.new
ccu << CharacterRangeUnit.new(" ")
ccu << CharacterRangeUnit.new("\t")
ccu << CharacterRangeUnit.new("\r")
ccu << CharacterRangeUnit.new("\n")
ccu << CharacterRangeUnit.new("\f")
ccu << CharacterRangeUnit.new("\v")
ccu
else
CharacterRangeUnit.new(c)
end

View File

@ -98,6 +98,15 @@ module Imbecile
def method_missing(*args)
@units.__send__(*args)
end
def <<(thing)
if thing.is_a?(CharacterClassUnit)
thing.each do |ccu_unit|
@units << ccu_unit
end
else
@units << thing
end
end
def last_unit
@units[-1]
end

View File

@ -90,6 +90,19 @@ EOF
expect(run(<<EOF, "+++")).to eq expected
token plus \\+
token plusplus \\+\\+
EOF
end
it "lexes whitespace" do
expected = [
["foo", "foo"],
["WS", " \t"],
["bar", "bar"],
]
expect(run(<<EOF, "foo \tbar")).to eq expected
token foo
token bar
token WS \\s+
EOF
end
end