Грамматика Treetop не распознает "/"
Я новичок в Treetop, и у меня очень простая грамматика, которую я просто не могу заставить работать. У меня есть несколько тестов:
it "parses a open tag as some text surrouded by brackets" do
document = "[b]"
Parser.parse(document).should_not be_nil
end
it "parses a close tag as a tag with a / preceeding the tag name" do
document = '[/b]'
Parser.parse(document).should_not be_nil
end
Это моя грамматика:
grammar BBCode
rule open_tag
"[" tag_name "]"
end
rule tag_name
[a-zA-Z\*]+
end
rule close_tag
"[/" tag_name "]"
end
end
Первый тест пройден, второй тест не пройден. Я также попробовал эти альтернативные правила:
"[" [\/] tag_name "]"
"[" "/" tag_name "]"
"[\/" tag_name "]"
все из которых терпят неудачу.
Кажется, я не могу распознать закрывающий тег, что бы я ни пытался.
1 ответ
Решение
Я нашел эту проблему: https://github.com/nathansobo/treetop/issues/25, и, похоже, он ответил на мой вопрос.
Моя грамматика не содержала правила верхнего уровня, которое позволяло бы открывать или закрывать тег, поэтому вторая возможность даже не рассматривалась:
grammar BBCode
rule document
(open_tag / close_tag)
end
rule open_tag
("[" tag_name "]")
end
rule tag_name
[a-zA-Z\*]+
end
rule close_tag
("[/" tag_name "]")
end
end