SPIR-V 研究:編譯器基本原理(二)

SPIR-V 研究:編譯器基本原理(二)- 語法

標籤(空格分隔): SPIR-V Graphics Vulkan


上一篇介紹了計算機語言的基本知識,這一篇主要講講語法。語法是一組能生成對應語言語句的規則,這一般是一個有限集合,也就是隻有有限多個規則。所以,根據給定語法和字母表,我們可以生成所有符合規則的語句。比如下圖:
此處輸入圖片的描述

Formal Language

這裏所講的語言其實就是形式語言(formal language),對應的語法就是formal grammar。語言L是一組長度有限的字符串(語句)。

  • L可以包含有限個數的語句;最小的語言不包含任何語句。
  • L還可以包含無限多個語句;比如一般編程語言就是如此。
    由於一個句子可以屬於或不屬於某一語言,所以需要一種規則或方法還檢驗給定語句是不是屬於特定語言。這種規則就是語法;檢驗的過程就是Parse的過程。

Formal Grammar

語法有四種元素構成。可以參見這篇好文章:Formal Grammar。

  • 首先是一個字母表Σ,它包含所有的**有限個的**terminal symbols;terminal symbols,顧名思義就是最終的字符,不是中間的表示符號。因爲語法基本上是一個遞歸替換的符號的過程;當所有符號都是最終字符時,替換過程結束,這時得到的就是這種語法生成的一個語句。比如:
    Σ = { "a", "the", "dog", "cat", "barked", "napped"}
  • 其次是一個包含有限箇中間字符的集合N(nonterminal symbols).
    中間字符是特殊的,可以把它們想象成wildcards;最終會被替換成其他符號。比如:
    N = { "<sentence>", "<noun>", "<verb>", "<article>" }
  • 再次是必須有一箇中間符號最爲起始符號S;它是所有可能的替換生成過程的開始。比如:
    S = "<sentence>"
  • 最後我們要有一組生成規則P(production rules);這是有限集合,定義了怎麼樣來組建語句。比如:
P = {
"<sentence>""<article><noun><verb>"
"<article>""a"
"<article>""the"
"<noun>""dog"
"<noun>""cat"
"<verb>""barked"
"<verb>""napped"
}

一個Formal Grammar就可以表示爲以上四個集合的元組(tuple)。

G = { N, Σ, P, S }

正式的數學語言描述爲:
此處輸入圖片的描述
具體也可參見wikiFormal_grammar.

The Chomsky hierarchy

數學大牛Noam Chomsky很早就研究了語言和語法,並對語法提出了分類。也就是所謂的Type-0,Type-1, Type-2和Type-3語法。其中最有用的是Context-free grammars (Type 2) and Regular grammars (Type 3).
它們之間是包含關係,Type-0是沒有任何限制的語法,可以描述最多的語言;其他的都是一步步加上各種限制後得出的語法,它們能描述的語言也就越來越少;然而它們卻更簡單更有用。事實上很多編程語言的語法都是正則表達式來描述的,也就是type-3。
此處輸入圖片的描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章