컴파일러2 [JavaScript 통역]자바스크립트 | 제2부 在上一篇文章裡我們講解了直譯器的基本架構,並實作出一個可以進行基礎四則運算的直譯器。但這個直譯器遇到正負號、空白字元、小數點、括號等等字元時會因為無法解析而出錯,因此本篇文章將會著手解決這些問題。 空白字元 要解決空白字元的問題非常簡單,只需要在讀取到空白字元時自動跳過就可以了,因此需要對我們的lexer稍加修改 : lexer在讀取文字時若遇到空白字元,直接呼叫advance()跳過。 執行程式進行測試 : js> 1 + 2 3 js> 12 + 345 * 2 / 10 81 測試成功 ! 小數點 要能夠解析小數點的話,需要擴展我們lexer裡面的number()定義,在解析數字時遇到第一個小數點,可以接受這個字元並繼續向後解析,但若是同一個數字中出現多個小數點則會拋出錯誤 : 同樣的執行測試 : js> 1.3 + 2.45 3.75 js> 345.2 + 9.8 355 測.. 2021. 12. 29. [JavaScript 통역]자바스크립트 | 제1부 上一篇文章我們製作出了一個可以回應使用者輸入的程式,接下來我們會介紹一個直譯器的基礎架構,並實作語法解析與執行的部分,讓我們的程式能夠真正讀懂輸入的文字,本篇文章的最後會做出一個可以進行基本四則運算 基本架構 直接看圖 上面的圖示簡單說明了一個解釋器的基本架構,以及如何分析、執行程式碼,最後輸出結果的流程,以下會針對每一個部分進行更完整的介紹。 text : 文字檔案 再複雜的程式碼也是一般的文字檔案,我們的直譯器需要取得文字內容來進行分析,取得文字的方式在我們上一篇文章已經實作完成了,若還沒有看過可以先回到上一篇文章,把專案建立起來後再繼續進行下去。 lexer : 詞法分析器 將獲得的文字內容進行分類、組合,轉換成我們的程式所需要的token,現在有許多方便、開源的lexer可以選擇,像是lex,不過為了學習,我們會自己動手創造一個。 以我們這次要建立的四則運算直譯器來做舉例 : .. 2021. 12. 29. 이전 1 다음