antlr idea 入门
:)
所以,我们开始…。
什么是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
antlr idea 入门