iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >go实现脚本解释器gscript
  • 473
分享到

go实现脚本解释器gscript

2024-04-02 19:04:59 473人浏览 安东尼
摘要

目录前言效果实现规划前言 最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 Mysql 的 DDL 生成 pyt

前言

最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 Mysql 的 DDL 生成 python 中 sqlalchemy 的 model

相关文章在这里:手写一个词法分析器

虽然完成了相关功能,但现在看来其实实现的比较糙的,而且也只运用到了词法分析;所以这次我的目的是可以通过词法分析->语法分析->语义分析 最终能实现一个功能完善的脚本”语言”。

效果

现在也有了一些阶段性的成果,如下图所示:

目前具备以下基本功能:

  • 变量声明与赋值(只支持 int)
  • 二次运算(优先级支持)
  • 语法检查
  • debug 模式,可以打印 AST

感兴趣的朋友可以在这里查看源码https://GitHub.com/crossoverJie/gscript

本地有 Go 环境的话也可以安装运行。

go get github.com/crossoverJie/gscript

gscript -h

或者直接下载二进制文件运行:

Https://github.com/crossoverJie/gscript/releases

实现

当前版本是使用 go 编写的,确实也如标题所说,核心代码还不到 1k 行代码,当然这也和目前功能简陋有关。

不过麻雀虽小五脏俱全,从当前版本还是运用到了编译原理中的部分知识:词法、语法分析。

基本实现流程如上图:

通过词法分析器将源码中解析出 token

再通过对 token 推导生成出抽象语法树(AST)

