我正在尝试在 lua/lpeg 中创建一个自引用模式
local group = lpeg.P(sep1 * (1 - sep2)^0 * group^0 * sep2)
请注意,group 引用了自身。这是不可能的,因为 group 未定义。lpeg.V 在语法定义之外不起作用。有什么方法可以解决这个先有鸡还是先有蛋的问题吗?
答案1
明显的问题是,在定义中
local group = lpeg.P(sep1 * (1 - sep2)^0 * group^0 * sep2)
group
尚不清楚。您必须借助语法。
lpeg.P{
"group",
group = lpeg.P(sep1 * (1-sep2)^0 * lpeg.V"group"^0 * sep2
}
(未经测试)。这是因为引用团体现在是一个字符串,因此在定义时可以不定义。一旦表完成,它就必须是表的一个条目。