如何为 GScript 编写标准库
用自己的编程语言实现了一个网站(增强版)
前言
前段时间在《用自己的编程语言实现了一个网站》用介绍了用 GScript
写的一个简单“网站”,虽然是打上引号的;页面长这样:
看起来确实非常的挫,其实之前一直也想做一个 GScript
的在线 playground
,于是国庆期间学了一点 皮毛 Vue
加上老弟的帮忙(他是前端开发),最终完成了下面这个网站:
https://gscript.crossoverjie.top/
❤打印源码参考了:https://wa-lang.org/playground/
手写编程语言-递归函数是如何实现的?
前言
本篇文章主要是记录一下在 GScript 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有必要记录一下。
在开始之前还是简单介绍下本次更新的 GScript
v0.0.9 所包含的内容:
- 支持可变参数
- 优化
append
函数语义 - 优化编译错误信息
- 最后一个就是支持递归调用
手写编程语言-实现运算符重载
前言
先带来日常的 GScript 更新:新增了可变参数的特性,语法如下:
1 | int add(string s, int ...num){ |
用自己的编程语言实现了一个网站
前言
在上一篇《终于实现了一门属于自己的编程语言》 介绍了自己写的编程语言 GScript ,在文中提到希望最终可以使用 GScript
开发一个网站。
到目前为止确实是做到了,首页地址:
https://gscript.crossoverjie.top/index
要称为一个网站确实有点勉强,不过也是一个动态网页,因为返回的是 HTML
,所以在当前阶段只要不嫌麻烦其实也能写一个“合格”的网站,有点像以前我们学习 Java
时的 servlet
。
终于实现了一门属于自己的编程语言
前言
都说程序员的三大浪漫是:操作系统、编译原理、图形学;最后的图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。
这四项技术如果都能掌握的话那岂不是在 IT 行业横着走了,加上这几年互联网行业越来越不景气,越底层的技术就越不可能被替代;所以为了给自己的 30+ 危机留点出路,从今年上半年开始我就逐渐开始从头学习编译原理。
功夫不负有心人,经过近一个月的挑灯夜战,每晚都在老婆的催促下才休息,克服了中途好几次想放弃的冲动,终于现在完成了 GScript 一个预览版。
预览版的意思是语法结构与整体设计基本完成,后续更新也不太会改动这部分内容、但还缺少一些易用功能。
自己动手写脚本解释器--实现作用域与函数调用
前言
上次利用 Antlr 重构一版 用 Antlr 重构脚本解释器 之后便着手新增其他功能,也就是现在看到的支持了作用域以及函数调用。
1 | int b= 10; |
用 Antlr 重构脚本解释器
前言
在上一个版本实现的脚本解释器 GScript 中实现了基本的四则运算以及 AST
的生成。
当我准备再新增一个 %
取模的运算符时,会发现工作很繁琐而且几乎都是重复的;主要是两步:
- 需要在词法解析器中新增对
%
符号的支持。 - 在语法解析器遍历 AST 时对
%
token 实现具体逻辑。
其中的词法解析和遍历 AST 完全是重复工作,所以我们可否能够简化这两步呢?
用位运算为你的程序加速
前言
最近在持续优化之前编写的 JSON
解析库 xjson,主要是两个方面的优化。
第一个是支持将一个 JSONObject
对象输出为 JSON
字符串。
这点在上个版本中只是利用自带的 Print
函数打印数据:
1 | func TestJson4(t *testing.T) { |
Output:
1 | map[name:map[first:bob]] |