Skip to content
EntityQ1756442· pop 15· linked from 63 articles

LR剖析器

Sign in to save

Also known as GLR

type of parser

Wikidata facts

Has use
parsing
Sources (3)

via Wikidata · CC0

Article · 中文

LR剖析器是一種由下而上(bottom-up)的上下文無關語法剖析器。LR意指由左(Left)至右處理輸入字串,並以最右邊優先衍生(Right derivation)的推導順序(相對於LL剖析器)建構語法樹。能以此方式剖析的語法稱為LR語法。而在LR(k)這樣的名稱中,k代表的是剖析時所需前瞻符號(lookahead symbol)的數量,也就是除了目前處理到的輸入符號之外,還得再向右參照幾個符號之意;省略 (k)時即視為LR(1),而非LR(0)。 由於LR剖析器嘗試由剖析樹的葉節點開始,向上一層層透過文法規則的化簡,最後规约回到樹的根部(起始符號),所以它是一種由下而上的剖析方法。許多程式語言使用LR(1)描述文法,因此許多編譯器都使用LR剖析器分析原始碼的文法結構。LR剖析的優點如下: * 眾多的程式語言都可以用某種LR剖析器(或其變形)分析文法。(C++是個著名的例外) * LR剖析器可以很有效率的建置。 * 對所有「由左而右」掃描原始碼的剖析器而言,LR剖析器可以在最短的時間內偵測到文法錯誤(這是指文法無法描述的字串)。 然而LR剖析器很難以人工的方式設計,一般使用「剖析產生器(parser generator)」或「編譯器的編譯器(compiler-compiler,產生編譯器的工具)」來建構它。LR剖析器可根據剖析表(parsing table)的建構方式,分類為「簡單LR剖析器(SLR, Simple LR parser)」、「前瞻LR剖析器(LALR, Look-ahead LR parser)」以及「正統LR剖析器 (Canonical LR parser)」。這些解析器都可以處理大量的文法規則,其中LALR剖析器較SLR剖析器強大,而正統LR剖析器又比LALR剖析器能處理更多的文法。著名的Yacc即是用來產生LALR剖析器的工具。

Abstract from DBpedia / Wikipedia · CC BY-SA