:)
所以,我們開始…。
什么是ANTLR?
?另一個語言識別工具,是一種語言工具,它提供了一個框架,用于從包含動作的語法描述中構造識別器,解釋器,編譯器和翻譯器。
目標語言是什么?
?動作腳本,Ada
? C
? C#; C#2 ?C#3 ?D ?Emacs ELisp ?目標C ?Java ?Java腳本 ?Python ?Ruby ?Perl6 ?Perl ?PHP ?奧伯龍 ?斯卡拉 ?ANTLR支持什么?
?樹木建造
?錯誤恢復
?錯誤處理 ?樹木漫步 ?翻譯 ?它支持什么環境?
ANTLRWorks是ANTLR的IDE。 它是圖形語法編輯器和調試器,由Jean Bovet使用Swing編寫。
可以使用ANTLR嗎?
?““ REAL””編程語言
?特定領域的語言[DSL] ?誰在使用ANTLR?
?編程語言:Boo,Groovy,Mantra,Nemerle,XRuby等。
?其他工具:HIbernate,Intellij IDEA,Jazillian,JBoss Rules,Keynote(Apple),WebLogic(Oracle)等。
?您在哪里可以找到ANTLR?
您可以隨時在這里關注http://www.antlr.org
?下載免費和開源的ANTLR和ANTLRWorks
?文檔,文章,Wiki,郵件列表,示例…。 您可以在這里找到所有東西!
劃船…。
?
- 基本條款
? Lexer :將字符流轉換為令牌流。
? 解析器 :令牌過程,可能會創建AST
? 抽象語法樹(AST) :解析的輸入的中間樹表示,比令牌流更易于處理。 它也可以被多次處理。 ? 樹解析器 :它處理AST ? 字符串模板 :一個庫,支持使用帶有占位符的模板來輸出文本
- 一般步驟
?在一個或多個文件中編寫語法
?編寫字符串模板[可選]?使用ANTLRWorks調試語法
?從語法生成類 ?編寫使用生成的類的應用程序 ?提交符合語法的應用程序文本
再遠一點...。
讓我們寫一個簡單的語法,其中包括
?Lexer
?解析器 Lexer:將輸入流分成令牌 讓我們以“ int a,b;”形式的C中的簡單聲明類型為例。 或“ int a;” 和浮動。 如我們所見,我們可以編寫lexer如下:
//TestLexer.g
語法TestLexer;
ID:('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0'..' 9'|'_'|'。'|'a'..'z'|'A'..'Z')*; COMMA:','; 分號:';'; 數據類型:“ int” | '浮動';
如我們所見,這些是要轉換為令牌的字符。 因此,現在讓我們編寫一些規則來處理生成的這些令牌,并可能相應地創建一個解析樹。
//TestParser.g
語法TestParser;
選項{語言:Java;} decl:DATATYPE ID(','ID)*;
在語法上運行ANTLR只會生成詞法分析器和解析器,TestParser和TestLexer。 為了在某??些輸入上實際嘗試語法,我們
需要使用main()方法的測試裝備,如下所示:
// Test.java
import org.antlr.runtime.*;
public class Test {public static void main(String[] args) throws Exception {// Create an input character stream from standard in
ANTLRFileStream input = new ANTLRFileStream("input"); // give path to the file input
// Create an ExprLexer that feeds from that stream
TestLexer lexer = new TestLexer(input);
// Create a stream of tokens fed by the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Create a parser that feeds off the token stream
TestParser parser = new TestParser(tokens);
// Begin parsing at rule decl
parser.decl();
}}
在下一篇博客文章中,我們將看到如何創建AST并在樹上走來走去……
祝您學習愉快! :)
參考: ANTLR入門: JCG合作伙伴 Swathi V的基礎知識 , 網址為* Techie(S)pArK *博客。
翻譯自: https://www.javacodegeeks.com/2012/06/antlr-getting-started.html