JavaCC:Java语法解析器生成工具

JavaCC是一个Java编写的Java Parser生成器,生成的解析器全部为Java代码。JavaCC以及由它生成的解析器已经在各种平台上运行。JavaCC提供了一些列语法,包括Java 1.0.2、Java 1.1、Java 2以及许多HTML语法。

javacc

主要功能

JavaCC的功能包括:

  • 自顶向下(解析):与YACC生成的自底向上解析工具不同,JavaCC生成自顶向下(递归下降)的解析器。这样可以使用更通用的语法(尽管不允许使用左递归)。除了语法更加通用,自顶向下解析器还有很多其它优点,比如更易调试、在语法中解析任意非终结符,同时还可以在解析过程中在解析树进行向上、向下传值。
  • 使用广泛:JavaCC是到目前为止Java应用程序中最受欢迎的Parser生成器。JavaCC的下载量成千上万,其中专业用户数以千记(可能甚至有上万)。我们的邮件列表和新闻组里有数千参与者。
  • 一份文件囊括词法和语法规范:词法规范包括正则表达式、字符串等,与语法规范(BNF)包含在同一份文件中。这样使得语法更易于阅读和维护,可以在语法规范中嵌入正则表达式。
  • 构建树的预处理器:JavaCC带有JJTree,这是一款非常强大的树构建预处理器。
  • 高度可定制:JavaCC提供了很多不同的选项,可以定制自身和生成的解析器行为。这些选项有,在输入流上进行Unicode处理的种类,检查歧义的符号个数等。
  • 100%纯Java:JavaCC运行在所有兼容Java 1.1及更高版本的平台。无需移植就可以在各种机器上使用,真正做到了“一次编写,到处运行”。
  • 文档生成:JavaCC提供了一个叫做JJDoc的工具,可以将语法文件转换成文档(也可以转成html)。
  • 丰富的示例:JavaCC的发布中包含了各种示例,比如Java和HTML语法。这些示例和配套文档是熟悉JavaCC的绝佳材料。
  • 国际化:JavaCC的词法分析器可以完全支持Unicode输入,词法规范也可以包含任意的Unicode字符。这样使得语言元素,比如Java标识符可以支持指定的Unicode字符(非ASCII)。
  • 语法和语义向前检测规范:JavaCC默认生成LL(1)解析器。然而,语法中的一部分可能不是LL(1)。JavaCC通过语法和语义向前检测在这些地方解决了本地的歧义。例如,在这些地方解析器仅支持LL(k),但在其它地方仍然保持LL(1)以提供更佳性能。归移法(Shift-reduce)和归约冲突(reduce-reduce conflict)对自顶向下解析而言不是问题。
  • 支持扩展的BNF规范:JavaCC支持在词法和语法中使用扩展BNF规范,比如(A)、(A)+等。在某种程度上,EBNF规范减少了对左递归的需求。实际上,EBNF更容易阅读,比如 A ::= y(x) 而不是 A ::= Ax|y。
  • 词法状态与词法处理(Action):JavaCC提供类似lex的词法状态和词法处理功能。JavaCC中,类似TOKEN、MORE、SKIP、语法变化等概念比其它工具更优秀。这样不仅让语法规范更整洁,也让JavaCC输出的错误和告警信息更清晰。
  • 大小写无关的词法分析:词法中可以定义标记是全局范围、词法还是词法中的某个部分处理时大小写无关。
  • 强大的调试功能:通过DEBUG_PARSER、DEBUG_LOOKAHEAD和DEBUG_TOKEN_MANAGER选项,可以深入解析过程了解标记的处理步骤。
  • 特殊标记:标记(Token)定义为语法规范中的某种特殊记号,在解析过程中标记会被解析器忽略,但是这些标记可以用工具进行处理。其中的一种应用是处理注释。
  • 清晰的错误报告:JavaCC的错误报告在Parser生成工具中位居前列。JavaCC生成的解析器可以清楚地定位解析错误并提供完整的诊断信息。

开发资源

官方网站:https://javacc.java.net/
开源地址:https://java.net/projects/javacc/sources/svn/show/trunk

打赏支持我整理更多优质资源,谢谢!

打赏编辑

打赏支持我整理更多优质资源,谢谢!

任选一种支付方式

1 收藏

资源整理者简介:唐尤华

唐尤华:我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其实我是一个程序员。 个人主页 · 贡献了108个资源 · 18 ·    


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer