自然語言
語言,直觀來說,就是用來說,用來聽,用來讀。
語言都有一定的結(jié)構(gòu)! 從大的方面來說, 分為 單詞、語法、語義。
不同的單詞組成了句子,句子的組成有一定的規(guī)則,這就是語法。 每個句子都有其具體的含義, 這就是語義。
最簡單的語法就是: 主-謂-賓。如:漢語中:“我愛你”,英語中:“I love you”,?都遵循這個語法規(guī)則。
那么語義是什么呢?
“蘋果愛橘子” 和 “我愛你” 有一樣的語法結(jié)構(gòu),都是 :主-謂-賓。
但是 “蘋果愛橘子” ,這句話有點(diǎn)難以理解, 蘋果怎么會愛橘子呢? 這句話的語義就不對了, 所以不能被理解!
上面說的是自然語言。計算機(jī)語言,當(dāng)然也是屬于語言范疇。
計算機(jī)語言
既然是語言,也必定遵循一定的結(jié)構(gòu): 單詞,語法,語義。只是這個語言是為計算機(jī)服務(wù)的,能夠被計算機(jī)理解并且執(zhí)行。?
單詞
對于計算機(jī)語言來說,最基本的單詞就是 關(guān)鍵字、標(biāo)識符、字符串、數(shù)字、運(yùn)算符。?
if else, while 是最常見的關(guān)鍵字。
+、-、*、/ 是最基本的運(yùn)算符。
變量名、函數(shù)名、類名,是最基本的標(biāo)識符。
語法
每個語言都有獨(dú)特的語法。 如 while, if else, 函數(shù)的定義、類的定義, 不同的語言,就有不同的語法。
語義
除了語法,當(dāng)然還得識別語義。 如 遇到了while, 就知道這是循環(huán); 遇到了 if else, 就知道這是條件判斷, 這些需要通過語義分析才知道。
說了這么多,其實(shí)就是想說明,五花八門的語言 ,它們都有一定的規(guī)律,有規(guī)律的語言才能為計算機(jī)所用。 所以是否有一套通用的語法規(guī)則,可以去定義一門語言呢?當(dāng)然了, 上下文無關(guān)文法就可以用于定義目前所有的計算機(jī)語言。
上下文無關(guān)文法
上下文無關(guān)文法是由語言學(xué)家Chromsky提出的, 后面就被運(yùn)用于計算機(jī)語言的設(shè)計了。 上下文無關(guān)文法只是屬于Chromsky語法框架里的一種而已。 在他的語法框架中有四種四種語法:3型語法、 2型語法、1型語法、0型語法, 這四種語法的表達(dá)能力逐漸增強(qiáng)。其中3型語法就是所說的正則表達(dá)式。 說到正則表達(dá)式, 就要聯(lián)系到有限自動機(jī),正則表達(dá)式是等價于有限自動機(jī)的, 當(dāng)然這不在本次討論范圍之內(nèi)。 從這個里也看出,學(xué)科之間存在普遍的聯(lián)系, 語言學(xué)家提出的語法框架竟然能被計算機(jī)所用, 并且廣泛的應(yīng)用于編譯原理, 自動機(jī)理論。
編譯原理
所以計算機(jī)語言是有一套理論基礎(chǔ)的, 這個理論基礎(chǔ)就包括上面提及的上下文無關(guān)文法和正則表達(dá)式 以及 自動機(jī)理論。
一門語言要被計算機(jī)所用,計算機(jī)就得理解這門語言。 怎么理解呢?當(dāng)然是直接從語言的結(jié)構(gòu)展開。前面說了, 語言都存在基本的結(jié)構(gòu), 即: 詞法、語法、語義。
那么計算機(jī)要理解語言,當(dāng)然就得從 詞法分析, 語法分析,和語義分析展開, 這屬于編譯原理的范疇了。
詞法分析
詞法分析,就是分析單詞。 把語言中的單詞抽取出來,并且忽略無關(guān)的信息。 注釋、 空格就是無關(guān)的信息。 字符串、數(shù)字、標(biāo)識符、關(guān)鍵字, 這些單詞需要靠詞法分析程序去識別。
那怎么分析呢? 正則表達(dá)式非常適用于定義單詞,如 最常見的手機(jī)號碼,就可以用正則表達(dá)式來表達(dá)。 所以可以用正則表達(dá)式做詞法分析。正則表達(dá)式的背后實(shí)現(xiàn)邏輯是可以基于自動機(jī)的。?
語法分析
目前的計算機(jī)語言的語法都可由上下文無關(guān)文法表達(dá)。定義好語法之后,? 就要基于語法分析程序去判斷語法是否正確, 并且生成一棵語法樹。
總結(jié)
計算機(jī)語言和自然語言一樣, 遵循一樣的語言結(jié)構(gòu)?;谡Z言結(jié)構(gòu)展開,用正則表達(dá)式去表達(dá)單詞,用上下文無關(guān)文法去表達(dá)語法。而正則表達(dá)式和上下文無關(guān)文法都是由語言學(xué)家Chromsky發(fā)明的。定義好單詞和語法之后,計算機(jī)還得理解該語言,通過詞法分析, 語法分析和語義分析, 該語言才能被計算機(jī)理解!