Bison Parser中的单字符文字

时间:2012-11-20 03:14:23

标签: bison

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

这有效:

nonterminal1: 'a' nonterminal2 'b';

但这不会编译:

nonterminal1: '{' nonterminal2 '}';

我应该以某种方式逃避这些角色吗?我已经尝试了不少谷歌搜索并浏览了O'Reilly的flex&野牛书但却找不到任何相关内容。

1 个答案:

答案 0 :(得分:1)

反例证明:

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

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

问题并不像你减少它那么简单。因此,请提供实际的SSCCE(Short, Self-Contained, Correct Example),其中包含对您不起作用的内容以及来自Bison的错误消息。如果您有bison指定的选项,请告诉我们这些选项。如果问题是将bison(一个C文件)的输出编译成一个目标文件,你也应该说明。

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

请注意,如果您使用的是某些非编程编辑器,则可能会将引号字符用于ASCII '以外的其他内容(39; Unicode U + 0027)。这会让事情失去意义。但是,目前尚不清楚为什么有一条线路被淹没而另一条线路没有。您必须向我们显示错误消息,以便我们能够提供帮助。