在普通的 PEG(解析表达式语法)中,这是一个有效的语法:
values <- number (comma values)*
number <- [0-9]+
comma <- ','
但是,如果我尝试使用 LPeg 编写此规则,则该规则的递归性质将失败:
local lpeg = require'lpeg'
local comma = lpeg.P(',')
local number = lpeg.R('09')^1
local values = number * (comma * values)^-1
--> bad argument #2 to '?' (lpeg-pattern expected, got nil)
尽管在这个简单的示例中我可以重写规则以不使用递归,但我有一些现有的语法我不想重写。
如何在 LPeg 中编写自引用规则?