-1

我正在尝试在野牛中制作一个解析器,当我在解析器中使用某些单字符终端时,它给了我非常奇怪的编译错误。

这有效:

nonterminal1: 'a' nonterminal2 'b';

但这不会编译:

nonterminal1: '{' nonterminal2 '}';

我应该以某种方式逃避这些角色吗?我已经尝试了很多 Google 搜索并浏览了 O'Reilly 的 flex & bison 书,但找不到任何关于此的内容。

4

1 回答 1

1

反例证明:

%%
nonterminal1: 'a' nonterminal2 'b';
nonterminal1: '{' nonterminal2 '}';
nonterminal2: '.' | '!';

野牛毫无怨言地编译了它。我尝试了 Yacc 的 3 个其他变体;所有人都毫无怨言地编译了它。它也可以在没有 a/b 行的情况下编译。我只测试bison了在文件上运行;我没有在上面测试 C 编译器,但是如果 Bison 生成的代码无效,那将是令人惊讶的。

问题并不像您将其简化为那样简单。因此,请提供对您不起作用的实际 SSCCE(简短、自包含、正确示例)以及 Bison 的错误消息。如果有您指定的选项bison,也请告诉我们这些选项。bison如果问题是将(C 文件)的输出编译到目标文件中,您也应该说明这一点。

(据记录,Bison 的版本是 2.3,在 Mac OS X 10.7.5 上运行。)

请注意,如果您使用某些非编程编辑器,则引号字符可能会被转换为 ASCII '(39;Unicode U+0027)以外的其他内容。这会把事情扔掉。但是,尚不清楚为什么一条线被删除而另一条没有。您必须向我们显示错误消息,我们才能提供帮助。

于 2012-11-20T04:18:20.737 回答