antlr idea 入门_ANTLR:入门

antlr idea 入门

这篇文章使您了解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

antlr idea 入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

typescript主键自增长

常见的不重复id创建方式有两种,一个是搞一个自增长数列,另一个是采用随机生成一组不可能重复的字符序列,常见的就是UUID了。我们来引入一个uuid的包:npm i --save angular2-uuid,由于这个包中已经含有了用于typescript…

java api操作hbase_通过JavaAPI使用HBase

1.准备工作(1) 启动zookeeper服务,我的是在本地启动zookeeper/usr/local/zookeeper/bin$ sudo zkServer.sh start(2) 启动HBase和HBase shell启动HBase:/usr/local/hbase/bin下启动start-hbase.sh启动HBase shell/usr/local/hbase/bin下终端输入hbase shell(3) 工程…

SPOJ QTREE5 lct

题目链接 对于每一个节点,记录这个节点所在链的信息: ls:(链的上端点)距离链内部近期的白点距离 rs:(链的下端点)距离链内部近期的白点距离 注意以上都是实边 虚边的信息用一个set维护。 set维护的是…

Java EE 8 MVC:使用路径参数

在上一篇文章中,我们看到了如何在Java EE MVC中使用查询参数 。 这篇文章继续与一个非常相似的主题:路径参数。 路径参数是请求路径的动态部分,可以使用Path注释指定。 例如: Controller Path("path-params") public…

duilib入门简明教程 -- 部分bug (11) (转)

原文转自:http://www.cnblogs.com/Alberl/p/3344886.html 一、WindowImplBase的bug在第8个教程【2013 duilib入门简明教程 -- 完整的自绘标题栏(8)】中,可以发现窗口最大化之后有两个问题,1、最大化按钮的样式还是没变,正确的样式…

在考生文件夹存有JAVA3_注意:下面出现的“考生文件夹”均为%USER%在考生文件夹下存有文件名为J_网考网(Netkao.com)...

【分析解答题】注意:下面出现的“考生文件夹”均为%USER%在考生文件夹下存有文件名为Java_2.java文件,本题功能是完成点定义,并输出点坐标。请完善Java_2.java文件.并进行调试,使程序结果如下:x5 y5点的坐标…

jasperreports_JasperReports JSF插件用例系列

jasperreports这是文章系列的切入点,在该系列文章中,我将尝试介绍JasperReport JSF插件的一些用例,该工具的创建是为了轻松地将为JasperReports设计的业务报告集成到JSF应用程序中。 该系列中描述的所有示例都可以从JasperReports JSF插件网站…

RN 47 中的 JS 线程及 RunLoop

RCBridge 初始化时声明了一个 CADisplayLink _jsDisplayLink [CADisplayLink displayLinkWithTarget:self selector:selector(_jsThreadUpdate:)];在 _jsThreadUpdate 函数中,处理界面更新。这个 CADisplayLink 随后被加到 JS 线程对应的 RunLoop 中。 - (void)ad…

java nginx https_docker nginx 配置ssl,实现https

docker nginx 配置ssl,实现https2019-09-05 16:06:35.0nginx配置https总览在nginx配置ssl实现https,简单来说分为三个步骤:1 上传ssl证书等文件将 1_www.domain.com_bundle.crt 和 2_www.domain.com.key 上传到nginx配置文件的目录旁边。这两…

Java EE 8 MVC:使用表单参数

在前两篇文章中,我们了解了如何在即将到来的Java EE MVC框架中使用查询和路径参数 。 这篇文章重点介绍表单参数。 当您使用发布请求提交Web表单时,表单值将作为请求正文的一部分发送。 媒体类型(或内容类型)定义了用于在请求正文…

Elasticsearch索引自动删除

简介 脚本分2部分,1部分查找符合条件的索引名,2脚本调用1脚本,进行删除操作 脚本 查找符合条件的,默认大于30天 # coding:utf-8__author__ Jipu FANGfrom elasticsearch import Elasticsearch import re import time import dat…

JavaScript入门几个概念

JavaScript入门几个概念 刚刚入门JavaScript的时候,搞懂DOM、BOM以及它们的对象document和window很有必要。 DOM是为了操作文档出现的API,document是它的一个对象。BOM是为了操作浏览器出现的API,window是它的一个对象。DOM When a web page …

idea中使用osgi_OSGi环境中的Servlet基本身份验证

idea中使用osgi您首先需要获得对OSGI HTTP Service的引用。 您可以通过声明性服务来做到这一点。 这篇文章将集中在获得对HTTP服务的引用之后的步骤。 注意:此职位的完整课程位于此处 通过OSGI HTTP Service注册Servlet时,它为您提供了提供HTTPContext实…

java spring aop 注解包_Spring AOP 注解配置实例

Spring AOP注解例子一:导入相关jar包。首先导入Spring的相关包(这里就不多说了,我这里是3.2.4版本的)然后导入AOP注解的相关包(不是spring的包)aspectjrt-1.6.7.jar和aspectjweaver-1.6.8.jar和aopalliance.jar(注意这里最好是1.6.7以上的版本&#xff0…

email

163邮件发送 private void SendEmail(string content){SmtpClient mSmtpClient new SmtpClient();mSmtpClient.Host "smtp.163.com";mSmtpClient.Port 25;mSmtpClient.UseDefaultCredentials true;mSmtpClient.EnableSsl false;var mSenderUsername "abc&q…

java web 有哪些标签库_java web中jsp常用标签

在jsp页面开发过程中,经常需要使用JSTL(Java Server Pages Standard Tag Library)标签开开发页面,是看起来更加的规整舒服。JSTL主要提供了5大类标签库:1. 核心标签库: 为日常任务提供通用支持,如显示和设置变量,重复使用一组项目,测试条件以及其他操作(…

微服务有麻烦吗? Lagom在这里为您提供帮助。 尝试一下!

蛋糕支持。 我们很自豪地宣布,新的Apache许可的微服务框架Lagom可在GitHub上使用 ! 当其他框架专注于打包和实例启动时,Lagom重新定义了Java开发人员构建基于微服务的应用程序的方式。 服务是异步的。 服务内通信由您管理。 流是开箱即用的。…

vue element-ui IE9--11报 “无法获取未定义或null引用的属性‘toLowerCase’”

今天做zymh比赛的一个管理后台,用的技术是vueelement-uivue-routeraxios,其他浏览器运行的很好,但是在IE(从IE11到IE9,vue支持IE9以上)都报错 点进去就是定位到了markUp这个函数,经查询是elemen…

执行力

什么是执行力? 员工执行力就是员工能够按质按量、一丝不苟地做好上级交待的工作,衡量的基本标准是提供了上级(客户或公司)满意的结果。 那种不能创造价值,不能提供结果的,不是真正的执行力,只是…

接口中的默认方法和静态方法

在我们最初的Java 8支持公告中,我们特别提到了缺少流,但是完全错过了默认/静态本机接口不起作用的事实。 现在,由于有一个警惕的社区成员指出了这一问题,因此此问题已得到解决。 由于限制需要全新构建才能使它们正常工作&#xf…