`
bluky999
  • 浏览: 716828 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JavaCC简介与典型应用

    博客分类:
  • Java
阅读更多

1 JavaCC is a parser/scanner generator for java : https://javacc.dev.java.net/

 

如果你还没有听说过JavaCC,建议你在wikipedia上从了解YACC(Yet Another Compiler Compiler)开始。

 

2 基本简介 【来自IBM DW文章的翻译】

 

许多基于 Web的项目都包含即席(ad-hoc)查询系统以允许终端用户搜索信息。因此,终端用户会需要某种语言来表达他们所希望搜索的内容。以前,用户查询语言的定义极其简单。如果终端用户满足于使用与最典型的 Google 搜索一般简单的语言,那么 Java 的 StringTokenizer对于解析任务就绰绰有余了。然而,如果用户希望有一种更健壮的语言,比如要添加括号和"AND"/"OR"逻辑,那么我们很快就会发现我们需要更强大的工具。我们需要一种方法,用以首先定义用户将要使用的语言,然后用该定义解析相应的条目并且对各种后端数据库制定正确的查询。

这就是工具JavaCC 出现的原因。JavaCC 代表"Java® Compiler Compiler",是对 YACC("Yet Another Compiler Compiler")的继承(YACC 是 AT&T 为了构建 C 和其他高级语言解析器而开发的一个基于 C的工具)。YACC 和其伙伴词法记号赋予器(tokenizer)——"Lex"——接收由常用的巴科斯-诺尔范式(Backus-Nauer form,又称 Bacchus Normal Form,BNF)形式的语言定义的输入,并生成一个"C"程序,用以解析该语言的输入以及执行其中的功能。JavaCC 与 YACC一样,是为加快语言解析器逻辑的开发过程而设计的。但是,YACC 生成 C 代码,而 JavaCC 呢,正如您想像的那样,JavaCC 生成的是
Java 代码。<br><br>JavaCC 的历史极具传奇色彩。它起源于 Sun 公司的"Jack"。Jack后来辗转了几家拥有者,比如著名的 Metamata 和 WebGain,最后变成了 JavaCC,然后又回到了 Sun。Sun 公司最后在
BSD 的许可下将它作为开放源代码的代码发布。JavaCC 目前的 Web 主页是 http://javacc.net.java.net。

JavaCC的长处在于它的简单性和可扩展性。要编译由 JavaCC 生成的 Java 代码,无需任何外部 JAR 文件或目录。仅仅用基本的 Java1.2 版编译器就可以进行编译。而该语言的布局也使得它易于添加产生式规则和行为。该 Web站点甚至描述了如何编制异常以便给出用户合适的语法提示。

3 IBM DW上关于JavaCC介绍的原文   http://www.ibm.com/developerworks/data/library/techarticle/dm-0401brereton/index.html

 

4 JavaCC典型应用

 我个人根据理解总结如下:

  • 在搜索应用中为用户自定义查询语言
  • 在一些工具软件或者平台中作为语法分析等工具(使用JJTree等)
  • 某些场合,用于自定义不只是用于查询的新语言

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics