JavaCC从入门到出门】的更多相关文章

一.JavaCC JavaCC是java的compiler compiler.JavaCC是LL解析器生成器,可处理的语法范围比较狭窄,但支持无限长的token超前扫描. 安装过程: 我是从github上down下来的zip压缩包,然后安装了下ant, 然后通过ant安装的javacc 1. 首先下载下来ant的源码,然后tar -zvxf apache-ant....tag.gz 解压缩,然后可以在解压出来的bin目录中看到ant的可执行文件 2. 从github下载javacc, 进入解压缩…
一.前言   在最开始使用JavaCC的时候,从网上查询了许多资料,但是网上的资料水平是参差不齐的,走了许多弯路,不得已自己查阅了英文版官网文档.令我伤心的是最后我回过头来再看那些博客资料时,发现其实他们写的都是没错的,只不过某些地方少了必要的讲解,以至于新手刚接触的时候是持续懵逼的.   不管怎样,下面内容是对官方文档的翻译,加上一些自己的理解.   官方文档连接:https://www.engr.mun.ca/~theo/JavaCC-Tutorial/javacc-tutorial.pdf…
操作背景: 电商网站上面的一个商品的增删改查: es 能接受的都是JSON格式的数据 Es 提供了一套简单的集群信息健康监控的api GET /_cat/health?v   epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent1496717921 10:5…
例6:计算器--添加括号.一元运算符和历史记录 1.calculator3.jj   我们只需要再添加一些特色,就可以得到一个可用的四则运算计算器.在这一版的修改中 ,我们将使得程序可以接收括号.负值,并且还可以通过$符号来引用上一次计算的结果.   对词法描述文件的修改如下所示,我们只添加下面3行: TOKEN : { < OPEN_PAR : "(" > } TOKEN : { < CLOSE_PAR : ")" > } TOKEN :…
例4:计算器--添加减法运算 1. calculator1.jj   为了使得计算器具备更多功能,我们需要更多的操作符,比如减法.乘法和除法.接下来我们添加减法运算.   在词法分析器的描述部分,我们添加如下生产式: TOKEN : { < MINUS : "-" > }   在词法分析器的描述文件中,我们层在定义EOL和NUMBER这两个token时,使用竖线来表示"或"的意思,以此来区分不同的选项.在语法分析器的BNF生产式中,我们也同样用竖线来表示…
例3:计算器-double类型加法   下面我们对上个例子的代码进行进一步的修改,使得代码具有简单的四则运算的功能.   第一步修改,我们将打印出每一行的值,使得计算器更具交互性.一开始,我们只是把数字加起来,然后再关注其他运算,比如减法.乘法和除法. 1.Options和class声明块   描述文件calculator0.jj的第一部分如下所示: /* calculator0.jj An interactive calculator. */ options { STATIC = false…
例2:整数加法运算--改良版(增强语法分析器) 1.修改   上一个例子中,JavaCC为BNF生产式所生成的方法,比如Start(),这些方法默认只简单的检查输入是否匹配BNF生产式指定的规范.但是我们也可以用java代码来扩充BNF生产式,使得由生产式生成的方法中也包含java代码.   我们加下来会对上面例一中的adder.jj代码做一些修改.对于其中的Start这个BNF生产式,我们加入一些声明和java代码,如下所示: int Start() throws NumberFormatEx…
例1:整数加法运算   在这个例子中,我们将判断如下输入的式子是否是一个合法的加法运算: 99 + 42 + 0 + 15   并且在输入上面式子的时候,数字与加号之间的任何位置,都是可以有空格或者换行符的,也就说,即使我们输入的式子是下面这种形式,我们所编写的词法和语法分析器也应该要能判断出来它是一个合法的加法运算表示形式: 99 + 42 + 0 + 15   (注:上面输入的式子中既有空格,也有制表符,还有换行符) 1.Option块和class声明块   语法描述文件的第一部分是: /*…
引:此文是自己学习python过程中的笔记和总结,适合有语言基础的人快速了解python3和没基础的作为学习的大纲,了解学习的方向:笔记是从多本书和视频上学习后的整合版. (一)初识python 1.一般文件以.py为格式:用#作注释. 2.一般对象不用特别声明,python会自动识别:一个对象也可以重新绑定到不同数据类型,因为python采用的是动态类型机制:但对已经声明过的对象则不能改变. 3.输出print("a"),在python控制台中也可以直接用这个对象名称,就会打印出来,…
跑第一个程序的时候经过坑爹的各种设置终于能用了. 如果遇到问题就谷歌或者百度,大牛的博客会给出解决方案的. vs2010+opencv3 目标:把书上的程序挨个敲一遍跑一遍. 现在已经跑了七章了,还有三章. 暑假还剩下一周.FLAG就不立了.…
假如: 9 shard,3 node Elasticsearch容错机制:master选举,replica容错,数据恢复 最佳分配情况: 这样分配之后,不管其中哪个node 宕机这个es 依然可以提供完整的share 返回: 假如出现了宕机情况: 这时候宕机了第一个: 容错机制: 开始进行master进行选举,重新选择一个master; 担当master的职责:…
自己搭的集群, 设备: win10 + ubuntu 16 的虚拟机一个: 下载的版本:elasticsearch-5.2.0 win10 解压下就好了,不说了. ubuntu 上,我想说多了都是泪!各种坑 1,对jdk的要求版本:1.8及其以上版本 2.添加一个…
第一个分析需求:计算每个tag下的商品数量 GET /ecommerce/product/_search{  "aggs": {    "group_by_tags": {      "terms": { "field": "tags" }    }  }} 将文本field的fielddata属性设置为true PUT /ecommerce/_mapping/product{  "propert…
1.query string search 2.query DSL 3.query filter 4.full-text search 5.phrase search 6.highlight search GET /ecommerce/product/_search 可以查询出当前索引下这个类型的所有数据, took 本次搜索耗费的时间:毫秒 timed_out:是否超时,这里是没有 —shards 分片所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica sh…
elasticsearch 1.安装JDK,至少1.8.0_73以上版本,java -version2.下载和解压缩Elasticsearch安装包,目录结构3.启动Elasticsearch:bin\elasticsearch.bat,es本身特点之一就是开箱即用,如果是中小型应用,数据量少,操作不是很复杂,直接启动就可以用了 4.检查ES是否启动成功:http://localhost:9200/?pretty 解释下: name: node名称cluster_name: 集群名称(默认的集群…
经过端午节这2天对 sharding-jdbc一直怀揣成梦想的去学习,还是有一些没有解决的问题: 上一张图:…
sjdbc有读写分离的功能,要使用这个功能,在创建数据源对象是要使用类:MasterSlaveDataSource,并且设置主备数据源和数据库名称 这个对象有下面的属性: name:数据库的名称 masterDataSource:主数据源对象 slaveDataSources:备库数据源类别 slaveLoadBalanceStrategy:选从算法 /** * 获取主或从节点的数据源名称. * * @param sqlStatementType SQL类型 * @return 主或从节点的数据…
感觉大神已经写好了,自己膜拜下下, 送上大神地址:http://www.cnblogs.com/zhongxinWang/p/4262650.html 这篇博客主要是理论的说明了什么是分库分表,路由等负载! 献上大牛们的童话故事:http://dangdangdotcom.github.io/sharding-jdbc/00-overview/…
例5:计算器--添加乘除法运算 1.calculator2.jj 根据上一个例子,可知要添加乘法和除法运算是很简单的,我们只需在词法描述部分添加如下两个token: TOKEN : { < TIMES : "*" > } TOKEN : { < DIVIDE : "/" > }   接下来我们修改Expression这个生产式,对它的修改跟上一步添加减号运算所做的修改很相似: Expression --> Primary (PLUS P…
原来微信小程序的js跟这个差不多啊.这个也不像jQuery那种完全是为了方便写js的感觉,难道算前端框架?还不太了解,总之要先看看,然后用HBuilder快点上手做点东西…… -------------------------------------------------- 不,我错了.我爱jQuery,再见. -------------------------------------------------- 我还会再回来的! 参考资料 视频教程:https://learning.dclou…
MySQL 中的数据库(Database)就像是一个容器,其中包含了各种对象.例如,数据表(Table).视图(View).存储过程(Stored Procedure)以及触发器(Trigger)等.其中,表是存储数据的主要对象.它们之间的关系如下图所示: 本篇主要介绍数据库的创建.查看.选择和删除操作,包括使用 mysql 命令行和 MySQL Workbench 图形工具两种方式. 3.1 通过 mysql 命令行管理数据库存储数据需要先创建表,而创建表之前需要创建数据库.我们先使用 mys…
前言 最近对目标识别感兴趣,想做一些有趣目标识别项目自己玩耍,本来选择的是 YOLOV5 的,但无奈自己使用 YOLOV5 环境训练模型时,不管训练多少次 mAP 指标总是为 0,而其它 pytorch 项目却能正常运行,尝试解决无果后发现另一个更好用的目标识别库--MMDetection ,最终实现了自己的需求.本文首先介绍了 MMDetection 库在 Windows 11 下的安装方式,及可能遇到的问题和解决方法:然后说明了其自带的单图片检测.视频检测.摄像头检测工具的使用方法,并在此之…
IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天服务等)背后几乎都是由Linux系统支撑的服务器,超过20亿人每天都随身携带基于Linux内核开发的 Android手机出门,Linux也广泛应用在嵌入式系统上.因此学习Linux系统变得尤为重要,对于普通用户而言,平面式的学习Linux系统的基本使用已经足够,但对于开发者或者运维人员而言,深入学习Linux…
1.1 UML基础知识扫盲 UML这三个字母的全称是Unified Modeling Language,直接翻译就是统一建模语言,简单地说就是一种有特殊用途的语言. 你可能会问:这明明是一种图形,为什么说是语言呢?伟大的汉字还不是从图形(象形文字)开始的吗?语言是包括文字和图形的!其实有很多内容文字是无法表达的,你见过建筑设计图纸吗?里面还不是很多图形,光用文字能表达清楚建筑设计吗?在建筑界,有一套标准来描述设计,同样道理,在软件开发界,我们也需要一套标准来帮助我们做好软件开发的工作.UML就是…
原文网址:http://www.zhihu.com/question/20264108 iOS 开发怎么入门? 请问有设计模式.内存管理方面的资料吗?最好有除了官方文档之外的其它内容,10 条评论 分享 按投票排序按时间排序92 个回答 543赞同反对,不会显示你的姓名郝健宗,曾经的注册会计师,如今鹅厂iOS工程师唐鑫敏.Marcel Ning.Evasto 等人赞同------- 2015年7月22日更新 ------刚开始做程序员的时候,曾经把自己自学iOS开发的一点经验写在这里分享.不知不…
什么是控制流程?简单来说就是控制程序运行逻辑的,因为程序一般而言不会直接一步运行到底,而是需要加上一些判断,一些循环等等.举个栗子,就好比你准备出门买个苹果,把这个过程当成程序的话,可能需要先判断一下外面是否下雨,下雨的话就得带伞,否则就直接出门,同时,外面可能有很多家水果店,那去哪家买呢?这里把价格放在第一要素,所以你会一家一家跑,直到找到最便宜的那家为止. 其实,上述买苹果的过程,已经用了两种最常用的控制流程:条件和循环.画个流程图就像这样: 通过这个图,大家应该能很清楚的了解整个决策过程.…
机器学习相关的文章太多,选取一篇本人认为最赞的,copy文章中部分经典供自己学习,摘抄至 http://www.cnblogs.com/subconscious/p/4107357.html#first  示例入门 传统上如果我们想让计算机工作,我们给它一串指令,然后它遵照这个指令一步步执行下去.有因有果,非常明确.但这样的方式在机器学习中行不通.机器学习根本不接受你输入的指令,相反,它接受你输入的数据! 也就是说,机器学习是一种让计算机利用数据而不是指令来进行各种工作的方法.这听起来非常不可思…
写在前面的话:很少一次上这么多干货,主要是对Linux的一些基本操作,常用的软件的安装,这个其实不算什么吧,方便大家也方便我,新手们早点入门Linux,少走弯路,网上资料很多,相当于一个整合咯,都是一些琐碎的东西,大佬们可以出门左拐,谢谢! 一:安装Ubuntu,Windows双系统. Ubuntu的安装还是挺傻瓜的,之前也写过一篇文章吐嘈宏碁笔记本,其实都还好,遇魔杀魔,遇鬼杀鬼,很简单的,推荐先装Windows,然后Ubuntu,不用担心Ubuntu让你找不回你之前的Windows,就是一个…
首先去freemarker官网下载源码jar包,本文是基于freemarker-2.3.21.tar.gz进行研究的.解压源码包,找到freemarker的源码部分导入eclipse工程中.需要注意的是:freemarker的ftl文件解析使用javacc实现的,所以源码中没有解析类(FMParse.java).要想研究freemarker源码,往往还需要引入freemarker.jar(含有FMParse.class),否则源码会出现编译问题.另外,还需要引入的jar包有:commons-lo…