我有一堆的規則複雜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。