Treetop: разбор строковых литералов?

Итак, я пытаюсь немного освоить ruby, немного TDD и немного Treetop.

У меня есть следующая грамматика для разбора строковых литералов:

grammar Str
  rule string
    '"'
    (
      !'"' . / '\"'
    )*
    '"'
  end
end

И следующий метод тестирования:

def test_strings
  assert @parser.parse('"Hi there!"')
  assert [email protected]('"This is not" valid')
  assert @parser.parse('"He said, \"Well done!\""')
end

Третий тест (с обратными слэшами) не проходит (строка не анализируется): почему?

Спасибо!


person Rom1    schedule 17.12.2011    source источник


Ответы (1)


Вам нужно поменять порядок проверки экранированных кавычек:

(
  '\"' / !'"' .
)*

В качестве другого примера, ваша грамматика также будет соответствовать этому:

"he said, \"

Правильное переворачивание чека также не дает результата.

person Dave Newton    schedule 17.12.2011
comment
Спасибо, это было! Как ни странно, пример, который я разместил, был тем, который фигурирует в официальной документации здесь - person Rom1; 17.12.2011
comment
Просто примечание: пример теперь исправлен на веб-сайте Treetop. - person Rom1; 19.12.2011