編譯器學習 文法的型別

2021-06-28 05:51:51 字數 886 閱讀 4224

文法的型別

乙個文法g[s],s為啟始規則,如果它的所有規則符合形如:a=>b其中a和b都是g[s]文法的符號串,但a中至少要有乙個非終結符,這時g[s]文法是短語文法。g[語言]為例「賓語張三=>名詞張三」是短語文法的規則,「張三編寫=>名詞張三」則不是短語文法,因為「張三」和「編寫」都是終結符規則左則沒有非終結符。我們可以看出短語文法是對規則做了一些限制後形成的,下面的文法是對短語文法做進一步限制形成的。

如果g[s]的所有規則都滿足形如:a=>b其中a的長度要小於等於b,這時g[s]文法是上下文有關文法(context-freegrammars)。上下文有關文法的更形象的定義是:文法的所有規則滿足abc=>abc的形式,

其中b是非終結符,a、b、c是符號串。也就是說b=>b 只在前面有a後面有c的情況下才能推導,所以是上下文有關的。例如:「張三動詞程式=>張三編寫程式」是上下文有關文法的規則。

如果g[s]的所有規則都滿足形如:a=>b其中a是乙個非終結符,b是符號串,這時g[s]文法是上下文無關文法(context-sensitivegrammars)。就是說a推導出b與其前後是什麼符號串無關。上面g[語言]的文法就是上下文無關文法。

如果g[s]的所有規則都滿足形如:a=>ab或a=>a其中a和b是非終結符,a是終結符,這時g[s]文法是正規文法(regulargrammars)。就是說規則的右則要以終結符開頭。如:「謂語=>編寫賓語」,「動詞=>編寫」都是正規文法的規則簡稱正規式,「謂語=>動詞賓語」就不是正規式。

這四種文法是對規則的限制逐步加強形成的。正規文法是上下文無關文法的特例,上下文無關文法是上下文有關文法的特例,上下文有關文法是短語文法的的特例。文法產生的語言就是該文法的語言,如:上下文無關文法產生的語言就是上下文無關語言,正規文法產生的語言就是正規語言。文法是語言模型。計算機語言中普遍採用上下文無關文法來定義語法規則。

編譯器設計 文法與LL 1

根據形式語言理論的創立者喬姆斯基 chomsky 的定義,形式語言的文法分為四種 0型文法 g vn,vt,p s 如果產生式 中,vn vt 且至少有乙個非終結符,vn vt 那麼g就是乙個0型文法。1型文法 上下文相關文法 在0型文法的基礎上,規定對每乙個 都有 2型文法 上下文無關文法 在1型...

GCC編譯器學習

不同的平台如x86和arm,一段程式跑起來到最下面會轉成彙編,彙編要轉成機器碼,機器碼會由於硬體平台不同而不同。有時候要程式設計序在arm上跑,必須針對arm寫程式,但是在arm上寫程式很麻煩 沒有很好的開發工具 所以我們就在x86平台上 windows 上把程式寫好,但是編譯的時候告訴它我們要執行...

C 學習(9) 配置編譯器 編譯器擴充套件

亞歷克斯於2018年9月19日 最後由alex於2018年9月26日修改 c 標準定義了程式在特定情況下應如何表現的規則。在大多數情況下,編譯器將遵循這些規則。但是,許多編譯器實現了對語言的更改,通常是為了增強與其他語言版本 例如c99 的相容性,或者出於歷史原因。這些特定於編譯器的行為稱為編譯器擴...