Menhir解析元素元组



你好,当我必须用解析器处理元素元组时,我有一项工作,但它会给我带来循环语法错误。有什么方法可以正确地做到这一点吗?

elements: | separated_nonempty_list(SEPARATOR_TOKEN,elements)

我在找这样的东西:

元素(SEPARATOR_TOKEN(元素。。。(列表(

谢谢

如果元素是元组(逗号分隔列表(或单字符终端,则"a,b,c,d"可以解析为(a, (b, c, d))(a, b, (c, d))(a,(b,(c,(d))))((((a),b),c),d)等,其中我用括号标记了元组。

这是一个循环语法错误,因为为了解析元组,你可能需要首先解析元组(如果你有回溯机制,你可以解析它,你想尝试不同的方法来解析字符串,但在你的情况下,你想要确定性语法(。

您应该有另一个非终端名称,例如atom(或atomic_element(,并确保您的元素可以是原子列表。

如果你想让元素递归地包含元素,你必须添加一层消歧层,例如括号:

atom : <single-letter>
| '(' elements ')'

最新更新