青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評(píng)論-2670  文章-0  trackbacks-0

剛剛發(fā)了上一篇文章之后就發(fā)現(xiàn)狀態(tài)機(jī)畫(huà)錯(cuò)了。雖然LiveWriter有打開(kāi)博客并修改文章的功能,不過(guò)為了讓我留下一個(gè)教訓(xùn),我還是決定發(fā)一篇勘誤。這個(gè)教訓(xùn)就是,作分析的時(shí)候不要隨便“跳步”,該一步一步來(lái)就一步一步來(lái)。其實(shí)人呢,就是很容易忘掉以前的教訓(xùn)的了。第一個(gè)告訴我不能這么干的人其實(shí)是小學(xué)三年級(jí)的數(shù)學(xué)老師。當(dāng)時(shí)我因?yàn)閼械脤?xiě)字,所以計(jì)算應(yīng)用題的時(shí)候省了幾步,被批評(píng)了。

故事就從狀態(tài)機(jī)開(kāi)始。文法我就不重復(fù)了,見(jiàn)上一篇文章。現(xiàn)在我們從狀態(tài)機(jī)開(kāi)始。第一個(gè)狀態(tài)機(jī)是直接從文法變過(guò)來(lái)的:

image

然后我們把所有的非終結(jié)符跳轉(zhuǎn)都通過(guò)Shift和Reduce連接到該非終結(jié)符所代表的狀態(tài)機(jī)的狀態(tài)上面,就會(huì)變成下面的圖。具體的做法是,對(duì)于每一條非終結(jié)符的跳轉(zhuǎn),譬如說(shuō)S0 –> Symbol –> S1。首先抹掉這條跳轉(zhuǎn)。然后增加兩條邊,分別是S0到Symbol的起始節(jié)點(diǎn),操作是Shift<S0>。還有從Symbol的終結(jié)節(jié)點(diǎn)到S0,操作是Pop<S0> Reduce。Shift<S>等于把狀態(tài)S給push到堆棧里,然后Pop<S>等于在狀態(tài)里面彈出內(nèi)容是S的棧頂元素。如果失敗了怎么辦呢?那就不能用這條跳轉(zhuǎn)。跟上圖一樣,所有輸入$跳轉(zhuǎn)到Finish的邊,操作都是要Pop<Null>的。在剛開(kāi)始分析的時(shí)候,堆棧有一個(gè)Null值,用來(lái)代表“語(yǔ)法分析從這里開(kāi)始”。

image

這個(gè)圖的粗虛邊代表所有跟左遞歸有關(guān)的跳轉(zhuǎn)。這些邊是成對(duì)的,分別是左遞歸跳轉(zhuǎn)的Shift和Reduce。如果不是為了實(shí)現(xiàn)高性能的語(yǔ)法分析的話(huà),其實(shí)這個(gè)狀態(tài)機(jī)已經(jīng)足夠了。這個(gè)圖跟語(yǔ)法分析的“狀態(tài)跳轉(zhuǎn)軌跡”有很大的關(guān)系。雖然IDList0你不知道第一步要跳轉(zhuǎn)到IDList0還是ID0,不過(guò)沒(méi)關(guān)系,現(xiàn)在我們先假設(shè)我們可以通過(guò)某種神秘的方法來(lái)預(yù)測(cè)到。那么,當(dāng)輸入是A,B,C$的時(shí)候,狀態(tài)跳轉(zhuǎn)軌跡就會(huì)是如下的樣子:

image

為什么要這么做呢?我們把這幅圖想象成為
1:想做的箭頭表示push一個(gè)狀態(tài)
2:向下的箭頭表示修改當(dāng)前狀態(tài)
3:向右的狀態(tài)表示pop一個(gè)狀態(tài)并修改當(dāng)前狀態(tài)

因此當(dāng)輸入到B的時(shí)候,到達(dá)ID1,并跳轉(zhuǎn)到IDList1。這個(gè)時(shí)候IDList1【左邊】的所有【還留在堆棧里】的狀態(tài)時(shí)Null和IDList0,當(dāng)前狀態(tài)IDList1,輸入剩下,C$。這個(gè)圖特別的有用。當(dāng)我們分析完并且把構(gòu)造語(yǔ)法樹(shù)的指令附著在這些箭頭上面之后,按順序執(zhí)行這些指令就可以構(gòu)造出一顆完整的語(yǔ)法樹(shù)了。

