ANTLR 4(一)Getting Started

1. 配置java环境

    安装jdk1.7以上版本,我装的是“jdk-8u181-windows-x64.exe”。

    设置 “C:\Program Files\Java\jdk1.8.0_181\bin" 到path环境变量。

    设置 "C:\Program Files\Java\jdk1.8.0_181" 到 JAVA_HOME 环境变量。

    设置  "%JAVA_HOME%\lib"和"."到  CLASSPATH 环境变量。

2. 配置ANTLR4环境

    从   “https://www.antlr.org/download/”  下载最新的4.9版本的ANTLR4 jar包 “antlr-4.9-complete.jar”。

    将“antlr-4.9-complete.jar”的本地文件路径加入到CLASSPATH 环境变量。

3. 测试

    1)使用上下文无关文法(巴克斯范式)来写一个最简单的定义整形变量的文法,保存为test1.g4,扩展名g4,应该是ANTLR4的规范

         使用options可以设置生成代码的语言类型,如果不设置,默认为java

grammar test1;
//options {language=Cpp;}
//options {language=CSharp;}
//options {language=Java;}
//options {language=Python3;}
int_variable  : 'int' ID '=' INTEGER ';' ;
ID : [a-z]+ ;
INTEGER: [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;

    2)  生成语法解析器源码

 java org.antlr.v4.Tool test1.g4

   3)编译语法解析器源码

javac test1*.java

   4)启动语法解析器

java org.antlr.v4.gui.TestRig test1 int_variable -gui

  5)输入一个定义整形变量的语句,输入完毕后,回车,ctrl + z,回车

int abc = 123;

  6)语法解析树显示

4. 总结

     1)我们只需要使用巴克斯范式来对语言进行形式化的描述,并按ANTLR规范来编写g4文件,ANTLR即可帮我们生成多种语言源码的语法解析器,并且将语法解析树以图形化的方式显示出来,非常直观,比bison要好用,而且适合对我们自己编写的巴克斯范式进行调试排错。

     2)但是不知道如何用其生成java代码和我自己的程序结合,如果按照bison的方式,我们可以自己编写属性文法,即语义分析代码加入到bison帮我们创建的语法解析树中。因为属性文法本身就是基于上下文无关文法的,这样我就可以借助语法树来作我自己的语义分析,毕竟我们自己发明的语言的语义只有自己知道嘛。但是目前不知道ANTLR如何加入我们自己的语义代码。不过我觉得如果ANTLR应该不只是帮我分析我发明的文法的正确性,后续需要继续研究官方文档。

 

   

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

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

相关文章

【iOS】Quartz2D图片剪切

