• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            關(guān)于正則表達(dá)式、正則文法、NFA、LR(1)

            昨天和Sumtec談到自動機(jī)和語法分析,一下子腦子有點(diǎn)混亂,把一些概念搞混了,看了半天清華的編譯書也沒有整明白...今天早上起來看了《離散數(shù)學(xué)及其應(yīng)用》里的自動機(jī)一部分,才厘清了頭緒。還是外國人的書講得清楚一點(diǎn)。 clip_image001

             

            昨天主要是把NFA和語法分析中的LL(1) LR(1)搞混了。事實(shí)上LL(1)分析也好LR(1)分析也好,使用的是一個(gè)基于下推自動機(jī)的計(jì)算模型,而不是有限自動機(jī)。下推自動機(jī)的計(jì)算能力要比有限自動機(jī)強(qiáng)。

             

            其次就是NFADFA的計(jì)算能力確實(shí)是等價(jià)的,也就是對于任意一個(gè)NFA都可以找到一個(gè)與之等價(jià)的DFA(可以使用子集法來構(gòu)造這樣一個(gè)DFA)

            為了說明有限自動機(jī)與LL(1) LR(1)等分析法的關(guān)系,先概述一下文法的分類

             

            文法分為四類:

            (1)短語文法(0型文法)

            (2)上下文相關(guān)文法(1型文法)

            (3)上下文無關(guān)文法(2型文法)

            (4)正規(guī)()文法(3型文法)

             

            上面四種文法有包含的關(guān)系,1型文法是0型文法的一個(gè)子集,2型文法是1型文法的一個(gè)子集,,3型文法是2型文法的一個(gè)子集。

             

            我們主要研究2型和3型方法。

             

            3型文法(正則文法)與正則表達(dá)式(Regular Expression)是等價(jià)的,任意一個(gè)正則文法總是可以轉(zhuǎn)化成一個(gè)等價(jià)的正則表達(dá)式。同時(shí)正則表達(dá)式與有限自動機(jī)是等價(jià)的。一個(gè)能由有限自動機(jī)識別的語言,必然可以用正則表達(dá)式來表示,而一個(gè)用正則表達(dá)式表示的語言一定可以用一個(gè)有限自動機(jī)來識別。

             

            但是正則文法不足以描述程序設(shè)計(jì)語言(比如,不能用正則表達(dá)式定義帶有括號的數(shù)學(xué)表達(dá)式),現(xiàn)在流行的程序設(shè)計(jì)語言如C#, java等都是用2型文法,也就是上下文無關(guān)文法來定義的。因此有限自動機(jī)沒有能力來識別程序設(shè)計(jì)語言(最后我會舉個(gè)例子)。因此提出來下推自動機(jī)的模型。下推自動機(jī)具有限自動機(jī)的所有部件,如狀態(tài)、狀態(tài)轉(zhuǎn)移表等,同時(shí)它比有限自動機(jī)多一個(gè)堆棧,常稱為計(jì)算棧。下推自動機(jī)可以根據(jù)情況將終結(jié)符或者非終結(jié)符壓入棧,或者彈出棧。

             

            LL(1)LR(1)等分析法就是用來分析上下文無關(guān)文法的,基于下推自動機(jī)的模型。這也是為什么介紹語法分析時(shí),所有的書都會說一個(gè)基于LR(1)分析法的預(yù)測分析器,都會有三部分組成:狀態(tài)轉(zhuǎn)移表、控制器和計(jì)算棧。而所謂的移進(jìn)與歸約就是入棧與出棧的問題。

             

            最后,舉一個(gè)例子(好象大家都睡著了 -_-b)

             

            先給出一個(gè)文法:

             

            S->0S1 | 01

             

            其中01是終結(jié)符。

             

            這樣一個(gè)文法描述的語言其實(shí)就是n個(gè)0加上相等數(shù)量的n個(gè)1,這里n是某個(gè)整數(shù)。

             

            這個(gè)文法是一個(gè)上下文無關(guān)文法,但不是一個(gè)正則文法。所以說我們沒辦法寫出一個(gè)正則表達(dá)式來描述這樣一個(gè)語言。等于一個(gè)能識別這個(gè)文法中的任意句子的NFA,我們總能找到這樣一個(gè)句子,它不是由該文法所定義的,卻能被這個(gè)NFA接受。換句話說,任意NFA都不能用來判斷某個(gè)句子是不是由以上這個(gè)文法所定義。說得實(shí)際一點(diǎn),如果要求寫一個(gè)著色程序,輸入的文件是一串01組成的序列,要求把其中n個(gè)0n個(gè)1的序列用紅色著色,而其它用黑色的話,我們就不能光用正則表達(dá)式匹配來完成這一任務(wù)了。

             

            如果上面這個(gè)例子還比較抽象的話,那么對于“帶有括號的數(shù)學(xué)表達(dá)式”這樣一個(gè)語言,也是沒有辦法用正則表達(dá)式來進(jìn)行匹配的。因?yàn)槊枋觥皫в欣ㄌ柕臄?shù)學(xué)表達(dá)式”的文法,也不是一個(gè)正則文法,因?yàn)槠渲袔в蓄愃疲?span lang="EN-US">

            F->(E)

            這樣的部分。

            而正則文法要求所有的產(chǎn)生式都必須是A->aB或者A->a這樣的形式的(其中AB是非終結(jié)符,a是終結(jié)符)

             

            posted on 2009-09-29 13:54 肥仔 閱讀(904) 評論(0)  編輯 收藏 引用 所屬分類: 狀態(tài)機(jī) & 自動機(jī) & 形式語言

            久久天天躁狠狠躁夜夜不卡 | 久久久久久毛片免费播放| 麻豆久久久9性大片| 久久亚洲国产精品成人AV秋霞| 亚洲综合精品香蕉久久网| 国产一区二区三区久久| 色99久久久久高潮综合影院| 性欧美大战久久久久久久久| 999久久久免费精品国产| 亚洲伊人久久成综合人影院| 国内精品伊人久久久久| 中文字幕精品无码久久久久久3D日动漫| 久久亚洲熟女cc98cm| 日本一区精品久久久久影院| 亚洲综合伊人久久综合| 久久精品无码一区二区app| 久久99精品久久久久婷婷| 久久精品一区二区三区中文字幕| 亚洲国产美女精品久久久久∴| 伊人久久大香线焦综合四虎| 久久国语露脸国产精品电影| 久久性精品| 久久99精品久久久久久9蜜桃 | 青青热久久国产久精品| 久久99精品国产99久久| 青青草原精品99久久精品66| 热综合一本伊人久久精品| 中文字幕成人精品久久不卡| 久久婷婷国产综合精品| 久久水蜜桃亚洲av无码精品麻豆| 色播久久人人爽人人爽人人片aV| 成人午夜精品久久久久久久小说 | 久久这里有精品视频| 国内精品久久久久久久coent | 国产精品久久久久…| 日本人妻丰满熟妇久久久久久| 国内精品久久久久影院薰衣草| 久久大香萑太香蕉av| 亚洲精品乱码久久久久久按摩| 麻豆av久久av盛宴av| 麻豆AV一区二区三区久久|