手写编程语言-递归函数是如何实现的? 前言本篇文章主要是记录一下在 GScript 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有必要记录一下。 在开始之前还是简单介绍下本次更新的 GScript v0.0.9 所包含的内容: 支持可变参数 优化 append 函数语义 优化编译错误信息 最后一个就是支持递归调用 2022-09-27 gscript > compiler #递归 #go #antlr
手写编程语言-实现运算符重载 前言先带来日常的 GScript 更新:新增了可变参数的特性,语法如下: 123456789101112int add(string s, int ...num){ println(s); int sum = 0; for(int i=0;i<len(num);i++){ int v = num[i]; sum = sum+v; } return sum; 2022-09-18 gscript > compiler #go #antlr #运算符重载
用自己的编程语言实现了一个网站 前言在上一篇《终于实现了一门属于自己的编程语言》 介绍了自己写的编程语言 GScript ,在文中提到希望最终可以使用 GScript 开发一个网站。 到目前为止确实是做到了,首页地址: https://gscript.crossoverjie.top/index 要称为一个网站确实有点勉强,不过也是一个动态网页,因为返回的是 HTML,所以在当前阶段只要不嫌麻烦其实也能写一个“合格”的网站, 2022-09-14 gscript > compiler #go #antlr
终于实现了一门属于自己的编程语言 前言都说程序员的三大浪漫是:操作系统、编译原理、图形学;最后的图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。 这四项技术如果都能掌握的话那岂不是在 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