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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 自考02197概率论与数理统计(二)试卷及答案解释2016-2021
- java毕设项目之游戏分享网站lw(完整前后端+说明文档+mysql).zip
- java毕设项目之ssm助学贷款+jsp(完整前后端+说明文档+mysql+lw).zip
- IBM Instana应用性能监视.pptx
- webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源
- 黑马最新Hive存储压缩与优化课程总结
- 商城系统项目源代码全套技术资料.zip
- 番茄图像目标检测数据【已标注,约4,300张数据,YOLO 标注格式】
- 校园生活相关项目源代码全套技术资料.zip
- C语言上机实验_1.pptx
- 基于遗传算法求解TSP问题的研究 50个样本点
- 基于XGBoost的振动数据预警模型与参数优化技术-构建一个基于XGBoost的振动信息数据集预警模型 首先引入算法实现动态阈值设置,然后进行参数优化
- sublimeText 4
- 西红柿叶片缺陷分类数据集【已标注,约500张数据】
- 自考00023《高等数学(工本)》试题及答案及复习资料
- 智能点阵笔项目源代码全套技术资料.zip
评论0