ANTLR的IDE——ANTLRWorks2的安装及基本使用

news2025/3/1 11:06:54

1. ANTLRWorks2的简单介绍

① ANTLR官网对ANTLRWorks2的介绍

ANTLRWorks 2.此IDE是ANTLR v3 / v4语法以及StringTemplate模板的复杂编辑器。
它可以运行ANTLR工具来生成识别器,并可以运行TestRig(在命令行上运行)来测试语法。
要将ANTLR生成的识别器集成到您的应用程序中,您至少还需要运行时库。

② ANTLRWorks 2官网对自己的介绍
  • ANTLRWorks 2是Tunnel Vision Labs使用几种新技术开发的,可以对之前的语法工具进行完全重写。我们用于NetBeans®开发的核心框架最初是为该项目创建的,但很容易扩展到其他语言,并且是我们所有基于NetBeans的应用程序的起点。
  • 对ANTLR的支持——源代码图。编辑ANTLR语法文件时,“语法图”窗口显示当前规则的直观表示。此功能提供语法元素的自然表示,并且是提供自定义功能以增强特定语言的特征的示例。另外,双击源代码图中的元素将立即跳转到相关的源代码。ANTLR的语法图如图所示:
    在这里插入图片描述
  • ANTLRWorks 2的编辑提示功能:ANTLRWorks 2提供编辑器提示,以警告开发人员语法编译器当前未检测到的语法中的潜在错误或性能问题。由于此类静态分析对每种语言都是唯一的,因此我们与语言创建者和用户合作,提供最有可能在开发周期早期检测到有问题代码的分析功能。ANTLRWorks中语法的当前分析功能包括以下内容:
(1)ANTLR 4工具报告的错误和警告在编辑器中“实时”显示 
(2)识别解析器中的隐式标记定义(可能的错误)
(3)因子标签超出集合(性能提示)
(4)组集元素(性能提示)
  • antlrworks:专门用于开发antlr的ide,(不同版本的antlrworks)其内部集成了某个版本的antlr。 换句话说,你即使下载了antlr-x.x-complete.jar,将其添加到了CLASSPATH中,其也和antlrworks内部的antlr,没有半毛钱关系。即antlrworks用的是自己内部集成的某个版本的antlr。

参考链接:
ANTLR Development Tools(ANTLR官网)
ANTLRWorks 2

2. ANTLRWorks2的下载

  • 进入ANTLRWorks2的官网,在右上角点击下载ANTLRWorks2 V2.1。
    在这里插入图片描述
  • 该版本是2013年8月28日发行的,内部集成的是ANTLR 4.1
    在这里插入图片描述
  • 解压下载的安装包 2013-07-21-antlrworks-2.1.zip,进入解压目录下的bin目录,我的是C:\Users\lucy\Downloads\antlrworks2\bin,点击antlrworks2.exe,即可运行antlrworks2。
    在这里插入图片描述

3. ANTLRWorks2的简单使用

① 新建*.g4文件
  • 点击左上角的新建按钮,弹出“New File”窗口:
    在这里插入图片描述
  • 默认为ANLTR 4 Combined Grammar就好,点击Next按钮,进入如下页面,输入自己的文件名、保存路径:
    在这里插入图片描述
  • 点击“Finish”,完成文件创建:
    在这里插入图片描述
② ANTLRWorks2的语法图功能
  • 定义数字,由0-9组成(即词法分析器——Lexer),可以重复一次或多次:
grammar Cpp;
	NUM:[0-9]+;

鼠标放到NUM:[0-9]+;行,显示对应的语法图:
在这里插入图片描述

  • 定义操作符(即词法分析器——Lexer),包括加减乘除,只允许出现一次:
grammar Cpp;
    NUM:[0-9]+;
    OPERATOR: '-'|'*'|'/';

鼠标放到 OPRATOR:'+'|'-'|'*'|'/';行,显示对应的语法图:
在这里插入图片描述

  • 定义表达式(即语法分析器,Parser):
grammar Cpp;
   PROG: exp;
   exp: NUM OPERATOR NUM;
   NUM:[0-9]+;
   OPERATOR: '-'|'*'|'/';

