这是在终端中运行的 lua 代码示例。它创建一个包含常量“FOO”的命名捕获
L = require('lpeg')
p1 = L.Cg(L.Cc('FOO'), 'foo')
print(L.Ct(p1):match("").foo)
它打印“FOO”,这意味着命名的捕获已正确定义
然后可以通过以下两种方式之一使用反向捕获:使用“lpeg.Cmt”或“/”运算符:
p2 = p1
* L.Cmt(
L.Cb('foo'),
function(_, i, c)
return i, c.." with Cmt"
end
)
-- * L.Cb('foo')
print(p2:match(""))
它打印“带有 Cmt 的 FOO”。
接下来要简单得多,并且类似地打印“FOO with /”
p3 = p1
* L.Cb('foo')
/ function(c)
return c.." with /"
end
-- * L.Cb('foo')
print(p3:match(""))
但是,当取消注释两者中的最后一个返回捕获时p2
,p3
后者抱怨“未找到反向引用'foo'”,而前者仍然有效。
似乎 lpeg/
运算符将命名捕获清除为副作用。
有人可以给出一些解释或指出一些解释这一事实的文件吗?