javaCC

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

你可能感兴趣的:(Java)