一、使用Quartz2D完成图片剪切1.把图片显示在自定义的view中  先把图片绘制到view上。按照原始大小,把图片绘制到一个点上。  代码: 1 - (void)drawRect:(CGRect)rect 2 { 3 UIImage *image2[UIImage imageNamed:"me"]; 4 [image2…

InstallShield 2020

1.新建工程:HOME-New-Basic MSI 2.Gereral Information设置(根据需求自行设置,例如下图) 3.Files and Folders设置 a.将需打包工程拖拽至下方目标文件夹内 b.创建新的Feature c.设置结果如下 4.Shortcuts设置 a.Desktop右键-New…

iOS项目开发— CoreLocation的定位服务和地理编码与发编码实现

一、CoreLocation简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆、找酒店、找银行、找电影院 2.在上述应用中&#xff0c…

OpenGL-坐标系

笛卡尔坐标系 二维绘图:笛卡尔坐标有一个X轴和一个Y轴组成,X轴为水平方向,Y轴为垂直方向,X和Y相互垂直二维笛卡尔坐标系 三维绘图:笛卡尔坐标多了一个Z轴,Z轴同时垂直于X和Y轴。Z轴的实际意义代表着三维物…

UML类图与类间六种关系表示

1.类与类图 类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性,操作,关系的对象集合的总称. 类图是使用频率最高的UML图之一. 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助开发人员理解系统,它是系统分析和设计阶段的重要产物,也是系统编码和测试…

PlacementBrowser源码分析

PlacementBrowser的源码在 Editor/PlacementMode下面 一、Placement分类的创建 1. Placement分类被存贮在 FPlacementModeModule 的成员变量 Categories里面。 2. 在 FPlacementModeModule::StartupModule() 创建出所有的Placement分类 3. 每个大类由RegisterPlacementCat…

menu源码分析

1. 菜单根据功能不同被划分了不同的section,不同的section的源码被分布在不同的地方 例如,主菜单的源码在Editor/Mainframe,datavaildation菜单的源码在Plugins\Editor\DataValidation下 2. 以主菜单为例,菜单以如下方法构建 首先…

根据select不同的选项实现相应input框添加项的显示

实现效果&#xff1a; 1.单击包时&#xff0c;显示包时的添加项 2.单击包里程&#xff0c;显示包里程的添加项 二 代码实现&#xff1a; 给select添加change事件 获取当前select的value 根据value判断对象显示其添加项框 <script> $(document).ready(function() {$(#typ…

内联汇编用法

在 Linux 代码中&#xff0c;经常可以看到在 C 代码中&#xff0c;嵌入部分汇编代码&#xff0c;这些代码要么是与硬件体系相关的&#xff0c;要么是对性能有关键影响的。 在很久以前&#xff0c;我特别惧怕内嵌汇编代码&#xff0c;直到后来把汇编部分的短板补上之后&#xf…

epoll怎么实现的

epoll 可以说是编写高性能服务端程序必不可少的技术&#xff0c;在介绍 epoll 之前&#xff0c;我们先来了解一下 多路复用I/O 吧。 多路复用I/O 多路复用I/O&#xff1a;是指内核负责监听多个 I/O 流&#xff0c;当任何一个 I/O 流处于就绪状态&#xff08;可读或可写&#…

平衡树以及AVL树

平衡树是计算机科学中的一类数据结构。 平衡树是计算机科学中的一类改进的二叉查找树。一般的二叉查找树的查询复杂度是跟目标结点到树根的距离&#xff08;即深度&#xff09;有关&#xff0c;因此当结点的深度普遍较大时&#xff0c;查询的均摊复杂度会上升&#xff0c;为了更…

法线和法线贴图

法线和法线贴图 1、法线无处不在&#xff0c;这是图形学基础中的基础。 2、法线贴图&#xff0c;凹凸图&#xff0c;位移图等等&#xff0c;在图形学历史上有着比较重要的位置&#xff0c;在很多图形学的架构中都有应用&#xff0c;典型的例如延迟渲染架构。 法线 法线&…

Unicode、UTF-8、UTF-16

计算机起源于美国&#xff0c;上个世纪&#xff0c;他们对英语字符与二进制位之间的关系做了统一规定&#xff0c;并制定了一套字符编码规则&#xff0c;这套编码规则被称为ASCII编码 ASCII 编码一共定义了128个字符的编码规则&#xff0c;用七位二进制表示 ( 0x00 - 0x7F ), …

IE11 全新的F12开发者工具

我讨厌debug&#xff0c;相信也没多少开发者会喜欢。但是当代码出错之后肯定是要找出问题出在哪里的。不过网页开发的时候遇到 BUG 是一件再正常不过的事情了&#xff0c;我们不能保证自己的代码万无一失&#xff0c;于是使用浏览器的开发者工具调试是我们解决问题最快捷的方法…

OpenXLSX 中文字段读取问题

在读取excel的时候发现有些中文字段无法读取&#xff0c;通过把excel文件解压后对比发现&#xff0c;正常读取和不 能正常读取的中文字段在sharedString.xml中存储的格式有差异&#xff0c;取其中一个字段&#xff0c;如下图&#xff1a; 正常读取的 不能读取的 对比可以看到…

[翻译] ZLHistogramAudioPlot

ZLHistogramAudioPlot A hardware-accelerated audio visualization view using EZAudio, inspired by AudioCopy. ZLHistogramAudioPlot was originally developed for Murmur. 这是使用了EZAudio,一个硬件加速的audio可视化view,灵感来自于AudioCopy.ZLHistogramAudioPlot这个…

一. NSIS介绍

概述 最近需要写一个安装程序&#xff0c;比对了一下现有的安装工具&#xff0c;最后选定了NSIS&#xff0c;最主要的原因一是开源、二是灵活。 下面把我的要求简单列举下&#xff1a; 1、需要检查系统环境是否满足要求 2、需要界面友好的安装过程 3、需要一些自定义界面&…

HDU-1008

水题 Description The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified order. It costs 6 seconds to move the elevator up one floor,…