亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

從零開始寫個編譯器吧 - 數(shù)量詞符號

JayChen / 2644人閱讀

摘要:考慮一個非終結(jié)符,如果對于另一個符號,存在如下產(chǎn)生式。則對于而言,它可以表示非終結(jié)符重復(fù)多次的各種形式。以上三個式子展現(xiàn)了將任意非終結(jié)符關(guān)于重復(fù)次數(shù)的多種形式。

式子中的符號,我還允許使用數(shù)量詞來修飾。
考慮一個非終結(jié)符 A,如果對于另一個符號 α,存在如下產(chǎn)生式。

α → αA | ε

則對于 α 而言,它可以表示非終結(jié)符 A 重復(fù) 0 、1、多次的各種形式。

現(xiàn)在稍稍改變這個式子,使之變成:

α → αA | A

這時,α 不再可能產(chǎn)生空,此時它只能表示非終結(jié)符 A 重復(fù) 1次或多次。
當(dāng)然還有這個式子。

α → A | ε

這個α 表示 A 出現(xiàn) 0 次 或 1 次。

以上三個式子展現(xiàn)了將任意非終結(jié)符 A 關(guān)于重復(fù)次數(shù)的多種形式。這些形式很有用,至少對于我寫 Parser 很有用。因此,可以使用數(shù)量詞符號來描述。

A* (重復(fù) 0、1 次或多次)

A+ (重復(fù) 1 次或多次)

A? (出現(xiàn) 0 次或 1 次)

至此,我們已經(jīng)得到了寫一個 Parser 所需的所有理論工具了。但是,等等,其實(shí)我們還可以深入的探討一下某些特別的東西。

我在上一章提及,對于每一個非終結(jié)符而言,它是否能導(dǎo)出 ε 是必須被判斷清楚的。特別的,當(dāng)然某個非終結(jié)符 A 可以導(dǎo)出 ε 時,我可以發(fā)現(xiàn)有如下等式。

A = A?
A+ = A*

嚴(yán)格意義上說,等號左右的式子還有是有區(qū)別的,他們雖然展開的最終結(jié)果完全相同,但展開的形式卻有所差別。但對于我而言,我只關(guān)心結(jié)果,我將它們視作相等一點(diǎn)都不影響我的 Parser 正常運(yùn)行。

這兩個等式令我寫程序更加方便,試想我該在程序中如何表現(xiàn) ε ?我只需寫一個 A? 就行了,因?yàn)?A? 一定可以導(dǎo)出 ε。

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

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

相關(guān)文章

  • 從零開始寫個譯器系列

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

    genedna 評論0 收藏0
  • 從零開始寫個譯器 - 開始寫詞法分析器(3)

    摘要:在之前的章節(jié)第章從零開始寫個編譯器吧開始寫詞法分析器中我有說,我將函數(shù)設(shè)計成主動調(diào)用的形式,而則是被動調(diào)用的形式。接下來本系列將進(jìn)入編寫語法分析器的階段,不過在此之前,我將抽出一點(diǎn)時間介紹一下語言本身。 上周周末旅游去了,就沒更新了,雖然回到海拔0m的地區(qū),不過目前似乎還在缺氧,所以本次就少更點(diǎn)吧。 這章將結(jié)束詞法分析的部分。 在之前的章節(jié)(第7章從零開始寫個編譯器吧 - 開始寫詞...

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

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

    qpal 評論0 收藏0
  • 從零開始寫個譯器 - 符號分析,編寫 SignParser.java 文件

    摘要:即創(chuàng)建一個文件,并寫下如下內(nèi)容。然后以此緩存一個字符串,然后,通過調(diào)用來將這個字符串分割成一個一個運(yùn)算符,并生成。語言中根據(jù)運(yùn)算符長度分開儲存的。具體來說,如果運(yùn)算符對應(yīng)的字符串最短的是,最長的是。 上一章留下的那個大大的 TODO 表明,似乎還有什么東西沒寫完。沒錯,所以這一章我們來寫 Sign 狀態(tài)下的代碼。 所謂 Sign 狀態(tài),即是用來處理和生成 Sign 類型的 Token...

    joyqi 評論0 收藏0
  • 從零開始寫個譯器 - 文法簡介

    摘要:而,稱之為非終結(jié)符。而這個展開方案中對各個非終結(jié)符產(chǎn)生式的選擇過程,即是對源代碼中每一個部分的定性過程。這個過程讓能夠理解源代碼各個部分表示的含義,并以此生成對應(yīng)的語法樹。 我需要定義出 tao 語言的細(xì)節(jié),在此,需要引出文法這一概念。所謂文法,即是用于描述語言的一種工具。 例如,一個賦值語句可能寫成如下形式: variable = 1 + 3 如何充分定義這個賦值語句的形...

    stormzhang 評論0 收藏0

發(fā)表評論

0條評論

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