# 以生成規則定義文法

接下來，我們來學習程式語言的語法記法。程式語言的語法大部份是以「生成規則」（production rule）定義出來的。生成規則的規則是以遞迴方式來定義文法。

我們先用自然語言思考一下：（日文的）文法的巢狀結構。（譯註：這段用別的自然語言也通用，如中文。）舉例來說，「花很漂亮」這個句子中「花」這個名詞可以換成「紅色的花」也是正確的句子。把「紅色的」再延伸變成「淡紅色的」也還是正確的句子。這個句子也可以放進別的句子，像「我認為淡紅色的花很漂亮」。

這類文法，可以想成是根據「『句子』由『主語』和『述語』構成」或「『名詞詞組』是在『名詞』或『形容詞』後接上『名詞詞組』構成」這類規則定義出來的。所以，從「句子」出發，根據規則延伸，就可以造出無數符合定義的文法的句子。

或是我們反過來說，對於已經存在的句子，考慮符合該句子的延伸步驟，就可以考慮其文字列背後的結構。

原本上述的概念是為了自然語言而建立的，但是非常適合電腦處理的資料，所以生成規則以程式語言為首，也應用在電腦的各個領域中。

{% hint style="info" %}

#### 小知識：杭士基的生成文法

建立生成文法這個概念的，是諾姆﹒杭士基（全名：艾弗拉姆﹒諾姆﹒杭士基，英：Avram Noam Chomsky）這位語言學者。他的概念對語言學、電腦科學有非常大的影響。

根據杭士基的假說，人類說語言的理由，是因為人與生俱來的專門處理生成規則的腦部結構。因為人類有辦法得出遞迴的語言規則，才有辦法說出語言。人類以外的動物之所以沒有語言能力，他認為是是因為動物的腦並不具有得出生成規則的結構。杭士基的主張，雖在假說提出後近60年的今日仍未被證明或反證，但時至今日仍被認為非常有說服力。
{% endhint %}
