使用Menhir解析元素元组遇循环语法错误求正确实现方案
解决Menhir中元素元组/列表的循环语法错误
你遇到的循环语法错误,根源是规则里的递归逻辑有问题:separated_nonempty_list(SEPARATOR_TOKEN, elements)要求解析elements时先解析另一个elements,形成了无限递归的死循环。
正确的做法是拆分单个元素和元素列表的规则,具体实现如下:
- 先定义单个元素的基础规则(命名为
element,根据你的实际语法需求补充具体项):
element: | IDENTIFIER (* 示例:标识符 *) | INTEGER_LITERAL (* 示例:整数字面量 *) | STRING_LITERAL (* 示例:字符串字面量 *)
- 基于单个元素规则定义元素列表(即你要的
elements (SEPARATOR_TOKEN) elements...结构):
elements: | separated_nonempty_list(SEPARATOR_TOKEN, element)
如果需要支持嵌套的元素列表(比如元组里包含另一个元组),只需在element规则中加入对elements的嵌套引用即可:
element: | IDENTIFIER | INTEGER_LITERAL | STRING_LITERAL | LPAREN elements RPAREN (* 支持用括号包裹的嵌套列表/元组 *)
这样拆分后,elements明确表示由多个独立element通过分隔符连接而成,既满足你需要的列表结构,又彻底避免了循环递归问题。
内容的提问来源于stack exchange,提问作者GGH
相关产品推荐
相关产品推荐

