终于实现了一门属于自己的编程语言 前言都说程序员的三大浪漫是:操作系统、编译原理、图形学;最后的图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。 这四项技术如果都能掌握的话那岂不是在 IT 行业横着走了,加上这几年互联网行业越来越不景气,越底层的技术就越不可能被替代;所以为了给自己的 30+ 危机留点出路,从今年上半年开始我就逐渐开始从头学习编译原理。 功夫不负有心人,经过近一 2022-09-07 gscript > compiler #go #antlr
自己动手写脚本解释器--实现作用域与函数调用 前言上次利用 Antlr 重构一版 用 Antlr 重构脚本解释器 之后便着手新增其他功能,也就是现在看到的支持了作用域以及函数调用。 1234567891011121314int b= 10;int foo(int age){ for(int i=0;i<10;i++){ age++; } return b+age;}int add(int a, 2022-08-17 gscript > compiler #go #antlr
用 Antlr 重构脚本解释器 前言在上一个版本实现的脚本解释器 GScript 中实现了基本的四则运算以及 AST 的生成。 当我准备再新增一个 % 取模的运算符时,会发现工作很繁琐而且几乎都是重复的;主要是两步: 需要在词法解析器中新增对 % 符号的支持。 在语法解析器遍历 AST 时对 % token 实现具体逻辑。 其中的词法解析和遍历 AST 完全是重复工作,所以我们可否能够简化这两步呢? 2022-08-08 gscript > compiler #go #antlr
用位运算为你的程序加速 前言最近在持续优化之前编写的 JSON 解析库 xjson,主要是两个方面的优化。 第一个是支持将一个 JSONObject 对象输出为 JSON 字符串。 这点在上个版本中只是利用自带的 Print 函数打印数据: 12345678func TestJson4(t *testing.T) { str := `{"people":{" 2022-08-01 xjson > compiler #go #Bitwise operation
【译】Goland 中的隐藏宝石 原文链接 在日常使用 Goland 时,团队收集了一些可以帮助我们专注于创造的同时减少重复工作的小技巧。如果你是在 IDEA 中使用的 Go 插件,或者其他 IntelliJ 的产品,同样也有这些特性。 2022-07-28 翻译 #IDE
XJSON 是如何实现四则运算的? 前言在上一篇中介绍了 xjson 的功能特性以及使用查询语法快速方便的获取 JSON 中的值。 同时这次也更新了一个版本,主要是两个升级: 对转义字符的支持。 性能优化,大约提升了30%⬆️。 2022-07-12 xjson > compiler #go
用面向对象的方式操作 JSON 甚至还能做四则运算 JSON 库 前言在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没有将其映射为一个具体的 struct;如果想要获取值就需要先做断言将其转换为 map 或者是切片再来获,会比较麻烦。 12345decode, err := xjson.Decode(`{"glossary":{"title": 2022-07-04 xjson > compiler #go
几百行代码实现一个 JSON 解析器 前言之前在写 gscript时我就在想有没有利用编译原理实现一个更实际工具?毕竟真写一个语言的难度不低,并且也很难真的应用起来。 一次无意间看到有人提起 JSON 解析器,这类工具充斥着我们的日常开发,运用非常广泛。 以前我也有思考过它是如何实现的,过程中一旦和编译原理扯上关系就不由自主的劝退了;但经过这段时间的实践我发现实现一个 JSON 解析器似乎也不困难,只是运用到了编译原理前端的部分知识 2022-06-28 xjson > compiler #go
几百行代码实现一个脚本解释器 前言最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 MySQL 的 DDL 生成 Python 中 sqlalchemy 的 model。 相关文章在这里:手写一个词法分析器 2022-05-30 gscript > compiler #go
SpringCloud Feign 实现动态 URL 背景前段时间同事碰到一个问题,需要在 SpringCloud 的 Feign 调用中使用自定义的 URL;通常情况下是没有这个需求的;毕竟都用了 SpringCloud 的了,那服务之间的调用都是走注册中心的,不会需要自定义 URL 的情况。 2022-05-23 问题排查 > Java 进阶 #SpringCloud #Feign