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

news/2024/5/10 9:20:56/文章来源:https://blog.csdn.net/u014454538/article/details/86351781

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.luyixian.cn/news_show_75666.aspx

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

相关文章

Java内置队列和高性能队列Disruptor

一、队列简介 队列是一种特殊的线性表,遵循先入先出、后入后出(FIFO)的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删…

EEGLAB处理运动想象脑电数据

最近在看论文时,经常看到作者处理数据的过程,之前都是一代而过,知道怎么处理就可以了,一直没有实践,最近需要一些特殊的数据,需要自己处理出来,这里尝试着自己用MATLAB处理数据,记录…

Kubernetes12:k8s集群安全机制 ***与证书生成***

Kubernetes12:k8s集群安全机制 1、概述 1)访问一个k8s集群的时候,需要经过以下三个步骤才能完成具体操作 第一步:认证操作第二部:鉴权操作(授权)第三部:准入控制操作 2&#xff…

Java枚举详解

一.枚举 1.为什么有枚举? 如果我们的程序需要表示固定的几个值: 比如季节:spring (春),summer(夏),autumn(秋),winter(冬) 用常量表示: public static final int SEASON_SPRING 1;public st…

记一次MySQL数据迁移到SQLServer全过程

为什么要做迁移? 由于系统版本、数据库的升级,导致测试流程阻塞,为了保证数据及系统版本的一致性,我又迫切需要想用这套环境做性能测试,所以和领导、开发请示,得到批准后,便有了这次学习的机会…

idea 安装JUnit单元测试框架

JUnit是一套专门用于java的单元测试框架,主要是测试方法 junit4官方网站: JUnit – About junit5官方网站:JUnit 5 框架依赖:junit-4.12.jar;hamcrest-core-1.3.jar 安装步骤: (1&#xff…

hiveSQL开窗函数详解

hive开窗函数 文章目录hive开窗函数1. 开窗函数概述1.1 窗口函数分类1.2 窗口函数和普通聚合函数的区别2. 窗口函数的基本用法2.1 基本用法2.2 设置窗口的方法2.2.1 window_name2.2.2 partition by2.2.3 order by 子句2.2.4 rows指定窗口大小窗口框架2.3 开窗函数中加 order by…

一文吃透 Spring 中的 AOP 编程

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

【C++】二叉搜索树的模拟实现

一、概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别…

开源ZYNQ AD9361软件无线电平台

(1) XC7Z020-CLG400 (2) AD9363 (3) 单发单收,工作频率400MHz-2.7GHz (4) 发射带PA,最大输出功率约20dbm (5) 接收带LNA,低…

Linux学习(9.1)文件系统的简单操作

以下内容转载自鸟哥的Linux私房菜 原文:鸟哥的 Linux 私房菜 -- Linux 磁盘与文件系统管理 (vbird.org) 磁盘与目录的容量 df:列出文件系统的整体磁盘使用量;du:评估文件系统的磁盘使用量(常用在推估目录所占容量) df du 实体…

微信小程序 《新闻列表》 案例

目录:一,步骤。要求1:主页头部的轮播图要求2:中间内容上的信息案列排版。要求3:上拉加载内容。要求4:在信息加载完成后,给用户提示二,过程中要注意的几点。1.在微信小程序中&#xf…

HNU工训中心:电子开关与信号隔离

工训中心的牛马实验 1.实验目的: 1) 认识三极管和MOS管构成三端电子开关电路; 认识信号隔离的继电器和光电隔离方式。 2) 认识施密特触发器,掌握一种波形变换方法。 3) 实现一种脉冲波形发生器。 2.实验资源 HBE硬件基础电路实验箱、示波…

第八节 构造器和this关键字、封装

构造器的作用 定义在类中的,可以用于初始化一个类的对象,并返回对象的地址。 构造器的注意事项 1.任何类定义出来,默认就自带了无参数构造器,写不写都有。 2.一旦定义了有参数构造器,那么无参数构造器就没有了&#xf…

Adversarially-Aware Robust Object Detector

目标检测作为计算机视觉的基本任务,随着深度神经网络的出现而取得了显著的进展。然而,很少有研究在各种现实场景中探索目标检测器抵抗对抗攻击的对抗鲁棒性。探测器已经受到不可察觉的扰动的极大挑战,在干净图像上的性能急剧下降,…

记录pytorch安装 windows10 64位--(可选)安装paddleseg

安装完paddlepaddle之后,就可以安装paddleseg了。一、安装Git可以参考这个网址:https://blog.csdn.net/u010348546/article/details/124280236windows下安装git和gitbash安装教程二、安装paddleseghttps://github.com/PaddlePaddle/PaddleSeg记得翻墙啊这…

Ubuntu 交叉编译工具链安装

Ubuntu 交叉编译工具链安装 1 交叉编译器安装 ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器,我们在第三章“Linux C 编程入门”里面已经讲解了如何在 Liux 进行 C 语言开发,里面使用 GCC 编译器进行代…

试题 算法训练 JOE的矩阵

问题描述 最近JOE又在线性代数的模拟考中拿满分了,这直接导致了JOE对于计算矩阵的热情急剧下降,所以JOE希望能有这样一个程序能帮助他计算矩阵的秩。 输入格式 第一行,两个数n,m,表示矩阵是n*m的。   下面共n行,每行…

Airbnb(三) Managing Diversity in Airbnb Search 搜索多样性

abstract 搜索系统中一个长期的问题是结果多样性。从产品角度讲,给用户多种多样的选择,有助于提升用户体验及业务指标。 多样性需求和模型的目标是相矛盾的,因为传统ctr模型是 point wise,只看单个相关性不管相邻之间item差异。 …

设计模式-笔记

文章目录七大原则单例模式桥模式 bridge观察者模式 observer责任链模式 Chain of Responsibility命令模式 Command迭代器模式 Iterator中介者模式 Mediator享元模式 Flyweight Pattern组合模式 composite装饰模式 Decorator外观模式 Facade简单工厂模式工厂方法模式工厂抽象模式…