最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 MySQL 的 DDL 生成 Python 中 sqlalchemy 的 model。
公司主营业务:做网站、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出紫阳免费做网站回馈大家。
虽然完成了相关功能,但现在看来其实实现的比较糙的,而且也只运用到了词法分析;所以这次我的目的是可以通过词法分析->语法分析->语义分析 最终能实现一个功能完善的脚本"语言"。
现在也有了一些阶段性的成果,如下图所示:
目前具备以下基本功能:
感兴趣的朋友可以在这里查看源码: https://github.com/crossoverJie/gscript。
本地有 go 环境的话也可以安装运行。
go get github.com/crossoverJie/gscript
gscript -h
或者直接下载二进制文件运行:https://github.com/crossoverJie/gscript/releases。
当前版本是使用 go 编写的,确实也如标题所说,核心代码还不到 1k 行代码,当然这也和目前功能简陋有关。
不过麻雀虽小五脏俱全,从当前版本还是运用到了编译原理中的部分知识:词法、语法分析。
基本实现流程如上图:
因为没有使用类似于 ANTLR 这样工具来辅助生成代码(不然功能也不会只有这么点),所以其中的词法、语法分析都是手写的,代码量并不大,对于想要调试的朋友可以直接查看源码。
词法分析器:token/token.go:39 语法分析器:syntax/syntax.go。
其中会涉及到一些概念,比如有限状态机、递归下降算法等知识点就没在本文讨论了,后续这个项目功能更加完善后也会重头整理。
最后是画饼阶段了,不出意外后续会继续新增如下功能:
这些特性都实现后那也算是一个"现代"的脚本语言了,后续我也会继续更新学习和实现过程中的有趣内容。
源码地址: https://github.com/crossoverJie/gscript。
当前名称:几百行代码实现一个脚本解释器
文章路径:http://www.shufengxianlan.com/qtweb/news20/530370.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联