(JavaScript實(shí)現(xiàn)基本lisp語法)解釋器和編譯器

圖片發(fā)自簡書App

編譯器如何工作的?不知道你想過沒有。

查看代碼

代碼鏈接

這里的代碼有很大的改進(jìn)空間,甚至有一些錯誤的處理,但可以看出一些基本的思想。用js實(shí)現(xiàn)了一個初步的lisp解釋器。

參考文章

《怎樣寫一個解釋器》

這篇文章是用一種不太熟悉的語言寫的,仔細(xì)閱讀還是可以理解作者想要表達(dá)的思想,他考慮到了初學(xué)者的局限,里面的推薦書籍很不錯。

學(xué)習(xí)函數(shù)式程序設(shè)計真的有很多好處(逼格),帶來了一些思想(胡思亂想),會想到以前沒注意的地方(如各個系統(tǒng)的報錯信息)。會思考程序的運(yùn)行情況(讓代碼容易調(diào)試),會經(jīng)常重構(gòu)代碼(這個可能和經(jīng)驗(yàn)有關(guān)),慢慢理解語言的類型信息(這個也可能和看的書籍有關(guān))。總之,你懂的。

學(xué)習(xí)編譯原理的主要一個方面,是想理解為什么我的語言不能這么做,我怎么才能實(shí)現(xiàn)這些功能。另一方面,由于工作的關(guān)系,我已經(jīng)用過四五種編程語言了,它們語法不一,有時候很累的。我不想再羨慕別人學(xué)過某些神奇的語言了。

到處都寫到"解釋器的主要過程: 解析語言>生成中間表示>最后產(chǎn)生輸出"。但是具體如何?不打開箱子,怎么能心甘。做為非科班出身,去實(shí)現(xiàn)一些經(jīng)典程序,補(bǔ)習(xí)基礎(chǔ)理論當(dāng)然是很有必要的。

希望自己盡快實(shí)現(xiàn)一些有價值的東西,整天做著別人設(shè)計的模塊,感覺是在混工資呀。如果我熟悉某種語言,那么我可以表達(dá)一些我的想法。如果暫時沒有想法,看看別人在做什么應(yīng)該是不錯的。

如果對js不熟悉,對函數(shù)式不熟悉。不用怕,我推薦一篇Java寫的四則運(yùn)算解析簡單json解析的文章。 ? 如果對這些沒有興趣,你喜歡操作XML,那么我要送出一篇XML解析相關(guān)的。

當(dāng)你看不懂上面的文章,也許你基礎(chǔ)不夠好或者工作內(nèi)容的關(guān)系沒有接觸到一些預(yù)備知識,需要我的另外一篇文章 補(bǔ)充一下數(shù)據(jù)類型基的文章。

鄭重說明,大多數(shù)人是愚蠢的,包括我自己。很多知識是網(wǎng)上或書上看來的記憶碎片,畢竟沒有原創(chuàng)的東西。寫文章的原因,整天抄代碼,抄文章來體驗(yàn)一把(看看寫作有什么不同,我以前作文都是低分)。

寫代碼只能在特定條件下,運(yùn)行結(jié)果不出錯誤。文章肯定只能引起少數(shù)人的共鳴,但是哪怕一個人也是值得的。

最近在多看閱讀里面看了一些技術(shù)書,當(dāng)然大多數(shù)看不懂,只好安慰自己道懂一點(diǎn)也好。前段時間閱讀了幾本投資類書籍,那里的作家用完全不同的思維和詞匯,關(guān)心完全不同的問題。我們很多時候都忘了自己想要做的事情,跳出一個領(lǐng)域然后再回來,也許會有所不同。

對于一般的語法形式,如Pascal之類需要一定的語法解析步驟,首先做詞法分析再做語法分享,才能生成想要的程序結(jié)構(gòu)(lexer->parser->ast)。這個過程可以手寫,或者利用工具,由于語法多變復(fù)雜,實(shí)現(xiàn)起來有一定的難度。核心的當(dāng)然是根據(jù)程序結(jié)構(gòu)做處理,如if語句,function定義語句,很多人是到不了這一步的,反而錯過了很多重要的東西。接下來,樹的遍歷,需要一些基本算法支持,加上錯誤處理,高級的還有優(yōu)化,就會變得很復(fù)雜。

只有簡化問題,才能得到一點(diǎn)點(diǎn)答案。參考的文章里面用的是s表達(dá)式這種數(shù)據(jù)結(jié)構(gòu)(e1 e2),類似于線性表,以后看程序的時候希望能看到結(jié)構(gòu),而不是字符串。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,021評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評論 19 139
  • 夏日絕句 李清照 生當(dāng)作人杰,死亦為鬼雄。 至今思項羽,不肯過江東。 飲湖上初晴后雨 蘇軾 水光瀲滟晴方好,山色空...
    櫻井米娜閱讀 501評論 0 0
  • 1 思維導(dǎo)圖 2 羅列知識點(diǎn) 2.1為什么稱為優(yōu)8系統(tǒng)? 睡覺8小時 工作8小時 剩下8小時 2.2十二道測試題 ...
    靈動心光閱讀 344評論 0 0
  • 許久沒有瀏覽購書網(wǎng)站,更甚是,許久沒有買書。 古人云:書非借不可讀。然本人并不是很推崇這樣的讀書方式,很多書更喜歡...
    小餅子的記事本閱讀 222評論 0 3

友情鏈接更多精彩內(nèi)容