`
bluky999
  • 浏览: 721376 次
  • 性别: 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等)
  • 某些场合,用于自定义不只是用于查询的新语言

 

分享到:
评论

相关推荐

    CMM语言解释器JAVA实现(javacc5.0)

    下面将详细介绍CMM、解释器、JAVA以及javacc5.0在构建解释器中的应用。 1. CMM语言:CMM可能是一种定制的、简单的或教学用的编程语言,其设计目标可能是为了教学目的,让学生理解编译器或解释器的工作原理。CMM语言...

    利用开源工具搭建小型搜索引擎

    - **5.2.1 JavaCC简介**: 介绍JavaCC工具的用途和特点。 - **5.2.2 通过JavaCC构建的Lucene标准分析器**: 展示如何使用JavaCC构建自定义的Tokenizer。 **5.3 LUCENE分析器——ANALYZER** - **5.3.1 标准分析器——...

    又是一个语法分析的的小程序

    例如,判断字符串“baabbb”是否符合该文法规则的过程就是一个典型的语法分析应用。 #### 6. **编译器开发环境** 对于JavaCC等工具的使用,还需要考虑具体的开发环境设置,例如JDK版本的要求、路径和类路径的配置...

    SmartCalculator

    Java中,可以使用正则表达式来识别数字和运算符,然后通过递归下降解析(Recursive Descent Parsing)或者使用现成的解析库(如JavaCC或ANTLR)来构建抽象语法树(AST,Abstract Syntax Tree)。在这个树结构中,每...

    Delphi 12 控件之DB.Browser.for.SQLite-v3.13.1-win32.rar

    DB.Browser.for.SQLite-v3.13.1-win32.rar

    含热电联供的智能楼宇群协同能量管理策略:基于多主体协同与需求响应的热电混合运行策略研究,“基于Stackelberg博弈与需求响应的智能楼宇群热电协同能量管理策略”,MATLAB代码:含热电联供的智能

    含热电联供的智能楼宇群协同能量管理策略:基于多主体协同与需求响应的热电混合运行策略研究,“基于Stackelberg博弈与需求响应的智能楼宇群热电协同能量管理策略”,MATLAB代码:含热电联供的智能楼宇群协同能量管理 关键词:楼宇能量管理系统;热电联供系统;Stackelberg博弈;需求响应 参考文档:《含热电联供的智能楼宇群协同能量管理》华北电力硕士lunwen 仿真平台:MATLAB 主要内容:本文提出了一种计及热电耦合需求响应的智能楼宇群的多主体协同能量管理策略。 传统热电联供系统采取单一的“以电定热”或“以热定电”运行策略,在实际运用中将无可避免地造成能源的浪费。 针对这一现状,本文采取“热电混合运行”策略对联供系统进行调控,在该运行策略下,运营商可以结合不同时段的价格信息、负荷水平等因素灵活采取使自身收益最大化的运行策略。 在热电协同能量管理层面,以楼宇群运营商的收益以及用户的效益最大化为目标,提出了智能楼宇群内部的优化定价策略,运营商在系统中负责向用户供电与供热,并自主制定电与热价格引导用户进行需求响应;其次,用户具有可平移电负荷以及可削减热负荷,可根据当前的价格信息自

    18考试真题最近的t78.txt

    18考试真题最近的t78.txt

    (参考项目)MATLAB交通道路标识识别.zip

    MATLAB交通标志识别系统可以通过图像处理和机器学习技术来识别道路上的不同交通标志。这个系统可以通过以下步骤来实现: 1. **数据收集**:收集具有不同交通标志的图像作为训练集,可以使用公开的交通标志数据集或者自己创建一个数据集。 2. **图像预处理**:对采集到的图像进行预处理,比如去噪、调整大小、灰度化等操作,以便更好地进行特征提取。 3. **特征提取**:从预处理后的图像中提取特征,例如颜色、形状、纹理等特征,以便训练分类器。 4. **分类器训练**:使用机器学习算法(如支持向量机、人工神经网络等)对提取的特征进行训练,以建立交通标志的分类模型。 5. **标志识别**:使用训练好的分类器对新的图像进行识别,并输出识别结果。 MATLAB提供了丰富的图像处理工具箱和机器学习工具箱,可以帮助实现交通标志识别系统。可以使用MATLAB编写代码来处理图像、提取特征、训练分类器和进行识别。同时,也可以借助深度学习工具箱来构建卷积神经网络(CNN)等深度学习模型进行交通标志的识别。 需要注意的是,在实际应用中,还需要考虑系统的实时性、准确性和稳定性等因素,以确保该系统在不同场景下能够有效地识别交通标志。

    19考试真题最近的t66.txt

    19考试真题最近的t66.txt

    全自动锂电池Degas机(抽气封口)的汇川总线与欧姆龙NJ系列联合控制系统设计 主站程序及操作界面设计,汇川模拟量与EtherCAT控制集成 E5CC温控与松下真空表联合压力调控的自动化流程 新

    全自动锂电池Degas机(抽气封口)的汇川总线与欧姆龙NJ系列联合控制系统设计 主站程序及操作界面设计,汇川模拟量与EtherCAT控制集成 E5CC温控与松下真空表联合压力调控的自动化流程 新能源锂电池生产中的多功能轴控制与故障管理功能研究 涵盖多维交互,多维监控与操作的汇川智能设备解决方案 总结:全自动化锂电池Degas机——基于欧姆龙NJ系列与威纶通触摸屏的智能控制系统,“锂电池全自动Degas机NJ501-EtherCAT总线智能控制及威纶通触摸屏一体化解决方案”,锂电池欧姆龙NJ501-1500,威纶通触摸屏程序 全自动锂电池Degas机(抽气封口),主站NJ501-1500+威纶通触摸屏。 整机采用EtherCAT总线网络节点控制,汇川总线控制,汇川模拟量模块控制。 欧姆龙NJ系列实际项目程序+威纶触摸屏程序+新能源锂电设备 轴控制全部封装成功能块,可按照使用选择对应的功能,JOG功能,相对定位,绝对定位。 扫码通信功能块。 E5CC温控器SP,SV,AT等读写温度控制,腔体松下真空表真空压力模拟量控制,电压内阻测试表通信读写控制。 压力放大器控制精封封头伺服电

    电动汽车充电站选址定容优化:基于MATLAB建模求解与成本最小化策略,电动汽车充电站选址定容优化:基于MATLAB的最优规划模型及初学者指南,电动汽车充电站的最优选址定容MATLAB程序 以规划期内充

    电动汽车充电站选址定容优化:基于MATLAB建模求解与成本最小化策略,电动汽车充电站选址定容优化:基于MATLAB的最优规划模型及初学者指南,电动汽车充电站的最优选址定容MATLAB程序 以规划期内充电站的总成本 (包括投资、运行和维护成本)和网损费用之和最小为目标,考虑了相关的约束条件,构造了电动汽车充电站最优规划的数学模型。 从34个位置中,选取7个充电站地址,进行选址优化 关键词:电动汽车;充电站;选址和定容 程序注释清晰,适合初学者学习 ,电动汽车; 充电站选址定容; MATLAB程序; 规划模型; 成本优化; 网损费用; 初学者学习; 程序注释清晰,基于MATLAB的电动汽车充电站选址定容优化程序:成本最小化与约束条件下的选址策略

    19考试真题最近的t21.txt

    19考试真题最近的t21.txt

    axiiiiiiiiiiiii ziji ceshi

    axiiiiiiiiiiiii ziji ceshi

    HCIP-Datacom-Network Automation Developer V1.0 网络自动化培训材料

    HCIP-Datacom-Network Automation Developer V1.0 网络自动化培训材料 01 网络编程与自动化概述.pptx 02 Python编程基础.pptx 03 Git原理与实践.pptx 04 SSH原理与实践.pptx 05 SNMP原理与实践.pptx 06 NETCONF YANG原理与实践.pptx 07 Telemetry原理与实践.pptx 08 OPS原理与实践.pptx 09 SDN概述.pptx 10 RESTful原理与实践.pptx 11 iMaster NCE-Campus开放API介绍.pptx 12 iMaster NCE-Fabric开放API介绍.pptx 13 网络人工智能简介.pptx 14 NCE业务开放可编程,pptx

    (参考项目)MATLAB的答题纸答题卡识别.zip

    MATLAB答题卡识别系统是一种基于MATLAB平台开发的系统,旨在识别和评分学生答题卡的答案。这种系统通常使用图像处理和计算机视觉技术,可以自动扫描、识别和分析答题卡上的填涂信息,从而快速得出学生的成绩。 MATLAB答题卡识别系统通常包括以下主要组件和功能: 1. 图像采集:通过扫描或拍摄学生填写的答题卡,获取数字化图像数据。 2. 图像预处理:对采集到的图像进行去噪、二值化、裁剪等处理,以提高后续的识别准确性。 3. 特征提取:从预处理后的图像中提取出有用的特征信息,如填涂区域的位置、大小等。 4. 答案识别:采用图像处理算法对答题卡上的填涂信息进行识别和分析,将其映射到对应的答案选项。 5. 成绩计算:根据识别到的答案信息,计算学生的得分并生成成绩报告。 MATLAB答题卡识别系统可以广泛应用于教育领域,如学校考试、培训机构模拟考试等场景中,可以大大提高答题卡的批改效率和准确性,同时也为教育教学工作提供了便利。

    系统涉及角色: 学生,教师,管理员,项目后端采用ssm框架 前端采用HTML+jQuery+bootstrap 数据库使用了MySQL .zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    基于JSP+Servlet的网上商城系统。数据库:sql Server.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    随机配置网络模型SCN多输入单输出拟合预测建模与效果评估图集展示,随机配置网络模型SCN多输入单输出拟合预测建模工具-直观输出预测图与评价报告,随机配置网络模型SCN做多输入单输出的拟合预测建模

    随机配置网络模型SCN多输入单输出拟合预测建模与效果评估图集展示,随机配置网络模型SCN多输入单输出拟合预测建模工具——直观输出预测图与评价报告,随机配置网络模型SCN做多输入单输出的拟合预测建模。 程序内注释详细直接替数据就可以使用。 程序语言为matlab。 程序直接运行可以出拟合预测图,迭代优化图,线性拟合预测图,多个预测评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替就可以得到自己满意的效果。 ,核心关键词: 随机配置网络模型SCN; 多输入单输出拟合预测建模; 程序内注释; MATLAB程序; 拟合预测图; 迭代优化图; 线性拟合预测图; 预测评价指标。,Matlab下的多输入单输出网络模型预测建模及评价指标体系构建

    三菱PLC焊接机智能控制参考方案:含触摸屏程序、PLC程序、伺服定位与通信控制等全套解决方案,专为精准内外径圆环物料处理设计 ,三菱PLC焊接机智能控制参考方案:集成触摸屏程序、PLC编程、伺服控制与

    三菱PLC焊接机智能控制参考方案:含触摸屏程序、PLC程序、伺服定位与通信控制等全套解决方案,专为精准内外径圆环物料处理设计。,三菱PLC焊接机智能控制参考方案:集成触摸屏程序、PLC编程、伺服控制与通讯技术,实现精准焊接与数据闭环管理。,三菱PLC焊接机控制参考程序。 包含触摸屏程序,PLC程序,IO表,伺服参数,通讯协议参数。 该设备由24个伺服电机、1套焊接机、2套CCD、4套扫码枪、6套位移传感器组成,plc程序有注释里面fb块也没加密,电气控制采用三菱Q系列Q06UDV型CPU,内置以太网通过TCP IP形式与上位机CCD及扫码枪通讯,两套QD77MS16定位模块控制伺服,外加QJ71C24N用于与位移传感器通过ModBus RTU协议进行串口通讯获取数据,另外运用三菱MX Conpnonet软件与上位机通讯完成与客户MES系统闭环控制,OEE数据采集并上传至客户工厂云服务器系统。 该设备组装物料小件尺寸小,为内外径相差0.79mm(圆环宽度)的小圆环,料盘为8X10的矩阵料盘,吸取较难,因此PLC自写了一套算法,采用三点设定自动运算出80个点的XY坐标,吸取成功率达99%以

    Qt5.12Linux+Win安装包-压缩分卷08(共10卷)

    第08卷,密码在对应的文章内。

Global site tag (gtag.js) - Google Analytics