lex

Go实现自定义语言的基础

喜夏-厌秋 提交于 2020-09-30 13:41:35
0x01 自言自语 一直就对解析文档,比较感兴趣,一直没深入研究,只停留在仅知道 Lex & yacc 和 antlr 的名词阶段,最近看了go-zero的api解析器,觉得甚好,是时候花时间学习一下了。 简单看了go-zero发现是自己实现了词法分析、语法解析,这不符合我的一贯偷懒作风,所以并未其源码开始学习。既然用golang那么他自带的goyacc就是我学习的不二之选。当然你可能会听说Lex&yacc 已经很古老了,antlr更先进一点。但是既然goyacc能成为golang官方工具,那么肯定还是值得你学习的。 goyacc的文档非常的少,少到什么程度?少到你未来一定能搜到这篇。甚至连github上的使用例子也不多,大致就分两类:计算器、sql解析器,其中计算器目测是国外某大学的课程。 所以研究goyacc我花了好几个通宵、掉了少许头发。不经让这篇文章有了一个营销文案:花了一夜时间,搞懂了外国的一堂编译原理课。 个人对技术文章的理解是,文章可以有自己的观点、啰嗦、甚至幽默,但尽量不要放在学术部分,毕竟技术是严禁的。所以下面描述,我可尽能做一个无情的打字机,尽可能的按照文档风描述。 0x02 goyacc简易入门 安装 goyacc golang 1.8 版本之前 yacc 直接再带与go tool 无需自行安装。 鉴于使用的频率太少,遂在 golang 1.8 版本后

[01-26][小小影视合集][小小亲测][20部][21:50提前发布]

