JAVACC 的研究和应用
目录:
1,Javacc的初步入门…………………………………………………………..
1.1 Javacc的简介…………………………………………..……1
1.2 Javacc输出什么文件………………………………………….2
1.3 Token Manager………………………………………………..3
1.4 Javacc的安装…………………………………………………..4
1.5Javacc的原理…………………………………………………..5
2,Javacc的三个工具…………………………………………………….6
2.1javaCC的使用…………………………………………….6
2.2jjTree的使用………………………………………………11
2.3jjDoc的使用………………………………………………14
3,Javacc的输入与输出文档……………………………………………15
4,jj文档的认识………………………………………………………….18
5,javacc中碰到冲突时,如何解决?…………………………………21
例如遇到Choice Confict怎么办?………………………..22
6,JJTree的概述与节点的问题………………………………………25
7,总结与归纳……………………………………………………………28
1.1,javacc简介
javacc是做编译器用的工具,compiler's compiler ;javacc就是个语法分析器,可以自己构造合适的语法,用到的是上下文无关文法来做语法分析,可以自己添加相应的处理动作对语言的问题进行处理
javacc可以用来生成语法分析器,相当于C中的yacc
Java Compiler Compiler 学习java的学习方法是一个用JAVA开发的最受欢迎的语法分析生成器。这个分析生成器工具可以读取上下文无关且有着特殊意义的语法并把它转换成可以识别且匹配该语法的JAVA程序。它还提供JJTree等工具来帮助我们建立语法树。JavaCC plug-in:一个用于辅助JavaCC应用程序开发的Eclipse插件
JavaCC是一个java语言分析器,就是按照“模版”,“装配”不同的语言分析程序的源代码。复杂语言的语法通常都是使用 BNF(巴科斯-诺尔范式,Backus-Naur Form)表示法或者其“近亲”― EBNF(扩展的 BNF)描述的。自动化工具可以使用那些描述(我将使用通用的术语 BNF来指代这两种变体)或与它们近似的描述来为你生成解析代码。
JavaCC 的长处在于它的简单性和可扩展性。要编译由 JavaCC 生成的 Java 代码,无需任何外部 JAR 文件或目录。仅仅用基本的 Java 1.2 版编译器就可以进行编译。而该语言的布局也使得它易于添加产生式规则和行为。该 Web 站点甚至描述了如何编制异常以便给出用户合适的语法提示
最后,JavaCC可以处理任何语言,不仅仅只有程序语言,只要你能够描述那种语言的规则给JavaCC,他就可以对语言进行处理。
JavaCC被用来做什么?
JavaCC 已经用于为下面的语言产生语法分析程序,:即RTF, Visual Basic, Python, Rational Rose mdl files, XML, XML DTDs, HTML, C, C++, Java, JavaScript, Oberon, SQL, VHDL, VRML, ASN1, email headers,以及许多的私有语言。它同样可以用来构造文件读本, 还有计算器等等!
JavaCC不能做什么?
Javacc不能自动的建立语法树(或者其他的特殊的语法分析程序输出),至少有2种建立语法树的工具,即JJTree 与JTB。在javacc的基础上,手动建立语法树在语法分析程序上很容易。
Javacc不能够建立符号表,同样,如果你想要一种与语言的符号表,然而,他提供了很好的框架。
Javacc不能够产生输出语言。然而,一旦你有语法树,很容易从中得到字符输出。
1.2 JavaCC输出什么文件
JavaCC 是一个程序生成器。它读入 .jj 文件, 只要.jj 文件中没有错误就可以了,产生一些列的JAVA源文件。在默认的情况下,它产生如下系列的文件:
Boiler-plate files
o SimpleCharStream.java 代表输入字符流
o Token.java – 代表单一的输入标记
o TokenMgrError.java – 从 token manager中抛出的错误
o ParseException.java –一个异常指示,即输入不遵守语法分析程序中的语法
∙ Custom files (XXX表示你所选择的文件名字).
o XXX.java – 语法分析程序的类名
o XXXTokenManager.java - the token manager class.
o XXXConstants.java - an interface associating token classes with symbolic names.
下面我们通过如下的例子来说明:
这个例子可以在javacc-4.0/doc/examples/SimpleExamples/Simple1.jj看到
......
PARSER_BEGIN(Simple1)
public class Simple1 {
public static void main(String args[]) throws ParseException {
Simple1 parser = new Simple1(System.in);
parser.Input();
}
}
public class Simple1 {
public static void main(String args[]) throws ParseException {
Simple1 parser = new Simple1(System.in);
parser.Input();
}
}
PARSER_END(Simple1) void Input() : {} {
MatchedBraces() ("\n"|"\r")*
}
void MatchedBraces() : {} {
"{" [ MatchedBraces() ] "}" }
MatchedBraces() ("\n"|"\r")*
}
void MatchedBraces() : {} {
"{" [ MatchedBraces() ] "}" }
......
设置好javacc的bin目录后,在命令提示符下输入
javacc Simple1.jj
然后javacc就会为你生成下面几个java源代码文件
Simple1.java
Simple1TokenManager.java
Simple1Constants.java
SimpleCharStream.java
Simple1TokenManager.java
Simple1Constants.java
SimpleCharStream.java
Token.java
TokenMgrError.java
TokenMgrError.java
1.3 Token Manage
Token Manage ,它读入一系列的字符串,最后产生一系列叫做标记的目标。这个规则用于将一系列的字符窜分解为一系列的标记。语法分析程序消耗一系列的标记,分析它的结构,语法分析程序产生的结果决定你自己。
1.4Javacc的安装
1. 安装jdk,安装完成后设置环境变量PATH路径。
CLASSPATH C:\Program Files\Java\jdk1.6.0\lib\toools.jar;.
PATH C:\Program Files\Java\jdk1.6.0\bin;.
2.下载javacc,直接在其上下载,地址javacc.dev.java。我下载的是4.0版本的
javacc-4.0.zip。
3.解压缩javacc-4.0.zip到任意目录(我是解压到桌面的),将其bin目录设置为环境变量PA
TH路径。
4.打开dos,进入javacc的解压目录,然后进入其examples\MailProcessing目录。按照readme上面的指示
运行:
javacc Digest.jj
javacc Faq.jj
javac *.java
java Digest < sampleMailFile > digestFile
java Faq < sampleMailFile
5.打开新生成的digestFile和sampleMailFile查看效果。
4.打开dos,进入javacc的解压目录,然后进入其examples\MailProcessing目录。按照readme上面的指示
运行:
javacc Digest.jj
javacc Faq.jj
javac *.java
java Digest < sampleMailFile > digestFile
java Faq < sampleMailFile
5.打开新生成的digestFile和sampleMailFile查看效果。
1.5Javacc的原理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论