使用害虫解析器为变量构建语法

Building a grammar for variables with pest parser

使用害虫解析器我正在尝试构建一个可以识别变量名的语法,但我无法让变量在下一个 space/non-alpha 字符处结束。我尝试使用...

var_name = {!reserved ~ ASCII_ALPHA+} 非常适合单字母变量

var_name = {!reserved ~ ASCII_ALPHA+} 但这包括 space 当我执行 x := 1 时,我的解析器将 var_name 视为“x”。即使我同意,它也不适用于解析较大的表达式 while true do { if a < b then b := b - a else a := a - b } => parse error

var_name = {!reserved ~ ASCII_ALPHA | ASCII_ALPHA+} 反应类似于单字符选项。

我也尝试过使用 'a'..'z'、字母数字和其他选项,但没有改变。我可能从 book 中遗漏了一些东西,但我似乎找不到任何有用的东西。

附加信息:

谢谢,感谢任何帮助

我找到答案了。

var_name = @{!reserved ~ ASCII_ALPHA ~ ASCII_ALPHANUMERIC*}

摘自本书:'Both kinds of atomic rule prevent implicit whitespace: inside an atomic rule, the tilde ~ means "immediately followed by"'

我之前尝试过这个但卡住了,不过这很简单。

@ 表示没有空格,!reserved 将保留字保留在变量之外。 ASCII_ALPHA 变量以字母字符开头,紧跟其后可以有 0 个或多个字母数字字符。

希望这对遇到此问题的其他人有所帮助。