2009-12-02 48 views
1

我看到幾個C()的樣例main(),例如, http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3http://www.antlr.org/api/C/index.html尋找Antlr 3/C sample main()

提領似乎是AST。我不知道那是什麼,並且 - 請原諒我 - 不想如果我能避免它。

我很想知道如何定義詞法分析器&語法(用於調制解調器AT命令),並具有main()自動生成或從某處剪切/粘貼的功能。

起家輕微的扭曲是最例子似乎從文件中讀取,而我會得到一系列的輸入(AT命令)的字符串,作爲參數傳遞。

任何人都可以請點我在一個簡單的main(),我可以適應(也許建議藿適應嗎?)有很多問我知道,對不起。

回答

2

AST是一個「抽象語法樹」,對於AT命令你不需要它。

事實上,ANTLR對於解析AT命令來說是過分的。爲什麼不檢查「AT」,然後手動解析命令?調制解調器命令集可能非常簡單,以至於如果你以前從未做過ANTLR,那麼做起來會更簡單。

如果要實現一個完整的AT命令集,包括「+++」轉義序列,時間也是你將不能夠單獨使用ANTLR來實現的一個因素。

迴應評論:

看到ANTLR作爲一種工具來減少錯誤是合理的。在回答你的問題時:「你願意閱讀還是已經制作好的代碼?你寧願保留哪一個?」,答案是「這取決於」。我根據上下文使用ANTLR和手工編碼解析器;這是我選擇手動編碼解析器的上下文。一些原因:可能是嵌入式應用程序,相對簡單(許多命令不等於複雜性),通信協議。你有不同的背景,顯然有你自己的理由,包括「試用」。

因此,要回答你對主的其他問題:是的,你可以使用在ANTLR維基之一。要從一塊內存中讀取,請使用antlr3NewAsciiStringInPlaceStream()antlr3NewAsciiStringCopyStream()(根據需要)而不是antlr3AsciiFileStreamNew()

+0

感謝澄清AST ;-) 順便說一句,你可以點我在樣品的main()?我可以在http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3上使用它嗎? – Mawg 2009-12-03 03:12:02

+0

我認爲你「誤解」了AT命令的複雜性。一般來說,對於任何非平凡的語法,我都會更喜歡解析器,而不是手工製作。首先,AntlrWorks語法的可視化表示已經幫助我發現了一些錯誤,代碼閱讀和單元測試可能不會從手工解析器中獲得所有錯誤,我將Antlr看作是另一種幫助減少錯誤數量的工具。 我在之前的工作中看到一個災難性的手工解析器後,通過一種興趣來做這件事。 27.007,我認爲,25.007(短信)有幾百個命令。 – Mawg 2009-12-03 03:13:01

+0

訣竅是有些人有可選的子部分,哦,我只是認爲閱讀和維護詞法分析器/解析器比手寫代碼更容易。 我會張貼詳細的撥號comamnd,這是最複雜的,在幾個意見(由於大小限制)之一,以顯示我的意思... – Mawg 2009-12-03 03:13:51