让grako向前看/周围

时间:2018-03-23 11:35:00

标签: python-3.x peg grako

我有一个小语法来解析用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 }+部分的优先级?

0 个答案:

没有答案