複製鏈接
請複製以下鏈接發送給好友

antlr

鎖定
antlr是指可以根據輸入自動生成語法樹並可視化的顯示出來的開源語法分析器。ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它為包括Java,C++,C#在內的語言提供了一個通過語法描述來自動構造自定義語言的識別器(recognizer),編譯器(parser)和解釋器(translator)的框架。
中文名
antlr
外文名
Another Tool for Language Recognition
概    念
開源語法分析器
優    點
根據輸入自動生成語法樹
釋義
開源語法分析器--ANTLR
1.1 詞法分析器(Lexer)... 1-1
1.2 語法分析器(Parser)... 1-1
1.3 ANTLR. 1-2
2.1 安裝及使用... 2-2
2.2 ANTLR語法文件解析... 2-3
2.3 ANTLR規則(RULE)解析... 2-4
4.1 ANTLR Studio插件的安裝... 4-7
4.2 功能簡介
1 ANTLR簡介
ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它為包括Java,C++,C#在內的語言提供了一個通過語法描述來自動構造自定義語言的識別器(recognizer),編譯器(parser)和解釋器(translator)的框架。ANTLR可以通過斷言(Predicate)解決識別衝突;支持動作(Action)和返回值(Return Value)來;更棒的是,它可以根據輸入自動生成語法樹並可視化的顯示出來。由此,計算機語言的翻譯變成了一項普通的任務—在這之前YACC/LEX顯得過於學院派,而以LL(k)為基礎的ANTLR雖然在效率上還略有不足,但是經過近些年來的升級修改,使得ANTLR足以應付現存的絕大多數應用。感謝Terence Parr博士和他的同事們十幾年來的出色工作,他們為編譯理論的基礎和語言工具的構造做了大量基礎性工作,也直接導致了ANTLR的產生。
1.1 詞法分析器(Lexer)
詞法分析器又稱為Scanner,Lexical analyser和Tokenizer。程序設計語言通常由關鍵字和嚴格定義的語法結構組成。編譯的最終目的是將程序設計語言的高層指令翻譯成物理機器或虛擬機可以執行的指令。詞法分析器的工作是分析量化那些本來毫無意義的字符流,將他們翻譯成離散的字符組(也就是一個一個的Token),包括關鍵字,標識符,符號(symbols)和操作符語法分析器使用。
1.2 語法分析器(Parser)
編譯器又稱為Syntactical analyser。在分析字符流的時候,Lexer不關心所生成的單個Token的語法意義及其與上下文之間的關係,而這就是Parser的工作。語法分析器將收到的Tokens組織起來,並轉換成為目標語言語法定義所允許的序列。
無論是Lexer還是Parser都是一種識別器,Lexer是字符序列識別器而Parser是Token序列識別器。他們在本質上是類似的東西,而只是在分工上有所不同而已。如圖1所示:
圖1 字符輸入流、tokens和AST之間的關係 圖1 字符輸入流、tokens和AST之間的關係
1.3 樹分析器 (tree parser)
樹分析器可以用於對語法分析生成的抽象語法樹進行遍歷,並能執行一些相關的操作。
1.4 ANTLR
ANTLR將上述結合起來,它允許我們定義識別字符流的詞法規則和用於解釋Token流的語法分析規則。然後,ANTLR將根據用户提供的語法文件自動生成相應的詞法/語法分析器。用户可以利用他們將輸入的文本進行編譯,並轉換成其他形式(如AST—Abstract Syntax Tree,抽象的語法樹)。