语法分析器?语法分析 c语言?词法分析器 语法分析器?薛笛的专栏(2)

电脑杂谈  发布时间:2016-10-11 02:02:16  来源:网络整理

5:这一可选的部分为我们提供了指定某些可选参数的能力,。例如图中所示代表告诉ANTLR在生成代码的时候不要生成缺省的错误处理部分,这部分将由用户自己负责。

7:在异常处理部分,我们可以指定自定义的异常处理方法。像这里就仅仅是打印错误栈信息。

3 ANTLR语法实例—SensorSQL

SensorSQL是一个自定义的简化版SQL语言,鉴于篇幅所限,它所支持的语法定义这里就不详细列出了,我只是给出查询的示例:

语法分析器?语法分析 c语言?词法分析器 语法分析器?薛笛的专栏

通常,编译一个查询的目的是要把它转化成某种被查询设备可以理解的形式。通常的做法有两种,一种是像在上一节中提到的那样,写好详细的语法规则,在ANTLR生成相应的Java文件之后,就可以直接使用其运行结果。这样的例子有很多,其中最典型的就是对于算数表达式的解析了。对于形如1+2-3*4/5^6这样的表达式,只要写好语法规则,就可以在解析过程中直接得到运算结果:首先ANTLR将其编译成逆波兰结构-- ( - ( + 1 2 ) ( / ( * 3 4 ) ( ^ 5 6 ) ) ) ;在生成语法树的过程中,同步计算表达式的值,即类似于2.3节中看到的表达式计算。结果如下:

语法分析器?语法分析 c语言?词法分析器 语法分析器?薛笛的专栏

不过这样作有一个缺点,就是在很多情况下,你可能并不知道要用什么样的方法来处理。所以当真正要开始写处理代码的时候,就要受限于已有的Parser/Lexer中的代码。一旦要有所修改,就要重新编译语法文件,生成新的Java代码,不胜繁琐。而且,一旦处理过程有误,就要反复调试修改Antlr生成的代。自动生成的代码嘛,结构着实也不怎么样,调试的时候也麻烦。所以如果效率允许的话,就没有必要让Antlr作额外的工作,干脆就专心于做他的语法分析也就是了,其他的工作等到生成语法树之后再怎么遍历或者折腾都可以嘛J。

语法分析器?语法分析 c语言?词法分析器 语法分析器?薛笛的专栏

上图就是我刚才演示的SensorSQL语法分析之后产生的结果。在产生这个结果之后,我需要将每一个语法元素翻译成字节序列打包发送给传感器网络。这时候,为了保证Where语句中的优先级,你就可以按照ANTLR文档中关于生成语法树的一章,生成类似于我这样的结构,然后只需前序遍历这颗语法树的Where部分就可以达到目的,至于其他部分,顺序遍历一遍就好了。


4 ANTLR Studio

有了前面的基础之后,我们就可以开始真正的工作了。不过用“记事本或Editplus+命令行”或者干脆写个ANT脚本也不是不可以,但是总觉得在集成化IDE满天飞的时代用这个方式有点过于原始,幸好Placid System 为我们提供了一个Eclipse插件来使我们有机会直接走出原始社会。下载地址为:,目前最新版本是1.1.0。唯一令人遗憾的是这个插件虽然功能很完善,却是要收费的,否则只有11天的试用期。

语法分析器?语法分析 c语言?词法分析器 语法分析器?薛笛的专栏

4.1ANTLR Studio插件的安装

当右键单点击你的工程时,你会发现控制是否使用ANTLR Studio的开关:

语法分析器?语法分析 c语言?词法分析器 语法分析器?薛笛的专栏

当打开一个文法文件之后,可以看到如下界面:

语法分析器?语法分析 c语言?词法分析器 语法分析器?薛笛的专栏

在右面的大纲窗口,列有所有Parser和Lexer的元素,可以看到Protected Token(例如Number)和其他普通的Token是不一样的;在左面,不同的区域是用不同的颜色块加亮来区分的。

4.2功能介绍

ANTLR Studio在Eclipse Help提供了比较详尽的文档描述,所以这里我只介绍一些1.1.0版本的新功能。

l 完全支持ANTLR 2.7.6,并支持将之前的工程自动升级到1.1.0版本。

l Syntax Diagram View,可以方便的查看所输入的语法结构。

l 改进了Debug功能,可以调试比较大的文法文件。而在这之前,如果一个文法文件很大的话,ANTLR Studio就会抛出异常。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-18518-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...