4

类似的问题作者的网站给了我这样的解决方案:

Identifier "identifier"
  = !ReservedWord [A-Za-z_]+

ReservedWord
  = "test"
  / "abc"

此解决方案无法解析像“test_var”这样的标识符。

在此示例中,语法 !ReservedWord 将排除所有以“test”或“abc”开头的变量。

提前致谢。

4

1 回答 1

6

ReservedWord成功,当保留字完成时,不管后面是什么。因此,解决方案是在包含更多标识符字符的更长匹配项时使其失败:

Identifier "identifier"
  = !ReservedWord [A-Za-z_]+

ReservedWord
  = ( "test" / "abc" ) ![A-Za-z_]
于 2012-07-30T11:35:15.610 回答