-1

我必须在野牛中构建一个编译器。我希望我的编译器像大多数编译器一样工作,如果有任何语法错误,请将它们全部列出,然后退出。问题是我对每个规则都有语义操作,我的编译器报告了所有的语法错误,但仍然执行了所有的语义操作。如果有语法错误,有没有办法告诉野牛忽略语义动作,但继续寻找所有语法错误?

谢谢!

4

1 回答 1

1

不清楚你在问什么。如果程序中的任何地方出现任何语法错误,您是否希望 bison 解析器根本不执行任何操作?这很困难,因为野牛会立即执行操作,因为它会减少规则,所以没有好的方法让它知道将来某个地方是否可能出现错误。对于语法错误的操作(假设您有错误恢复规则——如果您没有,它将在第一个语法错误后退出),您可以拥有一个全局标志并简单地让所有操作在执行任何操作之前测试该标志。

如果您想在第一个错误之前禁用操作,我唯一能想到的就是拥有两个具有相同语法的解析器——一个不执行操作,一个执行操作。使用第一个解析器确定是否有任何错误,然后回退输入并仅在没有错误时使用第二个解析器。

于 2014-11-09T20:31:10.053 回答