别说谁变了你拦得住时间么 提交于 2020-08-16 04:05:52
★☆ 目录 ☆★ ■垂直极限 ■法国黑金/流血的谎言 ■1303大厦 ■摩托教父 ■血腥数字/带血的号码 ■黑豹:彻丽行动 ■大买卖/鬼计神偷/极盗爆破 ■男儿本色 ■赎命24小时 ■美国黑帮 ■金发尤物 ■穿越苍穹/纵横宇宙 ■最遥远的距离 ■初雪/初雪之恋 ■贝奥武夫 ■临歧 ■窃遇偷香/小偷 ■女神捕之计中计 ■女神捕之谜局 ■亚历珊卓 1.垂直极限 简介: 哥伦比亚影片公司(Columbia, USA)2000年出品 主演:比尔-派克顿(Bill Paxton)    克里斯-奥唐奈(Chris O'Donnell)    伊萨贝拉-斯科拉普科(Izabella Scorupco)    罗宾-唐尼(Robin Tunney)    斯科特-格伦(Scott Glenn) 导演:马丁-坎贝尔(Martin Campbell) 类型:惊险片  这是一部充满激情的灾难动作片,一群登山爱好者在攀登世界第二高峰--K-2峰时,不幸陷入了一个“垂直洞穴”--一个雪山山体边缘的大裂缝之中。这一不幸事件使一名已经放弃了登山运动的年青人(克里斯-奥唐奈饰)向K-2峰发起了一次勇敢的挑战,他必须抢在时间的前面,征服雪峰,营救他的妹妹(罗宾-塔妮饰)和她的同伴。   影片由曾执导过《蒙面侠佐罗》和《黄金眼》的著名导演马丁-坎贝尔鼎力推出。片中男主角不仅在挑战自己的精神和体力的极限

编译lineage,gcc的版本问题

自古美人都是妖i 提交于 2020-08-14 23:00:14
从9.3.0版本升级到10.1.0版本后,编译出错,具体信息如下: /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here collect2: 错误:ld 返回 1 make[3]: *** [scripts/Makefile.host:127:scripts/dtc/dtc] 错误 1 make[2]: *** [kernel/xiaomi/msm8992/scripts/Makefile.build:455:scripts/dtc] 错误 2 make[2]: *** 正在等待未完成的任务.... HOSTLD scripts/mod/modpost make[1]: *** [kernel/xiaomi/msm8992/Makefile:525:scripts] 错误 2 make: *** [Makefile:130: sub-make] Error 2 make: Leaving directory 'kernel/xiaomi/msm8992' ninja: build stopped: subcommand failed. make:

nmake中文指南(转)

一个人想着一个人 提交于 2020-08-11 02:12:57
概述 —— 什么是makefile?或许很多Winodws的 程序员都不知道这个东西,因为那些 Windows的ID E都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要 懂。这就好像现在有这么多 的HTML的编辑器,但如果你想成为一个专业人士,你还是要了 解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile 了,会不会 写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile关系到了整个工程的编译规 则。一个工程中的源文件不计数,其按类型、 功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要 先编译,哪些文件需 要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作, 因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工 程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是 一个解释mak efile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make, Visual C++的nmake,Linux下GNU的make。可见

数据库分布式事务XA规范介绍及Mysql底层实现机制【原创】

。_饼干妹妹 提交于 2020-08-09 00:06:10
1. 引言 分布式事务主要应用领域主要体现在 数据库领域、微服务应用领域。微服务应用领域一般是柔性事务,不完全满足 ACID 特性,特别是 I 隔离性,比如说 saga 不满足隔离性,主要是通过根据分支事务执行成功或失败,执行相应的前滚的重试或者后滚的补偿操作来达成全局事务的最终一致性,但是全局事务与全局事务之间没有隔离性。 笔者了解到的分布式事务方案有 2PC 的 XA 规范,以及 Google 的 percolator 方案( TiDB 就采用这个实现,本质上是基于全局时间戳的乐观锁版本校验)。 mysql 的 XA 应用场景分为外部 XA 与内部 XA ,内部 XA 用于 binlog 与 stroage engine 之间,协调 binlog 与 redo 事务写入的原子性。外部 XA 用于 mysql 节点与 mysql 节点之间,协调跨物理库之间的原子性。本文主要介绍外部 XA 。 基于 mysql 的 XA 两阶段事务提交(2PC) 分布式事务,需要一个事务协调器( TransactionManager )来接受应用提交的全局事务 (Global Transaction) ,全局事务经过 TM 的分解后,分解成多个分支事务 (Branch Transaction) ,每个分支事务在具体的某个 mysql 实例上运行,其中 mysql 作为资源管理器( Resource

编译原理笔记6:从正规式到词法分析器(3):DFA最小化、词法分析器的构造、Lex 使用示例

匆匆过客 提交于 2020-08-08 19:09:40
从 DFA 到最小 DFA 关于星闭包的补充:一个语言被认为是所有可能字的子集。所有可能字的集合可以被认为是所有可能的字符串串接的集合。 DFA 最小化的过程,就是通过某些等效转换减少原 DFA 状态数的过程——这里的“等效转换”,就是对多余的状态进行合并。 那,什么叫多余?这里的多余,指的是对于同样的输入会得到同样的结果——比如在上面NFA转DFA的例子中,我们观察得到的DFA,发现其中的A、C状态对于字母表中任意的输入,都会给出相同的结果。那么这个A和C对任意输入而言就是等效的,它们两个就可以互相替代,我们也就可以把它们合并成一个状态。 将DFA最小化需要去除多余状态,所以如何最小化DFA的问题就转化为了如何找出“多余状态”的问题。我们需要一个方法来帮助我们判断某个状态是否是多余的。这里引入“等价”、“可区分”、“划分”的概念: 等价 定义:设 p、q ∈ S,对于任一输入序列 w∈Σ*,有 move(p, w)∈F 且 move(q, w)∈F,则称状态 p 和 q 等价。否则称 p、q 是可区分的,也就是存在 x∈Σ*,使得move(p, x) 和 move(q, x) 不能同时进入终态。 可区分 对于DFA中的任意两个状态t、s,若从其中一个状态出发能够接受输入字符串 ω,而从另一个状态出发却不能接受 ω,则称 ω区分状态t和s 。如果存在某个能够区分状态 t 和 s

mysql之存储引擎 体系结构 查询机制(二)

独自空忆成欢 提交于 2020-08-05 23:21:51
你讲学到 一 各大存储引擎介绍 csv存储引擎 archive存储引擎 memory 存储引擎 Myisam Innodb 对比 二 理解mysql体系结构 三 基于查询执行路径理解查询机制 1. mysql 客户端 / 服务端通信 2 查询缓存 不会缓存的情况: 查询缓存适用场景: 3 查询优化处理 执行计划 image-20200627213148005 id: select_type table type possible_keys key rows filtered extra 4 查询执行引擎 5 返回客户端 慢查询日志配置 慢查询日志分析: 慢查询日志分析工具 一 各大存储引擎介绍 存储引擎介绍: 1,插拔式的插件方式 ,插拔式的插件方式 2,存储引擎是指定在表之上的,即一个库中的每一个表都可 ,存储引擎是指定在表之上的,即一个库中的每一个表都可以指定专用的存储引擎。 3,不管表采用什么样的存储引擎,都会在数据区,产生对应 ,不管表采用什么样的存储引擎,都会在数据区,产生对应的一个 的一个frm文件(表结构定义描述文件) csv存储引擎 数据存储以 数据存储以CSV文件 文件 特点:不能定义没有索引、列定义必须为NOT NULL、不能设置自增列 不适用大表或者数据的在线处理 CSV数据的存储用,隔开,可直接编辑CSV文件进行数据的编排 数据安全性低 注:编辑之后

MySQL原理

假如想象 提交于 2020-08-04 19:11:16
本文基于 MySQL 8 在 上一篇:MySQL原理 - InnoDB引擎 - 行记录存储 - Compact格式 中,我们介绍了什么是 InnoDB 行记录存储以及 Compact 行格式,在这一篇中,我们继续介绍其他三种行格式。 Redundant 行格式 这个是最古老的,最简单粗暴的行格式了,现在基本上已经不用了,因为占用空间最多,从而导致内存碎片化最严重,是最低效的行格式了(针对现在varchar字段使用的更多,而对于 varchar 字段改变长度的更新大部分情况下就是将原有行的数据标记为已删除,然后在其他空间足够的地方新建记录,Redundant 顾名思义,占用空间更多,所以碎片化,空间浪费会更严重)。 MySQL官网的 Internal Mannual 给出的行格式示例,其实就是 Redundant 格式的: InnoDB Record High-Altitude Picture 创建一个和上一篇中的示例一样的表,插入相同的数据: CREATE TABLE `record_test_2` ( `id` bigint(20) DEFAULT NULL, `score` double DEFAULT NULL, `name` char(4) DEFAULT NULL, `content` varchar(8) DEFAULT NULL, `extra` varchar(16