天天看點

《ANTLR 4權威指南》——第3章入門的ANTLR項目

本節書摘來自華章社群《antlr 4權威指南》一書中的第3章入門的antlr項目,作者[美] 特恩斯·帕爾(terence parr),更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

第3章

入門的antlr項目

作為我們的第一個antlr項目,我們會構造一個文法,它是c語言或其繼承者java文法的一個很小的子集。具體來說,我們将識别包裹在花括号或者嵌套的花括号中的一些整數,像是{1, 2, 3}和{1, {2, 3}, 4}這樣。這樣的結構可以作為int數組或者c語言中的結構體的初始化語句。在很多情況下,針對這種文法的文法分析器都非常有用。例如,我們可以用它來建構一個對c語言的源代碼進行重構的工具,這個工具能夠完成這樣的工作:如果初始化語句中所有的整數值都能用一個位元組表示,那麼将該整數數組轉換為位元組數組。我們也可以用這個文法分析器将java的short數組轉換為字元串。例如,我們可以将short值當作unicode字元,進而将

《ANTLR 4權威指南》——第3章入門的ANTLR項目

其中像u0001這樣的unicode字元标記使用四個十六進制數字來表示一個16位的字元。實際上,這樣的字元就是一個short值。

我們這樣做的原因是為了不受java的.class檔案格式的限制。java的class檔案将數組的初始化語句存儲為一系列顯式的數組元素指派語句,上面的初始化語句等價為data[0] = 1; data[1] = 2; data[2] = 3;。這限制了我們能夠使用這種方法來初始化的數組的大小。相比之下,java的class檔案将字元串存儲為連續的short序列,進而不受上述限制限制。将數組的初始化語句轉換為字元串可以得到更緊湊的class檔案,避免了java的對初始化方法的長度限制。

通過這個入門的項目示例,你将會學到如下内容:一些antlr文法的語義元素定義、antlr根據文法自動生成代碼的機制、如何将自動生成的文法分析器和java程式內建,以及如何使用文法分析樹監聽器編寫一個代碼翻譯工具。