javaCC学习笔记

王朝java/jsp·作者佚名  2008-05-31
宽屏版  字体: |||超大  

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

{

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有