文档介绍:简介:是一个词法分析生成器和语法分析生成器。词法分析和语法分析是处理输入字符序列的软件构件,编译器和解释器协同词法分析和语法分析来“解密”程序文件,不仅如此,词法分析和语法分析有更广泛的用途,我希望在本书列举的例子中能阐明这一点。
那么什么是词法分析器和语法分析呢?词法分析器可以将字符串解析为一个一个的标识符(Token),并且可以把这些标识符归类。看一段C语言代码:
int main() {
return 0 ;
}
C语言的词法分析器会把这段代码分解为如下的一些标识符:
“int”, “”, “main”, “(”, “)”,“”, “{”, “\n”,“\t”,
“return”“”, “0”, “”, “;”, “\n”,“}”, “\n”, “”。
还会把这些标识符归类,在我们的例子中,这些标识符的类别为:
KWINT, SPACE, ID, OPAR, CPAR,
SPACE, OBRACE, SPACE, SPACE, KWRETURN,
SPACE, OCTALCONST, SPACE, SEMICOLON, SPACE,
CBRACE, SPACE, EOF。
其中EOF类别的标识符代表源文件的结束。这些标识符出传送给语法分析器。在C语言中,语法分析不需要所有的这些类别,在本例中SPACE类别的标识符不传送给语法分析器。语法分析器会分析这些标识符,判断程序的结构。在许多编译程序中,语法分析器用语法树来表示程序的结构。编译器通过这棵树来产生代码。看一个表达式:
fahrenheit = + * celcius / ;
语法分析器基于语言规则分析这个表达式产生一棵树:
DIAGRAM TBD(表示作者未完成)
如果输入没有语言的词法或语法,词法分析器或语法分析器都能产生错误信息。
并不是一个词法分析器或者语法分析器,它只是一个生成器。就是说,它读取文本后,基于一定的规则产生词法分析器和语法分析器的Java代码。见图:
DIAGRAM TBD
词法分析和语法分析变的越来越复杂,软件工程师直接用Java进行词法分析和语法分析时必须要充分考虑各规则间的相互作用。例如,在对 C语言的词法分析中,处理整型常量和浮点常量的代码是不能分开的,因为浮点数和整数的前面部分是一样的。语法分析产生器,对整型常量和浮点常量是可以区分的,它们的共同点可在代码生成过程中提取出来。文件比直接的Java程序更容易写,更容易读,也更容易修改。语法分析生成器的使用,软件工程师可以节省大量的时间,并且软件的质量也更高。
有三个工具:
用来处理语法文件(jj)生成解析代码;
jjTree 用来处理jjt文件,生成树节点代码和jj文件,生成解析代码;
jjDoc 根据jj文件生成bnf范式文档(html)。这三个工具都十分重要,分别贯穿着编写时的过程。
其中具体阐述一下jjTree方面(查考资料),JJTree定义了Java接口节点,所有分析树节点都必须执行。该接口提供的方法操作,如母公司设置的节点,新增的儿童和检索它们。
JJTree经营有两种模式,简单的和多(由于缺乏更好的条件) 。在简单模式剖析每个树节点的具体类型SimpleNode ;在多模式的类型分析树节点是源自名称节点。如果您没有提供实现的节点班JJTree将产生样本的基础上实现SimpleNode你。然后,您就可以修改,以适应实施。
是一个自上而下分析器, JJTree构造解析树自下而上。要做到这一点它使用堆栈的地方后,把他们的节点已经建立。当它发现了他们父母,它的持久性有机污染物的儿童从堆栈,并增加了他们的父母,并最终推动新的父节点本身。堆栈是开放的,这意味着你有机会获得它从语法行动:你可以推,流行和其他操纵其内容但是你觉得合适的。见节点范围和使用者的动作,下面的更重要的信息。
JJTree提供装饰两个基本品种的节点,和一些语法速记,使它们的使用便利
的安装过程,
安装jdk,安装完成后设置环境变量PATH路径。(这个不用多说了吧,学过java的人早已会)
2.,直接在其官方网站上下载,地址https://.dev.。-,就更方便了。
3.-,将其bin目录设置为环境变量PATH路径。
,的解压目录,然后进入其examples\MailProcessing目录。按照readme上面的指示运行:
javac *.java
java Digest < sampleMailFile > digestFile
java Faq < sampleMailFile>