ANTLR:入门

这篇文章使您了解ANTLR的基础知识。 以前,我们已经了解了如何将ANTLR设置为外部工具。 在这里: ANTLR外部工具
:)
所以,我们开始…。

什么是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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值