鼠标放到 exp: NUM OPERATOR NUM;行,显示对应的语法图:
exp: NUM OPERATOR NUM;

  • 文法定义的可视化:
    在这里插入图片描述
    PS: 本人探索发现:不知道是不是版本的问题,V2.1中使用ANLTR 4 Combined Grammar生成的文件,跟某些参考博客中不一样,V2.1中只显示Parser Rules。如果使用ANLTR 4 Lexer GrammarANLTR 4 Parser Grammar生成文件,Parser RulesLexer Rules都会显示。但是,在ANLTR 4 Lexer Grammar中定义parser规则会有错误提示,在ANLTR 4 Parser Grammar中定义Lexer规则也会有错误提示。
③ 语法解析
  • 点击Run-->Run in TestRig,弹出如下窗口。在新窗口中输入要进行解析的文件,里面是待解析的内容;选择用哪个语法解析器进行解析,最后点击Finish
    在这里插入图片描述
  • hello.txt中的内容为101+2689,解析出来的语法树(以弹窗的形式显示)如下。对应的命令为
    grun Cpp r -gui
    在这里插入图片描述
  • TestRig的终端显示的信如下,对应的命令为grun Cpp r -tree

在这里插入图片描述

④ 小小的语法总结
  • 使用大写字母lexer进行命名,使用小写字母parser进行命名。
  • 使用*表示0-N次重复,使用+表示1-N次重复

参考链接:
YouTube视频——ANTLRWorks(安装及使用教程)
【总结】使用ANTLR和ANTLRWorks的开发心得和注意事项
【记录】尝试使用ANTLRWorks 2.0去进行ANTLR开发
Antlr 4.0和AntlrWorks开发环境配置

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

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

相关文章

GCC编译器 MinGW的下载安装使用教程

哎 总所周知 gcc可以用来编译C 和C。在linux广泛应用,那么window怎么使用gcc呢。就要用到gcc的window工具----MInGW,安装好之后,直接可以在windows的dos界面编译。下面讲解安装使用过程。1.官网下载MinGW - Minimalist GNU for Windows downl…

家庭消耗品跟踪管理软件HomeLists

什么是 HomeLists ? HomeLists 是一款自托管耗材统计软件,能通过提醒等帮助您跟踪家庭消耗品。 安装 在群晖上以 Docker 方式安装。 在注册表中搜索 homelists ,选择第一个 aceberg/homelists,版本选择 latest。 本文写作时&…

HNU工训中心:直流电路测量分析实验报告

工训中心的牛马实验 实验目的 1.熟悉直流电路的测量和分析方法。 2.熟悉直流电源、电压表、电流表的使用法及其特性。 实验仪器和器材 1.实验仪器 直流稳压电源型号:IT6302 台式多用表型号:UT805A 2.实验(箱)器材 电路实验箱 元器件:电阻…

Ubuntu/Linux 升级 CMake 版本

Ubuntu/Linux 升级 CMake 版本 背景 在 Ubuntu 18.04 系统上默认的 CMake 版本为 3.10.2,当需要进行一些比较新的项目的编译时,比如说 iceoryx 的交叉编译,会遇到 CMake 版本不支持问题。类似下面的打印: CMake Error at CMakeL…

各种产品图的画法

经常看到网上有人问,产品经理要画哪些图,怎么画流程图等关于画图的问题。确实,画图是产品经理必备的硬核技能。然而,画图又不仅仅是画几个图而已。做产品没有统一、标准的规范指导,容易让人为了画图而画图。甚至&#…

机器学习笔记之狄利克雷过程(一)基本介绍

