【问题标题】:Bison error -expected $endBison 错误 - 预期 $end
【发布时间】:2011-08-04 22:48:19
【问题描述】:

我正在 Bison 中开发解析器。在解析一个测试用例时,Bison 给出了一个语法错误,说它期望 $end,但是有更多的标记。我已经在 Bison 手册中搜索了 $end,但它似乎并没有指出它在什么条件下会期望该令牌。我使用了形式的递归规则

%start program

%%

program 
   : rule
   | program rule;

定义我的语法的根。 Bison 很高兴匹配rule 的前三个调用,但抛出第四个,说它期望 $end。我如何向 Bison 表明它应该期待并匹配更多的令牌?

【问题讨论】:

    标签: bison


    【解决方案1】:

    听起来您的问题出在细节上。输入流末尾附近的内容与“规则”不匹配。打开调试,看看它告诉你什么(如果你不熟悉它们,请查看 YYDEBUG 和 yydebug。)

    要明确一点:当您说“第四次调用”时,我假设您的意思是“第四次独立测试用例”(因此它是第四次的事实是无关紧要的。)或者您的意思是输入流匹配“规则" 4 次失败,但匹配 3 次成功?

    【讨论】:

    • 我的意思是我有一个测试用例应该调用规则大约五次,但是 Bison 在前三个之后抛出了提到的错误。这都是一次测试。我使用了 YYDEBUG 并记录了词法分析器提供的令牌。
    • 你说的完全正确,rule 实际上与来的不匹配。我禁用了部分语法并忘记重新启用它。哦,这就是我要测试的内容。
    • 我已经做了一百次同样的事情。 (这个 lex/yacc 的东西总是能挑战我。)很高兴你把它整理好了。
    猜你喜欢
    • 1970-01-01
    • 2019-04-26
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2015-08-16
    相关资源
    最近更新 更多