Gold Parser中的错误? LALR

时间:2009-08-03 05:03:49

标签: bnf gold-parser

这是我的bnf语法的一部分。

//this works
<ter-stmnt>     ::= <rval> '?' <rval> ':' <rval>
//this gets an error
<ter-stmnt>     ::= <bool-val> '?' <rval> ':' <rval>
<bool-val>      ::= <rval>

这看起来很疯狂,不应该第二次与第一次完全一样吗?我更喜欢阅读时的第二个bc,我看到我希望bool值与通用rval相反,这可能意味着什么。

我正在使用Gold Parser 3.4.4

2 个答案:

答案 0 :(得分:2)

您收到的错误是:

  

减少 - 减少冲突   
  '?'可以遵循多个已完成的规则​​。当语法允许同时减少两个或更多规则时,对于相同的令牌,会导致Reduce-Reduce错误。语法是暧昧的。有关更多信息,请参阅文档。

它说在评估了一些令牌之后,它无法确定它是仅读取<bool-val>还是读取<rval>

为了更有意义,你的语法应该说<bool-val>是什么,具体而言,然后说<rval><bool-val>或其他东西。

这是另一个example of a reduce/reduce errorhere's the GOLD documentation。 Gold会尝试隐藏(即发出警告而不是错误)关于shift / reduce,但它会将reduce / reduce视为错误。

我不完全理解这一点;我是解析的新手。也许你对这是出乎意料的行为是正确的吗?然而,GOLD邮件列表目前似乎有所下降,可能是因为它已经放缓并且Devin已经离线数月。

答案 1 :(得分:0)

你得到什么错误?你能包含你的整个语法文件吗?如果我宣布像...这样的规则,我不会收到任何错误。

<ter-stmnt>     ::= <bool-val> '?' <rval> ':' <rval>
<bool-val>      ::= <rval>
<rval>  ::= '!'