javaCC
JAVA版 yacc lex 啊,lucene 使用这个来做 query 解析.
官方网站https://javacc.dev.java.net/
ibm DW介绍
JavaCC、解析树和 XQuery 语法
http://www-900.ibm.com/developerWorks/cn/xml/x-javacc/part1/index.shtml
现在你可以定义自己的语言!
http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/dm-0401brereton/index.shtml
javaworld 上文章
Build your own languages with JavaCC :
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-cooltools-p2.html
JavaCC 使用 .jj 的文件
一个简单的计算器Calculator.jj
使用javacc Calculator.jj生成parser
jjdoc Calculator.jj生成BNF
options
{
LOOKAHEAD=2;
}
PARSER_BEGIN(Calculator)
public class Calculator
{
public static void main(String args[]) throws ParseException
{
Calculator parser = new Calculator(System.in);
while (true)
{
parser.parseOneLine();
}
}
}
PARSER_END(Calculator)
SKIP :
{
" "
| "\r"
| "\t"
}
TOKEN:
{
< NUMBER: ()+ ( "." ()+ )? >
| < DIGIT: ["0"-"9"] >
| < EOL: "\n" >
}
void parseOneLine():
{
double a;
}
{
a=expr() { System.out.println(a); }
|
| { System.exit(-1); }
}
double expr():
{
double a;
double b;
}
{
a=term()
(
"+" b=expr() { a += b; }
| "-" b=expr() { a -= b; }
)*
{ return a; }
}
double term():
{
double a;
double b;
}
{
a=unary()
(
"*" b=term() { a *= b; }
| "/" b=term() { a /= b; }
)*
{ return a; }
}
double unary():
{
double a;
}
{
"-" a=element() { return -a; }
| a=element() { return a; }
}
double element():
{
Token t;
double a;
}
{
t= { return Double.parseDouble(t.toString()); }
| "(" a=expr() ")" { return a; }
}
from 新云: javaCC
发表于 @ 2005年04月19日 10:41:00|评论(loading...)|编辑