我有一个小语法来解析用lua编写的配置文件。这很好,但是,一个定义让我有些头疼。考虑以下(简化而非完整)语法:
funlistdef
=
"list" "=" "{" ','.{ fundef }+ "link" &"=" linktypes "}"
;
linktypes
=
| "'first'"
| "'add'"
;
fundef
=
| "{" detaileddef { "," shapedef } "}"
| directdef
;
directdef
=
| numerical_literal
| lua
| simplevectordef
;
lua
=
string_literal [ "(" arguments ")" ]
;
这是我要解析的文本(...
是与这个问题无关的更多内容的占位符):
test = {
list = {
{ const = 1, shape = ... },
{ fun = return_1, shape = ... },
link = 'add'
}
}
列表中的前两个表按预期进行解析,但link = 'add'
被解释为fundef-> directdef-> lua-> string_literal。这是(使用当前语法)实际上甚至不是错误。
所以问题是:如何更改语法以使link = 'add'
不被解析为fundef-> directdef-> lua-> string_literal?在=
之后是否有类似提前操作员识别link
的内容?或者可能会在"link" "=" linktypes
部分之前确定','.{ stfundef }+
部分的优先级?