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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值