机器学习笔记之狄利克雷过程——基本介绍引言回顾:高斯混合模型狄利克雷过程——引出引言 从本节开始,将介绍狄利克雷过程。 回顾:高斯混合模型 高斯混合模型(Gaussian Mixture Model,GMM\text{Gaussian Mixture Model,GMM}Gaussian Mixtu…

【吃透Js】深入学习浅拷贝和深拷贝

一、JavaScript数据类型原始类型对象类型二、原始类型和对象类型的区别1.原始类型2.引用类型3.复制4.比较5.值传递三、浅拷贝概念实现方法四、深拷贝概念五、浅拷贝、深拷贝和赋值的区别浅拷贝和赋值六、小结想要真正搞明白深浅拷贝,你必须要熟练掌握赋值、对象在内…

港科夜闻|香港科大与中国医药创新促进会共建创新研究平台,推动大湾区医药创新发展...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大与中国医药创新促进会共建创新研究平台,推动大湾区医药创新发展。香港科技大学与中国医药创新促进会2月27日签署合作备忘录,成立「大湾区生物医药国际创新中心」及「大湾区生物医药发展政策研…

【论文导读】Towards Unsupervised Domain Generalization

之前看到过的一篇论文,挺有意思的,虽然查到了有讲解的博客,但是不太符合我的思考逻辑 于是自己梳理一下。 CVPR 2022丨清华大学提出:无监督域泛化 (UDG)_我爱计算机视觉的博客-CSDN博客 方法引入: 针对现有的处理域…

苹果笔可以不买原装吗?开学必备性价比电容笔

在当今的时代,电容笔日益普及,而且相关的功能也逐渐完善。因此,在使用过程中,怎样挑选一款性价比比较高的电容笔成为大家关心的焦点。随着电容笔的普及,更好更便宜的电容笔成为了一种趋势。那么,哪个品牌的…

[ 云计算入门与实战 - AWS ] 在控制台创建 Amazon EC2 实例

本章节主要介绍在 AWS 控制台窗口 如何创建一台 Amazon EC2 实例。 文章目录写在前面开始创建前进入控制台并启动 EC2 实例服务创建 EC2 实例详细步骤步骤 1:为所要创建的 EC2 实例个体命名步骤 2:选择 AMI步骤 3:选择实例类型步骤 4&#xf…

【线程池的使用规范、线程池的7个参数、4种拒绝策略、线程池的5种状态、线程池的执行流程】

一.线程池的使用规范 阿里巴巴开发手册规定,线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让开发人员更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors 返回的…

EndNote20 自动生成毕业论文参考文献

软件版本: EndNote 20 字体:Chinese Standard GB/T 7714 去谷歌学术下载Endnote格式的enw文件 在EndNote中 File>New… 新建Libaray Tools>Output Styles>Open Style Manager… 勾选Chinese std GBT7714(numeric) Tools>Output Styles>…

CSS背景属性之颜色渐变

颜色渐变 颜色渐变其实在网页设计中并不是特别常见, 但也不可避免的会出现导航栏是渐变色这种情况或者别的不是单一颜色的情况, 例如:这样的设计解决方案并不是只可以使用颜色渐变,我们可以使用两个div拼接,将文字放…

如果坚定了想要进入网络安全领域的决心,应该怎样学习呢?

1、建立科学的学习路径 如果你原本从事程序开发,可以选择Web安全/渗透测试方向入门,一是市场需求量高,二则是发展相对成熟,入门比较容易。一定要根据自身的知识结构建立科学的学习路径,只有学到一定程度、或者有了一定…

Function Mesh:流处理任务的 Serverless 化实践

文章摘要本文整理自 ApacheCon Asia 上,StreamNative 工程师付睿的分享《Use Apache Pulsar Functions in a Cloud-Native way》。本文将介绍在云原生环境中使用 Pulsar Functions 的实践,以及基于 Pulsar Functions 和 Kubernetes 的项目 Function Mesh…

Redis实现高可用

怎么实现Redis的高可用?我们在项目中使用Redis,肯定不会是单点部署Redis服务的。因为,单点部署一旦宕机,就不可用了。为了实现高可用,通常的做法是,将数据库复制多个副本以部署在不同的服务器上&#xff0c…

tensorflow2.4--1.框架介绍

前言 虽然1.x版本tensorflow有很多项目都基于此构建,然而随着2.x版本的推出,很多架构已经发生了改变,代码发生了改变,同时很多模组已经废弃不用或者更新,tensorflow1.x已经不能再兼容最新的项目,与时俱进是必要的,因此…

【图像处理】数字图像处理基础(分辨率,像素,显示...)

Table of Contents1.数字图像处理基础1.1 图像表示1.1.1 图像成像模型1.1.2 数字图像的表示a.图像采样b.图像灰度的量化c.算比特数1.2 分辨率1.2.1 空间分辨率1.2.2 灰度分辨率1.3 像素间的关系1.3.1 像素邻域a.4邻域b.4对角邻域c.8邻域1.3.2 像素邻接1.3.3 像素连通1.3.4 像素…

【C语言航路】第十五站:程序环境和预处理

目录 一、程序的翻译环境和执行环境 二、编译和链接 1.翻译环境 2.编译本身也分为几个阶段 3.运行环境 三、预处理 1.预定义符号 2.#define 1.#define定义标识符 2.#define定义宏 3.#define 替换规则 4.#和## 5.带副作用的宏参数 6.宏和函数的对比 7.命名约定 …