成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

lucas / 2452人閱讀

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

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

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

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

  

["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", "."]

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

詞法分析器 Tokenizer 的另一個(gè)功能在于,將單詞分類??紤]源代碼中這么一行。

  

private int index = 27;

會(huì)被拆分為如下形式。

  

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

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


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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64215.html

相關(guān)文章

  • 從零開始寫個(gè)譯器系列

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

    genedna 評(píng)論0 收藏0
  • 從零開始寫個(gè)譯器 - 詞法分析器是一個(gè)狀態(tài)機(jī)

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

    calx 評(píng)論0 收藏0
  • 從零開始寫個(gè)譯器 - Token.java 文件的編寫

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

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

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

    qpal 評(píng)論0 收藏0
  • 從零開始寫個(gè)譯器 - 譯器的結(jié)構(gòu)

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

    wudengzan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

lucas

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<