當語法錯誤發生時,是否有已知方法生成「預期代幣」列表?我使用檸檬作爲解析器生成器。使用檸檬分析器生成器的「預期代幣」
5
A
回答
9
這似乎工作:
%syntax_error {
int n = sizeof(yyTokenName)/sizeof(yyTokenName[0]);
for (int i = 0; i < n; ++i) {
int a = yy_find_shift_action(yypParser, (YYCODETYPE)i);
if (a < YYNSTATE + YYNRULE) {
printf("possible token: %s\n", yyTokenName[i]);
}
}
}
它會嘗試所有可能的令牌,並打印那些適用於當前的解析器的狀態。
請注意,當不正確的令牌到來時,解析器不會立即調用syntax_error,但會嘗試減少堆棧上的內容,希望該令牌可以在之後進行移位。只有當沒有其他東西可以減少並且當前令牌不能移動時,解析器纔會調用syntax_error。這種減少會改變語法分析器的狀態,這意味着您可能會看到更少的令牌比減少之前的適用值更小。儘管錯誤報告應該足夠了。
1
沒有直接的方法可以在檸檬中生成這樣的列表。但是您可以嘗試使用Lemon工具的調試輸出以及生成的解析器的調試跟蹤來執行此操作。在調用ParseTrace函數後,生成的解析器將打印出Shifts和Reduce列表,並將其應用於輸入流。語法錯誤之前的最後一個Shift包含錯誤之前的當前狀態的編號。在* .out文件中爲您的解析器查找此狀態,並查看它的預期記號列表。
相關問題
- 1. 從檸檬語法分析器生成器生成LR分析表
- 2. 檸檬解析器生成器:非終端不被評估?
- 3. 使用檸檬分析器和自定義令牌值
- 4. 使用檸檬解析器(LALR)生成一個調用器,如何從表達式中獲取參數
- 5. 檸檬解析器LALR(1)還是SLR(1)?
- 6. 使用STL容器,檸檬圖形庫初始化圖形
- 7. 使用Dijkstra算法和檸檬圖庫
- 8. 使用檸檬(和核心基金會)解析JSON
- 9. 檸檬水消費量預測 - 哪種機器學習方法最適合?
- 10. 來自Omnet ++網絡的檸檬圖
- 11. 檸檬語法問題(優先級?)
- 12. 檸檬圖庫C++ - 定向圖
- 13. 使用Rcpp的R上的檸檬圖庫
- 14. 在解析(檸檬)中恢復錯誤標記
- 15. Python3語法分析器生成器
- 16. 如何在Omnet ++項目上使用檸檬圖庫?
- 17. 預期':'在'之前'。'代幣
- 18. Lucene的查詢分析器無法分析領域如預期
- 19. 如何使用antlr生成的解析器和詞法分析器?
- 20. 免費替代仿函數生成optparse,應用性分析器
- 21. 使用預處理器宏的代碼生成
- 22. 如何使用ANTLR4和Maven自動生成詞法分析器+解析器?
- 23. 不生成預期輸出的代碼
- 24. 如何從檸檬語法中刪除函數調用歧義?
- 25. Xcode flex詞法分析器未生成
- 26. antlr生成詞法分析器但不解析器
- 27. 分析器錯誤:「)」預計
- 28. 使用ADO.NET生成代碼後重組代碼DbContext生成器
- 29. 如何使用寧靜代碼生成器生成代碼(.ts)
- 30. 無掃描器解析器生成器
正是我所要求的!但是,您忘記了'yypParser'作爲yy_find_shift_action的第一個參數:) – 2012-10-30 15:58:13