但是在實(shí)際操作里面,我們并沒(méi)有辦法預(yù)測(cè)“這里要左遞歸兩次”,也沒(méi)辦法在多次reduce的時(shí)候選擇究竟要從哪里跳到哪里。所以實(shí)際上我們要學(xué)習(xí)從EpsilonNFA到DFA的那個(gè)計(jì)算過(guò)程,把Shift和Reduce當(dāng)成Epsilon,把吃掉一個(gè)token當(dāng)成非Epsilon邊,然后執(zhí)行我之前寫(xiě)的《構(gòu)造可配置詞法分析器》一文中的那個(gè)去Epsilon邊算法(如何從Nondeterministic到Deterministic,以及相關(guān)的Look Ahead,是下一篇文章的內(nèi)容),然后就可以把狀態(tài)機(jī)變成這樣:

image

上面粗體的Pop<IDList0>表示,這一個(gè)Pop是對(duì)應(yīng)于那個(gè)左遞歸Shifting操作的。實(shí)際上這是做了一個(gè)怎樣的變化呢?從“物理解釋”上來(lái)講,其實(shí)是把“狀態(tài)跳轉(zhuǎn)軌跡”里面那些除了左遞歸shifting之外的所有不吃掉token的邊都去掉了:

image

在這里我們可以看到,為什么當(dāng)堆棧是IDList0, IDList0和IDList0, IDList3的時(shí)候,從ID0都可以通過(guò)吃掉一個(gè)”,”從而跳轉(zhuǎn)到IDList3。在上面這張“狀態(tài)跳轉(zhuǎn)軌跡”里面,這兩個(gè)事情都發(fā)生了,分別是第一條向左的箭頭和第二條向左的方向。而且這兩條邊剛好對(duì)應(yīng)于上圖帶有藍(lán)色粗體文字的跳轉(zhuǎn),屬于左遞歸Reducing操作。

所以,其實(shí)在這個(gè)時(shí)候,我們同時(shí)解決了“應(yīng)該在什么時(shí)候進(jìn)行左遞歸Shifting”的問(wèn)題。只要當(dāng)左遞歸Reducing已發(fā)生,我們立刻在軌跡上面補(bǔ)上一條左遞歸Shifting就好了。因此,我們?cè)谝婚_(kāi)始做parsing的時(shí)候,根本不需要預(yù)先做左遞歸Shifting。所以當(dāng)剛剛輸入A的時(shí)候,“狀態(tài)跳轉(zhuǎn)軌跡”是這樣子的:

image

然后遇到一個(gè)”,”,發(fā)現(xiàn)之前“做漏”了一個(gè)左遞歸Shifting,因此就變成下面這個(gè)樣子:

image

這也就是上一篇文章那個(gè)Fake-Shift所做的事情了。

posted on 2012-12-07 02:49 陳梓瀚(vczh) 閱讀(5004) 評(píng)論(2)  編輯 收藏 引用 所屬分類(lèi): C++

