我有一堆的规则复杂Yacc的文件,他们中的一些复杂的,例如:如何在Yacc/Bison中看到我所看到的内容?
start: program
program: extern_list class
class: T_CLASS T_ID T_LCB field_dec_list method_dec_list T_RCB
确切的规则,我采取相应的行动并不重要,因为我想做的事情,似乎相当简单:只需使用我为其他目的定义的规则打印出现在源文件中的程序即可。但我很惊讶这样做有多困难。
首先,我尝试在上面的第二条规则中添加printf("%s%s", $1, $2)
。这产生了“ @P @”。根据我的理解,解析后的文本也可以作为变量,yytext
。我将printf("%s", yytext)
添加到文件中的每个规则,并将extern char* yytext;
添加到文件的顶部。这根据语言的语法从有效文件生成(null){void)1133331122222210101010--552222202020202222;;;;||||&&&&;;;;;;;;;;}}}}}}}}
。最后,我将extern char* yytext;
更改为extern char yytext[]
,认为这没有什么区别。它的输出差异最好显示为截图
我在Xubuntu 14.04上使用Bison 3.0.2。