Грамматика 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
Другие вопросы по тегам