評(píng)論:
# re: 可配置語(yǔ)法分析器開(kāi)發(fā)紀(jì)事(三點(diǎn)五)&mdash;&mdash;生成下推自動(dòng)機(jī)的具體步驟 2012-12-07 03:54 | DiryBoy
# re: 可配置語(yǔ)法分析器開(kāi)發(fā)紀(jì)事(三點(diǎn)五)&mdash;&mdash;生成下推自動(dòng)機(jī)的具體步驟 2012-12-15 08:17 | Zblc(邱震鈺)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99精品视频一区| 亚洲欧美日韩一区二区三区在线观看 | 99re66热这里只有精品3直播| 亚洲国产va精品久久久不卡综合| 国产亚洲欧美日韩一区二区| 国内视频一区| 亚洲人妖在线| 亚洲网站在线看| 久久国产精品99国产| 欧美a级片网| 一区二区日韩欧美| 久久国产精品网站| 欧美精品日韩综合在线| 国产精品视频专区| 亚洲精品国产拍免费91在线| 亚洲欧美另类在线| 嫩草国产精品入口| 亚洲视频在线一区观看| 久久婷婷麻豆| 国产精品成av人在线视午夜片| 国模叶桐国产精品一区| 一本色道久久88亚洲综合88| 久久大逼视频| 日韩视频免费观看| 久久久精品国产免大香伊| 欧美体内she精视频| 黄色亚洲在线| 亚洲欧美日韩精品| 亚洲黄色影片| 欧美在线一级va免费观看| 久久裸体艺术| 国产精品久久久久婷婷| 在线观看亚洲一区| 欧美一区二区视频观看视频| 亚洲国产一区二区三区青草影视 | 欧美一区二区视频网站| 欧美日韩成人精品| 亚洲福利视频免费观看| 亚洲欧美日韩久久精品| 亚洲精品久久| 欧美—级在线免费片| 在线精品国产欧美| 久久国产直播| 亚洲欧美综合| 国产精品入口夜色视频大尺度| 99视频有精品| 最近中文字幕日韩精品| 农村妇女精品| 亚洲精品1区2区| 欧美国产免费| 欧美77777| 亚洲精品一二三| 欧美激情 亚洲a∨综合| 久久中文精品| 亚洲欧洲久久| 亚洲精品护士| 欧美视频在线观看一区二区| 在线午夜精品自拍| 一区二区三区偷拍| 欧美视频免费看| 午夜精品久久久久久久久久久久久| 一本久道久久综合中文字幕| 欧美女人交a| 亚洲一区二区三区精品动漫| 一本色道久久综合狠狠躁篇怎么玩| 欧美久色视频| 亚洲欧美在线免费| 欧美一区二区三区免费视| 韩日欧美一区二区| 欧美国产欧美综合 | 一区二区三区日韩在线观看| 亚洲国产成人精品女人久久久 | 久久久国产91| 极品尤物av久久免费看| 暖暖成人免费视频| 欧美精品福利在线| 亚洲免费网址| 欧美电影资源| 国产日韩三区| 久久一区二区三区国产精品 | 国产精品成人午夜| 香蕉成人久久| 老司机午夜免费精品视频| 91久久夜色精品国产网站| 亚洲人成小说网站色在线| 国产精品久久精品日日| 久久乐国产精品| 欧美激情精品久久久久久蜜臀 | 亚洲电影欧美电影有声小说| 亚洲日本aⅴ片在线观看香蕉| 国产精品久久久久aaaa九色| 久久美女性网| 欧美日韩一二三区| 老色批av在线精品| 国产精品老女人精品视频| 乱中年女人伦av一区二区| 欧美日韩久久| 女人香蕉久久**毛片精品| 国产精品av久久久久久麻豆网| 久久欧美肥婆一二区| 欧美日韩亚洲一区二| 久久久人成影片一区二区三区观看 | 国产精品成人久久久久| 玖玖国产精品视频| 国产精品福利在线| 亚洲国产欧美日韩精品| 国产日韩欧美精品一区| 一本色道久久综合亚洲精品不| 在线免费观看成人网| 亚洲欧美日韩一区二区三区在线观看| 亚洲国产精品久久久久久女王| 一区二区三区高清在线| 91久久国产精品91久久性色| 欧美亚洲在线| 先锋影音久久久| 欧美网站在线| 日韩网站免费观看| 亚洲精品永久免费精品| 久久久久一区二区三区| 欧美一区二区| 国产精品入口| 亚洲欧美国产高清va在线播| 一区电影在线观看| 欧美va日韩va| 欧美激情亚洲| 亚洲人成网站在线播| 久久亚洲一区二区三区四区| 久久久久免费视频| 黄色亚洲精品| 久久人人爽人人爽爽久久| 老司机久久99久久精品播放免费 | 中文一区字幕| 欧美人成网站| 亚洲欧美在线视频观看| 亚洲伊人观看| 欧美一区二区在线播放| 国产精品视频999| 亚洲中字在线| 欧美一区二区视频网站| 国产日韩欧美在线播放不卡| 欧美呦呦网站| 欧美成人午夜77777| 亚洲电影观看| 欧美精品免费在线观看| 一区二区三区免费在线观看| 亚洲伊人一本大道中文字幕| 欧美亚州在线观看| 欧美一区二区成人| 免费成人高清在线视频| 亚洲欧洲在线观看| 欧美视频精品在线观看| 亚洲欧美第一页| 美女被久久久| 国产精品99久久久久久白浆小说 | 欧美日韩成人一区二区| 亚洲视频精品| 狂野欧美性猛交xxxx巴西| 亚洲人成久久| 国产精品视频免费在线观看| 久久精品国产清高在天天线 | 久久久久久电影| 亚洲国产精品久久精品怡红院| 一区二区三区精品| 国产亚洲欧美日韩美女| 欧美顶级少妇做爰| 亚洲自拍偷拍视频| 欧美高清你懂得| 午夜精彩国产免费不卡不顿大片| 韩日欧美一区二区| 欧美视频一区二区三区在线观看| 久久国产福利| 欧美激情一区二区| 欧美一二三视频| 日韩一二三在线视频播| 国产一区二区三区无遮挡| 欧美精品1区2区3区| 欧美一区日韩一区| 99视频在线精品国自产拍免费观看| 久久精品一区二区国产| 一区二区三区产品免费精品久久75| 国产一区二区三区av电影| 欧美日韩一区二区三区四区在线观看 | 欧美视频福利| 麻豆精品一区二区av白丝在线| 亚洲最黄网站| 欧美粗暴jizz性欧美20| 欧美一区二区视频免费观看| 99在线视频精品| 在线看日韩欧美| 国产一区二区三区免费不卡 | 日韩一区二区久久| 一本色道久久综合亚洲精品小说| 精品不卡视频| 欧美成人r级一区二区三区| 伊人狠狠色丁香综合尤物| 欧美日韩国产综合视频在线| 久久久久久久999| 性久久久久久久久久久久| 国产精品99久久久久久www| 亚洲国产精品123|