159-其他资源-JavaCC、解析树和 XQuery 语法,第 2 部分1
JavaCC、解析树和 XQuery 语法第 2 部分 JavaCC 是一个流行的解析器生成器,它可以根据BNF(巴科斯-诺尔范式,Backus-Naur Form)生成解析器。第 2 部分演示了如何修改第 1 部分中的样本代码,以便使用附加工具 JJTree 来构建相同解析的解析树表示。JJTree 是 JavaCC 的伙伴工具,它可以提供一个解析器,该解析器在运行时的主要工作不是执行嵌入的 Java 操作,而是构建正在解析的表达式的独立解析树表示。 使用 JJTree 可以独立于生成该解析树的解析代码,捕捉在运行时易于遍历和查询的单个树中的解析会话的状态。这使得调试变得更容易,并缩短开发时间。 JJTree 基础知识 JJTree 是一个预处理器,为特定 BNF 生成解析器只需要简单的两步: 1. 对所谓的 .jjt 文件运行 JJTree;它会产生一个中间的 .jj 文件 2. 用 JavaCC 编译该文件 .jjt 文件的结构只是 .jj 格式的较小扩展。JJTree 添加了一个新的语法 node-constructor 构造,该构造可以让您指定在解析期间在哪里以及在什么条件下生成解析树节点。 清单 1 显示了一个简单的 JavaCC .jj 脚本,它类似于您在第 1 部分中看到的脚本。为简便起见,我只显示了结果。 清单 1. simpleLang 的 JavaCC 语法 void simpleLang() : {} { addExpr() <EOF> } void addExpr() : {} { integerLiteral() ( "+" integerLiteral() )? } void integerLiteral() : {} { <INT> } SKIP : { " " | "\t" | "\n" | "\r" } TOKEN : { < INT : ( ["0" - "9"] )+ > } 该语法说明了该语言中的合法表达式包含: 1. 单个整数文字,或 2. 一个整数文字,后面跟一个加号,再跟另一个整数文字。 对应的 JJTree .jjt 脚本(再次声明,略有简化)看上去可能如下: 清单 2. 等价于清单 1 中的 JavaCC 语法的 JJTree SimpleNode simpleLang() : #Root {} { addExpr() <EOF> { return jjtThis; }} void addExpr() : {} { integerLiteral() ( "+" integerLiteral() #Add(2) )? } void integerLiteral() : #IntLiteral {} { <INT> } SKIP : { " " | "\t" | "\n" | "\r" } 使用 JJTree 可以在运行时遍历该解析树,以便恢复其状态信息,并对正在解析的表达式求值。本文结尾将演示如何开发通用例程,用于遍历从一小部分 XQuery 语法生成的解析树,并对其求值。
剩余8页未读,继续阅读
- 粉丝: 30
- 资源: 326
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0