形式語言與自然語言

2023-03-20 15:43 更新

自然語言是人類講話使用的語言,如英語、西班牙語和法語等。雖然人們總要給自然語言加上一些規(guī)則,但自然語言并非人類設(shè)計,它們是自然演化而來的。

形式語言是人們?yōu)樘囟☉?yīng)用設(shè)計的語言。例如,數(shù)學(xué)家使用的記號就是一種便于表示數(shù)字與符號關(guān)系的形式語言?;瘜W(xué)家也使用一種形式語言來表示分子的化學(xué)結(jié)構(gòu)。最重要的是:

編程語言是人為設(shè)計的用來表達(dá)計算的形式語言。

前面也提到過,形式語言有嚴(yán)格的語法規(guī)則。比如3+3=6是符合語法的數(shù)學(xué)語句,而3=+6$則不是。同樣H2O是符合語法的化學(xué)式,但2Zz不是。

這里的兩個2都是下標(biāo),在Markdown語法中無法表示。下段同?!g者注

語法規(guī)則包含兩個方面:標(biāo)識符與結(jié)構(gòu)。標(biāo)識符是語言的基本元素,像單詞、數(shù)字以及化學(xué)元素等。3=+6$的一個錯誤是,至少據(jù)我所知$不是數(shù)學(xué)上合法的標(biāo)識符。類似的,2Zz也是非法的,因為沒有縮寫為Zz的化學(xué)元素。

第二種語法錯誤是句子結(jié)構(gòu)上的,即標(biāo)識符的排列方式。語句3=+6$結(jié)構(gòu)上也是非法的,因為加號不能直接放在等號后面。類似地,化學(xué)式中的下標(biāo)必須在元素名后面,而不能在前面。

閱讀英語的句子或者形式語言的語句時,必須分析句子結(jié)構(gòu)(使用自然語言時,你會下意識地這樣處理)。這個過程叫做解析。

例如,當(dāng)你聽到“The other shoe fell”這句話時,你會知道“the other shoe”是主語而“fell”是動詞。分析完句子結(jié)構(gòu),你就理解了它的意思,即句子的語義。假設(shè)你知道“shoe”是什么,也知道“fall”的意義,你就能理解句子的大體含義。

雖然形式語言和自然語言有很多共同點,如標(biāo)識符、結(jié)構(gòu)、語法和語義,但是它們?nèi)匀挥泻芏嗖煌c:

歧義:自然語言常有歧義,人們需要根據(jù)上下文和其他信息來理解。而形式語言天生就是清晰無二義的,也就是說不管上下文是什么,任何語句都有一個精確的意義。

冗余:為了彌補(bǔ)歧義問題并減少誤解,自然語言引入了很多冗余,結(jié)果就是語言常常很冗長。形式語言冗余少些,更加簡潔。

字面意義:自然語言有很多成語和隱喻。比如我說“The other shoe fell”,可能不是說鞋,也沒有什么東西掉下來。而形式語言語句的含義和字面意義是完全一致的。

說著自然語言長大的我們,通常都要經(jīng)歷一段痛苦的時期才能適應(yīng)形式語言。從某些方面來說,自然語言和形式語言的差別就像詩歌和散文的差別,而且可能還有過之無不及:

詩歌:選詞既要求發(fā)音,又要求含義,整首詩營造出一種效果或情感響應(yīng)。歧義不僅常見,很多時候是有意為之。

散文:詞匯的字面意思更加重要,而且句子結(jié)構(gòu)也更能表意。相對于詩歌,散文更經(jīng)得起推敲,但仍然會存在歧義。

程序:計算機(jī)程序的含義是無歧義的,和語句的字面意思一致,通過對標(biāo)識符和結(jié)構(gòu)的分析可以完整地理解。

關(guān)于閱讀程序(或其他形式語言)提幾點建議:首先,形式語言比自然語言難懂得多,所以讀起來會花費(fèi)更長的時間。其次,結(jié)構(gòu)非常重要,從上到下、從左到右地閱讀并不見得管用。相反,要學(xué)會在頭腦中分析程序,識別標(biāo)識符并解讀清楚句子結(jié)構(gòu)。最后,細(xì)節(jié)很重要,像拼寫或者標(biāo)點符號錯誤,在自然語言中有可能無傷大雅,但在形式語言中可能造成天壤之別。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號