我試圖做一個解析器與快樂(Haskell工具)但我收到一個消息錯誤:「未使用的規則:11和未使用的終端:10」,我不知道這是什麼意思。另一方面,我真的不確定在規則聲明中使用$ i參數,我認爲我的錯誤是因爲這一點。如果有任何可以幫助我......解析器在快樂
解析器在快樂
回答
未使用的規則和終端是您的語法的一部分,如果我正確記得,它是無法從頂級語法分析語句達到的。要了解如何使用$$參數,請閱讀happy user guide。
The $$ symbol is a placeholder that represents the value of this token. Normally the value of a token is the token itself, but by using the $$ symbol you can specify some component of the token object to be the value.
這不是一個錯誤,如果你得到這些信息,它只是意味着你的語法的一部分是未使用的,因爲它不是從一開始就象徵到達。要查看有關幸福如何理解你的語法的更多信息,請使用--info
標誌快樂:
happy --info MyParser.y
產生另外一個文件MyParser.info
平時MyParser.hs
。
謝謝,我會試試:) – Anny 2010-06-27 17:47:34
未使用的規則和終端意味着您已經描述瞭解析過程中無法達到的規則(非常類似於「如果是true then 1 else 2」,則永遠不會到達2分支)。 檢查--info的輸出以獲取更多詳細信息。
對於$$的事情,它是一個數據提取:讓我們說你有一個產生以下類型的令牌 詞法分析:
data TokenType = INT | SYM
data TokenLex = L TokenType String
其中TokenType就是在這裏有用的區分數據和關鍵字。
在你的解析器的動作,你可以用$$
%token INTEGER {L INT $$ }
%token OTHER {L _ $$}
foo : INTEGER bar INTEGER { read $1 + read $3 }
| ...
在這個規則中提取字符串部分,$ 1表示「給我的第一個整數的內容」和$ 3「的內容第二個INTEGER「。 $ 2意味着「給我吧」的內容(這可能是另一個複雜的規則)
感謝$$,$ 1和$ 3是geniune Haskell字符串,因爲我們告訴Happy,「INTEGER的內容是」String「部分TokenLex「,而不是整個令牌
- 1. 語法快樂解析器含義
- 2. 如何重寫語法消除移減少衝突(在Haskell快樂解析器)
- 3. 移位/減少在命題邏輯分析器衝突快樂
- 4. 哈斯克爾 - 快樂,數學表達式和變量解析器
- 5. 如何將函數作爲參數傳遞給生成的快樂解析器?
- 6. Json解析在歡樂或Json在歡樂或HL7 JSON在歡樂
- 7. 如何在python中使用解析器播放音樂?
- 8. 快速CSV解析
- 9. 快速解析(Tableview)
- 10. 德爾福 - 快速(er)XML解析器
- 11. 快速,輕量級HTML解析器C++
- 12. 用於Matlab的快速JSON解析器
- 13. 真正快速的C++ html解析器
- 14. 一個快速的Python HTML解析器
- 15. 的node.js,快遞/身體解析器
- 16. 與快樂
- 17. 使用解析服務器在快速應用中使用解析Javascript SDK
- 18. CoreMidi解析MIDI樂曲位置
- 19. 快捷方式URL的快捷方式(.lnk .url)解析器
- 20. 問題導入XML與Laravel包管絃樂/解析器
- 21. 解析在python lxml的解析器
- 22. 快速解析數據
- 23. 加快xml解析與PHP
- 24. 快速解析字典
- 25. 用Python解析更快
- 26. 快速解析內容PARAMS
- 27. JSON快速解析3
- 28. PHP解析停止太快
- 29. 在SAX解析器
- 30. 解析器在android
但是,什麼意思是$ i參數?我正在閱讀用戶指南,但唯一的說法是$ i參數的'i'必須更短比生產右側的符號數量...但我看到了一些例子,我得到的是每個$ i符號都對應於一種對象或表達式 – Anny 2010-06-24 19:08:13
所以你告訴我,當我編譯file.y,它顯示了一條未使用的規則消息,是否可以? – Anny 2010-06-24 19:10:10