1

所以,我正在努力学习一点 ruby​​、一点 TDD 和一点 Treetop。

我有以下用于解析字符串文字的语法:

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

以及以下测试方法:

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

第三个测试(带有反斜杠的那个)没有通过(字符串没有被解析):为什么?

谢谢!

4

1 回答 1

2

您需要交换转义引号检查的顺序:

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

作为另一个例子,你的语法也将匹配这个:

"he said, \"

正确地翻转检查也会失败。

于 2011-12-17T17:00:37.963 回答