国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從零開始寫個編譯器吧 - tao語言的詞法分析器(Tokenizer)的類型定義

qpal / 1154人閱讀

摘要:要為語言設計詞法分析器,首先得知道語言是一種什么樣的語言。,不過首先我們得把詞法分析器能生成的單詞類型定義好了。

要為 tao 語言設計詞法分析器,首先得知道 tao 語言是一種什么樣的語言。不過呢,我腦海里還沒有 tao 語言具體形象。我還是先貼一段 tao 語言的代碼,大概展示下這是怎么回事吧。

def say_hello_world(who) 
    print “hello world ” + who 
end 
var name = “tao” 
say_hello_world name 
#我是注釋,注釋是這樣寫的

看起來可能是這個樣子。這個系列中的 tao 語言我會采取一邊寫編譯器,一邊設計的形式。細節在之后的章節會逐步補充完整。本章只是些詞法分析器,因此不必了解太多細節(也不必設計出來)。因此,tao語言的概念也暫時止步于此不作細節上的討論。

OK,不過首先我們得把詞法分析器能生成的單詞類型定義好了。嗯,我想想,顯然一個語言至少要這么幾種類型嘛。

關鍵字(Keyword)

符號(Sign)

標示符(Identifier)

其中關鍵字和符號很好理解,標示符,則具體而言,就是用戶定義的變量、函數定義中的函數名和參數名、被調用函數的函數名等等這些東西。

嚴格來說,僅由數字、英語字母、下劃線的字符串(可以以"?"、"!"為結尾,但不能以數字為開頭),如果沒有被關鍵字占用,則統統稱之為標示符。其正則表達式形如:

  

^[a-zA-Z_][0-9a-zA-Z_]*[!?]?$

當然,關鍵字的形式和標示符是一樣的(至少要滿足標示符的正則表達式定義)。

然后,數據類型也要有:

數字類型(Number)

字符串(String)

正則表達式(RegEx)

其中數字類型的形式和標示符的形式極為類似,不同點在于,數字類型要求必須以數字開頭(當然結尾不可以接"?"和"!")這兩個符號啦。其正則表達式形如:

  

^[0-9][0-9a-zA-Z_]*$

如此以來數字類型就和傳統意義上的數字不一樣了。形如"110police"也會被當做數字。此外,像3.14這種實數卻不會被當作數字。嗯,這的確是問題,但是我不想在現在就解決這個問題,暫時不管啦,請先無視~~~。

另一個是正則表達式的定義,tao 語言中將 ` 符號置于兩端來表示正則表達式。(什么,找不到這個符號,嗯,這個符號在“1”的左邊,直接按下即可打出。)為什么用這個符號而不用 / 分開呢,猜一猜為什么呢?嗯,真正開始編碼的時候揭示答案吧。

再然后,這些對編譯器意義不大,但還是有點用處的類型:

注釋(Annotation)

空格(Space)

回車(NewLine)

其中注釋以 # 開始,單行注釋。

最后的最后,還有一個類型是必須:

終止符(EndSymbol)

這個類型不對應任何程序員可輸入的形式,實際上,詞法分析器會在解析完所有源代碼之后,自動以一個該類型的單詞結尾。這個類型是專門給語法分析器(Parser)使用的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64214.html

相關文章

  • 從零開始寫個譯器 - Token.java 文件編寫

    摘要:現在,讓我們來動手寫編譯器的第一個個文件吧。如其名字所示,這個類實例化的對象用于表示詞法分析器的產物。我希望詞法分析器從源代碼中提取出語素,并根據上下文推測出單詞類型,從而構造出對象。只需要構造出類型即可,進一步細分將在的構造函數中進行。 現在,讓我們來動手寫編譯器的第一個個java文件吧。本章要寫的類,是Token類。如其名字所示,這個類實例化的對象用于表示詞法分析器 Tokeniz...

    Eirunye 評論0 收藏0
  • 從零開始寫個譯器 - Parser 語法析器

    摘要:這樣的程序或稱工具有很多現成的可供選擇包括在平臺上可用的,但既然我這個系列叫做從零開始寫個編譯器吧,那顯然如果我用現成的工具,那是犯規行為。 Parser(語法分析器)的編寫相對于 Tokenizer (詞法分析器)要復雜得多,因此,在編寫之前可能也會鋪墊得更多一些。當然,本系列旨在寫出一個編譯器,所以理論方面只會簡單介紹 tao 語言所涉及的部分。 之前的幾章中,我純手寫了tao 語...

    fai1017 評論0 收藏0
  • 從零開始寫個譯器系列

    摘要:是的,這個系列將呈現一個完整的編譯器從無到有的過程。但在寫這個編譯器的過程中,我可不會偷工減料,該有的一定會寫上的。該語言的虛擬機將運行于之上,同時編譯器將使用實現。我早有寫編譯器的想法之前沒寫過,故希望一邊寫編譯器一邊完成這個系列。 是的,這個系列將呈現一個完整的編譯器從無到有的過程。當然,為了保證該系列內容的簡潔(也為了降低難度),僅僅保證編譯器的最低要求,即僅能用。但在寫這個編譯...

    genedna 評論0 收藏0
  • 從零開始寫個譯器 - 詞法析器是一個狀態機

    摘要:詞法分析器本身就是一個狀態機,生成這個狀態機有很多種方法,而我打算采取手寫的方式。狀態機不斷從源代碼即一個字符串中讀入一個一個字符,讀到不同的字符將使狀態機的狀態從一個狀態變化到另外一個狀態。 詞法分析器 Tokenizer 本身就是一個狀態機,生成這個狀態機有很多種方法,而我打算采取手寫的方式。因為 tao 語言的詞法還是相對比較簡單的,手寫不成問題。 先新建一個LexicalAna...

    calx 評論0 收藏0
  • 從零開始寫個譯器 - 譯器結構

    摘要:自然,我們還是先從語言的編譯器下手吧。在動手寫編譯器之前,得容我將編譯器的結構進行進一步的劃分。這些將被語法分析器接收并進行進一步處理。由于本系列將著重于寫出編譯器,必要的理論和概念還是會交代的。從零開始寫個編譯器吧編譯器的結構的博客 自然,我們還是先從 tao 語言的編譯器下手吧。在動手寫編譯器之前,得容我將編譯器的結構進行進一步的劃分。編譯器可視為一個黑盒,從其一端輸入源代碼,另一...

    wudengzan 評論0 收藏0

發表評論

0條評論

qpal

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<