用Go语言开发一个编程语言

您所在的位置:网站首页 ventusky官网 用Go语言开发一个编程语言

用Go语言开发一个编程语言

2023-04-07 20:53| 来源: 网络整理| 查看: 265

用Go语言开发一个编程语言

最近小弟业余时间闲来无事,所以就尝试一下自己开发一个轻量级的解释型语言。

出于学习的目的,我目前已经利用业余时间开发了一个多月,目前实现了变量声明,内置函数调用、自定义函数的声明和调用、算术表达式(这个最难了),其余功能仍然在持续迭代中。

github 地址 : https://github.com/pywee/lit

暂且我将这个语言命名为 Lit,以下是我已经实现的特性,仍然有一些小bug需要持续修复,感兴趣的话给个 star.

使用方法 go get github.com/pywee/lit

一、变量声明

import "github.com/pywee/lit" func main() { // 执行以下句子,最终会输出 src := []byte(` a = 123; b = a + 456; Print(b); // 579 `) _, err := lit.NewExpr(src) }

二、算术表达式的计算。算术符号的优先级保持与 Go 语言相同。请看示例:

// 不同的语言符号优先级是不完全一样的,Lit 的算术符号优先级保持与 Golang 一致 // 首先我们执行 Go 语言原生函数进行数学表达式计算 // 以下句子最终会输出 // +1.600000e+001 // 125 println((2 + 100 ^ 2 - (10*1.1 - 22 + (22 | 11))) / 10 * 2) println(12/333+31+(5/10)-6|100) // 使用 Lit 计算文本中的数据 // 表达式文本 // 执行下面的句子 最终会输出 exprs := []byte(` a = (2 + 100 ^ 2 - (10*1.1 - 22 + (22 | 11))) / 10 * 2; b = 12 / 333 + 31 + (5 / 10) - 6 | 100; Print(a); // 16 Print(b); // 125 `) _, err = lit.NewExpr(exprs) // *** 同样的表达式放在 PHP 中,会输出 -24 ***

三、当前已支持部分常用内置函数(测试阶段),更多的内置函数我将在接下来继续完成

// 下面的句子调用了两个函数 // IsInt(arg) 用来检查 arg 是否为整型 // Replace(arg1, arg2, arg3, arg4) 用来做字符串替换 // 执行下面语句 最终会输出 exprs := []byte(` a = Replace("hello word111", "1", "", 2-IsInt((1+(1 + IsInt(123+(1+2)))-1)+2)-2); VarDump(a); // STRING hello word `) _, err = lit.NewExpr(exprs)

四、弱类型转换,弱类型的这一特性我将它设计为与 PHP 基本一样

// 当布尔值参与运算时,底层会将 true 转为 1, false 转为 0 // 执行下面句子 将输出 src := []byte(` a = true - 1; b = IsInt(1); c = IsFloat(1); d = false == 0.0; e = "false" == 0.0; Print(a); // 0 Print(b); // true Print(c); // true Print(d); // true Print(e); // true `) _, err := lit.NewExpr(src) // 与其他弱类型语言一样 // 字符串数字与整型相操作,在 Lit 的底层会将字符串数字转换为整型 // 执行下面句子 将输出 src := []byte(` a = "1" - 1; b = 0.0 >= false+1 || (1 < >=


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3