我對如何從 yacc 程式列印 LALR(1) 決議表一無所知。我知道在幕后,yacc 將語法轉換為決議表,以及其他額外的 C 代碼。
我想在控制臺上列印狀態以及操作(移位、減少和接受),類似于此影像。我想出了這個。程式列印Valid,如果它遵循語法規則,否則Invalid declaration。
uj5u.com熱心網友回復:
我不確定你所說的“決議表”是什么意思。
正如您在第一段中所說,決議表驅動決議器;它列出了每個決議器狀態的可能轉換。.output如果您使用命令列選項,Bison 將在帶有前綴的檔案中列印整個狀態表--report=states,itemsets。您也可以將其作為 Graphviz 檔案獲取,盡管使用該--graph選項僅對小型語法有用。
但是,您在第二段中鏈接的影像沒有顯示決議表。它顯示的是具有特定輸入的決議器的進度。這通常被稱為“痕跡”,野牛也可以產生這種痕跡。你需要做兩件事:
提供
-t命令列選項(您也可以將其寫為--debug),這會導致生成跟蹤代碼。將全域變數設定
yydebug為1在您的main()函式中。請注意,yydebug除非您按照第 1 步操作,否則不會存在。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/367135.html
