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

資訊專欄INFORMATION COLUMN

從零開始寫個編譯器吧 - 單詞化簡述(Tokenization)

lucas / 2442人閱讀

摘要:實際上,所謂的源代碼,我們可以將其視為一段長長的字符串。但僅僅是把源代碼的字符分割成段,這些字符串尚不能稱之為完整的單詞,而只能作為單詞的語素。實際上,詞法分析器還對將單詞分類。實際上,詞法分析器會為這行代碼生成如下形式。

實際上,所謂的源代碼,我們可以將其視為一段長長的字符串。所謂字符串,即是字符的有序集。但是,字符本身作為編譯器的輸入單位,粒度實在太小了,因此,我們往往需要對編譯器進行第一層封裝,即分割出一個稱之為 Tokenizer (詞法分析器)的部分。
Tokenizer 的作用即是將字符序列翻譯成 Token(單詞)的一個過程,這一過程稱之為單詞化(Tokenization)。很容易理解單詞化這一步驟在整個編譯過程中的價值,舉個例子,如下這么一個英語句子。

It"s understandable that we share some common values as we are living in the same world.

實際上,這個句子倘若以字符串的形式存在,即以字符作為最小單位來解析,則看起來形式如下。實際上,我們很難從中提取出有價值的信息。

  

["I", "t", """, "s", " ", "u", "n", "d", "e", "r", "s", "t", "a", "n",
"d", "a", "b", "l", "e", " ", "t", "h", "a", "t", " ", "w", "e", " ",
"s", "h", "a", "r", "e", " ", "s", "o", "m", "e", " ", "c", "o", "m",
"m", "o", "n", " ", "v", "a", "l", "u", "e", "s", " ", "a", "s", " ",
"w", "e", " ", "a", "r", "e", " ", "l", "i", "v", "i", "n", "g", " ",
"i", "n", " ", "t", "h", "e", " ", "s", "a", "m", "e", " ", "w", "o",
"r", "l", "d" ]

而分詞話的作用,則是將上面這段東西,變成(至少)下面這段東西。

  

["It", "is", "understandable", "that", "we", "share", "some",
"common", "values", "as", "we", "are", "living", "in", "the",
"same", "world", "."]

看起來是不是更加順眼了呢?實際上我們都幾乎能讀出這個單詞數組所代表句子的意思了。

詞法分析器 Tokenizer 的另一個功能在于,將單詞分類。考慮源代碼中這么一行。

  

private int index = 27;

會被拆分為如下形式。

  

["private", " ", "int", " ", "index", " ", "=", " ", "27", ";"]

但僅僅是把源代碼的字符分割成段,這些字符串尚不能稱之為完整的單詞Token,而只能作為單詞的語素。實際上,詞法分析器還對將單詞分類。因此,讀到的語素,分析出的類型,兩者才構成一個完整的單詞。
實際上,詞法分析器會為這行代碼生成如下形式。


每一列代表一個單詞Token,而單詞包含兩個屬性,語素、類型。

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

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

相關文章

  • 從零開始寫個譯器系列

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

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

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

    calx 評論0 收藏0
  • 從零開始寫個譯器 - Token.java 文件的編寫

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

    Eirunye 評論0 收藏0
  • 從零開始寫個譯器 - tao語言的詞法分析器(Tokenizer)的類型定義

    摘要:要為語言設計詞法分析器,首先得知道語言是一種什么樣的語言。,不過首先我們得把詞法分析器能生成的單詞類型定義好了。 要為 tao 語言設計詞法分析器,首先得知道 tao 語言是一種什么樣的語言。不過呢,我腦海里還沒有 tao 語言具體形象。我還是先貼一段 tao 語言的代碼,大概展示下這是怎么回事吧。 def say_hello_world(who) print hello ...

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

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

    wudengzan 評論0 收藏0

發表評論

0條評論

lucas

|高級講師

TA的文章

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