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
博客介绍了JavaCC,它是JAVA版的yacc lex,Lucene用其进行query解析。还给出了JavaCC的官方网站,以及ibm DW、javaworld上关于JavaCC的介绍文章链接,同时提到JavaCC使用.jj文件,如简单计算器Calculator.jj 。
125

被折叠的 条评论
为什么被折叠?



