WEB开发网
开发学院WEB开发Jsp javaCC学习笔记 阅读

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的字符定义*/

{

Tags:javaCC 学习 笔记

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接