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 入门

antlr idea 入门_ANTLR:入门相关推荐

  1. antlr idea 入门_ANTLR入门:构建简单的表达语言

    antlr idea 入门 这是该系列的第一篇文章. 本系列的目的是描述如何创建有用的语言和所有支持工具. 在本文中,我们将开始研究一种非常简单的表达语言. 我们将在语言沙箱中构建它,因此我们将其称为 ...

  2. Android自动化测试-从入门到入门(5)AdapterView的测试

    在之前的文章中,我们简单介绍了Espresso的使用.通过onView()方法我们可以快速定位到界面上我们需要测试的目标元素.整体来说,onView()比较适用于UI比较简单的情况,在不需要过于复杂的 ...

  3. Android视频录制从不入门到入门系列教程(一)————简介

    一.WHY Android SDK提供了MediaRecorder帮助开发者进行视频的录制,不过这个类很鸡肋,实际项目中应该很少用到它,最大的原因我觉得莫过于其输出的视频分辨率太有限了,满足不了项目的 ...

  4. 【新手上路】语法入门算法入门题单

    作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...

  5. 数论基础,从入门到入门

    数论基础,从入门到入门 文章目录 数论基础,从入门到入门 一.常用算法 1.素数筛法 2.线性筛 3.快速幂 4.矩阵快速幂 5.辗转相除法/欧几里得算法 6.扩展欧几里得 7.中国剩余定理/CRT ...

  6. ActiveMQ入门-amq入门

    ActiveMQ是什么 ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线. ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS ...

  7. BIOS从快速入门到入门1------浅谈BIOS

    眨眼间,从一个刚毕业的萌新小白,到现在的BIOS工程师,做了快2年半的x86服务器BIOS,勉强可以算是入门了.踩了很多坑,加了N多班,其中的辛酸和快乐,可能只有自己知道. 先不谈BIOS,我就个人经 ...

  8. GLOG从入门到入门

    GLOG从入门到入门 1 C++日志需求 任何可用的工程代码,都无法保证不出bug.因此,日志系统对于工程代码非常重要.对于像耳东小白这样的初级程序员(感谢某高级程序员大佬赐予"初级程序员& ...

  9. eselasticsearch入门_ElasticSearch入门 附.Net Core例子

    原标题:ElasticSearch入门 附.Net Core例子 1.什么是ElasticSearch? Elasticsearch是基于Lucene的搜索引擎.它提供了一个分布式,支持多租户的全文搜 ...

最新文章

  1. act转MP3格式工具
  2. dim private public static_C++ 强制类型转换操作符 static_cast
  3. 产品经理的每日反省清单
  4. 9.JAVA之GUI编程列出指定目录内容
  5. Redis学习笔记(4)-List
  6. 【Linux系统编程】同步和互斥的概念
  7. BootStrap笔记-加载效果的实现
  8. 推荐系统走向下一阶段最重要的三个问题
  9. 让你在面试前先写需求的公司是什么公司
  10. [生存志] 第6节 第一篇 以史为鉴 明朝事的读后心得
  11. PTA 愿天下有情人都是失散多年的兄妹 (二叉树遍历)
  12. 技术人如何才能做好绩效管理提升团队绩效?
  13. Linux centOS 修改欢迎界面
  14. 机器学习基本模型与算法在线实验闯关
  15. AMD CPU 历史表
  16. 小白玩转自媒体推广引流今日头条开通原创视频
  17. 计算机游戏act动作游戏,传统动作类游戏有哪些_好玩的ACT游戏盘点
  18. Android studio 生成ARR包
  19. MATLAB 输入和输出参数
  20. c语言double ave,[编程入门]结构体之成绩统计2-题解(C语言代码)

热门文章

  1. 高级java必须清楚的概念:原子性、可见性、有序性
  2. 漫画:什么是Base64算法
  3. 漫画:什么是SHA系列算法
  4. python打包exe文件
  5. java中部的分页实现(二)
  6. JS中的基本和引用类型传递的比较
  7. 2018蓝桥杯省赛---java---C---1(哪天返回)
  8. 2015蓝桥杯省赛---java---B---6(加法变乘法)
  9. intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 有用
  10. vmware安装centos6-步骤小结