成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

幾百行代碼實(shí)現(xiàn)一個(gè)腳本解釋器

開(kāi)發(fā) 前端
當(dāng)前版本是使用 go 編寫(xiě)的,確實(shí)也如標(biāo)題所說(shuō),核心代碼還不到 1k 行代碼,當(dāng)然這也和目前功能簡(jiǎn)陋有關(guān)。

前言

最近又在重新學(xué)習(xí)編譯原理了,其實(shí)兩年前也復(fù)習(xí)過(guò),當(dāng)初是為了能實(shí)現(xiàn)通過(guò) MySQL 的 DDL 生成 Python 中 sqlalchemy 的 model

幾百行代碼實(shí)現(xiàn)一個(gè)腳本解釋器

雖然完成了相關(guān)功能,但現(xiàn)在看來(lái)其實(shí)實(shí)現(xiàn)的比較糙的,而且也只運(yùn)用到了詞法分析;所以這次我的目的是可以通過(guò)詞法分析->語(yǔ)法分析->語(yǔ)義分析 最終能實(shí)現(xiàn)一個(gè)功能完善的腳本"語(yǔ)言"。

效果

現(xiàn)在也有了一些階段性的成果,如下圖所示:

幾百行代碼實(shí)現(xiàn)一個(gè)腳本解釋器

幾百行代碼實(shí)現(xiàn)一個(gè)腳本解釋器

目前具備以下基本功能:

  • 變量聲明與賦值(只支持 int)。
  • 二次運(yùn)算(優(yōu)先級(jí)支持)。
  • 語(yǔ)法檢查。
  • debug 模式,可以打印 AST。

感興趣的朋友可以在這里查看源碼: https://github.com/crossoverJie/gscript。

本地有 go 環(huán)境的話也可以安裝運(yùn)行。

go get github.com/crossoverJie/gscript
gscript -h

或者直接下載二進(jìn)制文件運(yùn)行:https://github.com/crossoverJie/gscript/releases。

實(shí)現(xiàn)

當(dāng)前版本是使用 go 編寫(xiě)的,確實(shí)也如標(biāo)題所說(shuō),核心代碼還不到 1k 行代碼,當(dāng)然這也和目前功能簡(jiǎn)陋有關(guān)。

不過(guò)麻雀雖小五臟俱全,從當(dāng)前版本還是運(yùn)用到了編譯原理中的部分知識(shí):詞法、語(yǔ)法分析。

幾百行代碼實(shí)現(xiàn)一個(gè)腳本解釋器

基本實(shí)現(xiàn)流程如上圖:

  • 通過(guò)詞法分析器將源碼中解析出 token。
  • 再通過(guò)對(duì) token 推導(dǎo)生成出抽象語(yǔ)法樹(shù)(AST) 如果語(yǔ)法語(yǔ)法出現(xiàn)錯(cuò)誤,這一步驟便會(huì)拋出編譯失敗,比如 2*(1+少了一個(gè)括號(hào)。

因?yàn)闆](méi)有使用類(lèi)似于 ANTLR 這樣工具來(lái)輔助生成代碼(不然功能也不會(huì)只有這么點(diǎn)),所以其中的詞法、語(yǔ)法分析都是手寫(xiě)的,代碼量并不大,對(duì)于想要調(diào)試的朋友可以直接查看源碼。

詞法分析器:token/token.go:39 語(yǔ)法分析器:syntax/syntax.go。

其中會(huì)涉及到一些概念,比如有限狀態(tài)機(jī)、遞歸下降算法等知識(shí)點(diǎn)就沒(méi)在本文討論了,后續(xù)這個(gè)項(xiàng)目功能更加完善后也會(huì)重頭整理。

規(guī)劃

最后是畫(huà)餅階段了,不出意外后續(xù)會(huì)繼續(xù)新增如下功能:

  • 更多的基礎(chǔ)類(lèi)型,string/long 之類(lèi)的。
  • 變量作用域、函數(shù)。
  • 甚至是閉包。
  • OOP 肯定也少不了。

這些特性都實(shí)現(xiàn)后那也算是一個(gè)"現(xiàn)代"的腳本語(yǔ)言了,后續(xù)我也會(huì)繼續(xù)更新學(xué)習(xí)和實(shí)現(xiàn)過(guò)程中的有趣內(nèi)容。

源碼地址: https://github.com/crossoverJie/gscript。

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2022-06-28 08:17:10

JSON性能反射

2024-05-15 10:07:11

Agents人工智能CSV

2013-03-04 10:22:30

Python

2017-03-28 21:03:35

代碼React.js

2022-01-26 16:30:47

代碼虛擬機(jī)Linux

2014-01-09 09:42:56

Python語(yǔ)言檢測(cè)器

2014-05-15 09:45:58

Python解析器

2023-12-25 15:28:57

Python工具pywebio

2022-08-10 19:28:40

Hadoop數(shù)據(jù)庫(kù)

2022-01-05 08:58:08

Python解釋器編程語(yǔ)言

2021-08-16 10:40:36

數(shù)據(jù)庫(kù)耦合

2020-06-11 08:48:49

JavaScript開(kāi)發(fā)技術(shù)

2020-10-20 07:49:12

百度搜索引擎

2012-08-14 10:44:52

解釋器編程

2024-01-31 08:16:38

IPythonPython解釋器

2022-11-03 08:13:52

echo 命令Linux

2020-09-21 14:37:09

Python代碼微信

2011-08-23 17:42:42

Lua腳本

2018-08-26 05:38:44

路由器調(diào)制解調(diào)器網(wǎng)絡(luò)設(shè)備

2022-08-08 08:10:42

Antlr解釋器工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩欧美精品在线 | 一级片子 | 羞羞在线视频 | 中文字幕一区二区三区四区不卡 | 亚洲一区中文字幕 | av一级| 日韩电影免费在线观看中文字幕 | 在线观看成年人视频 | 国产日韩欧美精品一区二区三区 | 在线看免费的a | 欧美v日韩 | 国产精品爱久久久久久久 | 成人免费视屏 | 日韩一区二区三区在线播放 | 国产精品美女久久久久久免费 | 国产精品久久久久久久免费大片 | 一区二区三区高清 | 秋霞a级毛片在线看 | 亚洲精品一区二区在线观看 | 在线免费观看黄a | 国产美女一区二区 | 中文字幕国 | 久久91精品国产一区二区 | 国产精品久久久久久久午夜 | 亚洲电影在线播放 | 九九久久精品 | 国产一级特黄真人毛片 | 啪一啪 | 狠狠久久综合 | 久久极品| 免费在线黄色av | 亚洲精品3 | 国产精品1区 | 99re热这里只有精品视频 | 久久久久国产精品 | 日韩成人影院 | 91一区二区三区 | 精品一级电影 | www.亚洲一区 | 凹凸日日摸日日碰夜夜 | 在线中文字幕第一页 |