javaCC学习笔记
2008-01-05 09:07:51 来源:WEB开发网核心提示:javaCC的功能和yacc相似,主要根据bnf范式生成解析程序,javaCC学习笔记,不过javaCC是集合了词法分析和语法分析生成java解析代码,主页为:https://javacc.dev.java.net/ javaCC有三个工具javaCC 用来处理语法文件(jj)生成解析代码;jjTree 用来处理
javaCC的功能和yacc相似,主要根据bnf范式生成解析程序,不过javaCC是集合了词法分析和语法分析生成java解析代码,主页为:https://javacc.dev.java.net/
javaCC有三个工具
javaCC 用来处理语法文件(jj)生成解析代码;
jjTree 用来处理jjt文件,生成树节点代码和jj文件,然后再通过javaCC生成解析代码;
jjDoc 根据jj文件生成bnf范式文档(Html)
javaCC使用的各种语言的Grammar 文件这里有很多http://www.cobase.cs.UCla.edu/pub/javacc/ ,例如HTML,xml,python,vb…..,很多足够用了,呵呵。
javaCC 的使用
javaCC生成的文件中,最主要的是《Grammar》.java这个就是解析器的主程序了了,《Grammar》名由jj中定义。
现在根据例子说明jj文件的定义:
BNF范式为:
EXPRession
::=
( ( <NEWLINE> )* Simple_Expression <NEWLINE> )* <EOF>
Simple_Expression
::=
Term ( addop Term )*
addop
::=
<PLUS>
<MINUS>
Term
::=
Factor ( mulop Factor )*
mulop
::=
<TIMERS>
<OVER>
Factor
::=
<ID>
<NUM>
<MINUS>
<PLUS>
<LPAREN> Simple_Expression <RPAREN>
/*这是一个整数的四则运算的例子*/
/* 运行 javaCC Grammar.jj
javac *.java
java Grammar
>>> 1+1*(1+1)
3
>>>^Z
*/
PARSER_BEGIN(Grammar) /*解析代码的入口*/
public class Grammar {
public static final int PlusOP=1;
public static final int MinusOP=2;
public static final int TimersOP=3;
public static final int OverOP=4;
public static void main(String args[]) throws ParseException {
Grammar parser = new Grammar(System.in);
parser.Expression();
}
}
PARSER_END(Grammar)
SKip : /* 不处理的字符*/
{
" " "\t"
}
TOKEN : /*生成token的字符定义*/
{
更多精彩
赞助商链接