如果语法语法出现错误,这一步骤便会抛出编译失败,比如 2*(1+ 少了一个括号。

因为没有使用类似于 ANTLR 这样工具来辅助生成代码(不然功能也不会只有这么点),所以其中的词法、语法分析都是手写的,代码量并不大,对于想要调试的朋友可以直接查看源码。

词法分析器:token/token.go:39语法分析器:syntax/syntax.go

其中会涉及到一些概念,比如有限状态机、递归下降算法等知识点就没在本文讨论了,后续这个项目功能更加完善后也会重头整理。

规划

最后是画饼阶段了,不出意外后续会继续新增如下功能:

  • 更多的基础类型,string/long 之类的。
  • 变量作用域、函数。
  • 甚至是闭包。
  • OOP 肯定也少不了。

这些特性都实现后那也算是一个”现代”的脚本语言了,后续我也会继续更新学习和实现过程中的有趣内容。

源码地址:https://github.com/crossoverJie/gscript

以上就是go实现脚本解释器gscript的详细内容,更多关于go gscript脚本解释器的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: go实现脚本解释器gscript

本文链接: https://www.lsjlt.com/news/164242.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go实现脚本解释器gscript
    目录前言效果实现规划前言 最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 MySQL 的 DDL 生成 Pyt...
    99+
    2022-11-13
  • goAntlr重构脚本解释器实现示例
    目录前言Antlr升级 xjson总结前言 在上一个版本实现的脚本解释器 GScript 中实现了基本的四则运算以及 AST 的生成。 当我准备再新增一个 % 取模的运算符时,会发...
    99+
    2022-11-11
  • Shell脚本注释的实现
    目录单行注释多行注释/段注释一、空命令 : 和追加输入重定向 <<二、空命令 : 和 if…then… 语句三、空命令 : 和单引号 ’单行注释 直接在行最前端加上符号...
    99+
    2023-03-23
    Shell脚本注释 Shell 注释
  • Shell脚本注释如何实现
    这篇文章主要介绍了Shell脚本注释如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Shell脚本注释如何实现文章都会有所收获,下面我们一起来看看吧。单行注释直接在行最前端加上符号 # 即可。具体用法如下...
    99+
    2023-07-05
  • Shell实现强制释放内存脚本分享
    公司服务器最近两天老是因为内存被使用满而造成死机,实在是受不了老叫机房的人去帮忙重启,专门写了个脚本来释放下内存,当然这台服务器不是太重要,我粗鲁的处理方式估计不会适合大多数服务器,请大家使用之前先考虑清楚...
    99+
    2022-06-04
    脚本 内存 Shell
  • 如何实现释放CentOS系统内存的Shell脚本
    本篇内容介绍了“如何实现释放CentOS系统内存的Shell脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!脚本内容:代码如下: ...
    99+
    2023-06-09
  • 实现释放CentOS系统内存的Shell脚本分享
    这几天发现CentOS系统内存一直涨,即使把apache和mysql关闭了,内存也不释放,可以使用以下脚本来释放内存: 脚本内容: #! /bin/bash # cache释放: ...
    99+
    2022-06-04
    脚本 内存 系统
  • 如何解决Shell脚本bash: ./t.sh:/bin/bash^M:损坏的解释器
    这篇文章主要讲解了“如何解决Shell脚本bash: ./t.sh:/bin/bash^M:损坏的解释器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决Shell脚本bash: ./t...
    99+
    2023-06-09
  • GO语言如何实现Shell脚本的同步?
    Shell脚本是在Linux系统上编写的一种脚本语言,常用于自动化管理和执行任务。然而,Shell脚本在处理大量数据或需要高性能的场景下,会出现性能瓶颈。在这种情况下,使用Go语言来实现Shell脚本的同步是一个不错的选择。 Go语言是一...
    99+
    2023-10-26
    同步 shell linux
  • go web 预防跨站脚本的实现方式
    目录一 点睛二 先看一个转义的例子三 使用 text/template 进行处理四 使用 html/template 进行...
    99+
    2022-11-12
  • go中如何实现web预防跨站脚本
    这篇文章主要介绍了go中如何实现web预防跨站脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一 点睛现在的网站包含大量的动态内容以提高用户体验,比过去要复杂得多...
    99+
    2023-06-15
  • Vue3JSX解释器的实现
    目录第一步:什么是JSX?第二步:解析JSX第三步:创建一个Vue 3 JSX解释器总结完整的Vue 3 JSX解释器的示例代码:在Vue 3中,我们可以使用JSX来编写模板代码,这...
    99+
    2023-05-17
    Vue3 JSX解释器 Vue3 JSX
  • Python3 解释器的实现
    Linux/Unix的系统上,一般默认的 python 版本为 2.x,我们可以将 python3.x 安装在 /usr/local/python3 目录中。 安装完成后,我们可以将...
    99+
    2022-11-12
  • Bash脚本、Go并发和Docker容器:实现容器化应用的最佳实践
    在当今的软件开发领域中,容器化应用已经成为了一种非常流行的趋势。Docker作为一种流行的容器化技术,已经被广泛应用于实现容器化应用。然而,要想实现高效的容器化应用,必须掌握一些最佳实践技巧。本文将介绍如何使用Bash脚本、Go并发和Do...
    99+
    2023-08-14
    并发 bash 容器
  • VBS脚本如何实现加密/解密
    这篇文章主要为大家展示了“VBS脚本如何实现加密/解密”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VBS脚本如何实现加密/解密”这篇文章吧。Dim WshSHell,FSO ...
    99+
    2023-06-08
  • vbs如何实现base64解密脚本代码
    这篇文章主要介绍vbs如何实现base64解密脚本代码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:Function fDecode(sStringToDecode) 'This function ...
    99+
    2023-06-08
  • GO语言在Linux系统中如何实现Shell脚本的同步?
    随着互联网的快速发展,我们越来越需要快速、高效地处理数据。Shell脚本作为一种常见的自动化脚本语言,被广泛应用于Linux系统中。然而,Shell脚本在处理大量数据时,容易出现性能瓶颈。为了解决这个问题,我们可以考虑使用GO语言来实现S...
    99+
    2023-10-26
    同步 shell linux
  • shell之正向解析脚本的实现方法
    正向解析脚本 #!/bin/bash yum install bind -y //安装解析工具包 //修改主配置文件 sed -i '13s/127.0.0.1/192.168.17.156/' /etc/n...
    99+
    2022-06-04
    shell 正向解析脚本 shell 正向解析shell脚本
  • shell之分离解析脚本的实现方法
    分离解析脚本 在运行脚本之前,需要VM虚拟机,Centos7,两台主机一台win10 -1 作为广域网的主机, 一台win10 -2作为区域网的主机。 之前我的博客有教程 #!/bin/bash //修改添加网卡配置...
    99+
    2022-06-04
    shell 分离解析脚本 分离解析Shell脚本
  • Python实现自动填写脚本流程详解
    目录前言环境使用模块使用本次案例代码实现思路最终效果代码实现前言 环境使用 Python 3.8Pycharm 模块使用 import requests —> 数据...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作