[云炬ThinkPython阅读笔记]1.6 形式语言和自然语言
1.6 形式語言和自然語言
自然語言 (natural language) 是人們交流所使用的語言,例如英語、西班牙語和法語。它們不是人為設計出來的(盡管有人試圖這樣做);而是自然演變而來。
形式語言(formal languages) 是人類為了特殊用途而設計出來的。例如,數學家使用的記號(notation) 就是形式語言,特別擅長表示數字和符號之間的關系。化學家使用形式語言表示分子的化學結構。最重要的是:
編程語言是被設計用于表達計算的形式語言。
形式語言通常擁有嚴格的語法規則,規定了詳細的語句結構。例如,3 + 3 = 6 是語法正確的數學表達式,而 3+ = 3$6 則不是;H2O 是語法正確的化學式,而 2Zz 則不是。
語法規則有兩種類型,分別涉及記號 (tokens) 和結構。記號是語言的基本元素,例如單詞、數字和化學元素。3+ = 3$6 這個式子的問題之一,就是 $ 在數學中不是一個合法的記號(至少據我所知)。類似的,2Zz 也不合法,因為沒有一個元素的簡寫是 Zz 。
6 第一章 程序之道
第二種語法規則與標記的組合方式有關。3+ = 3 這個方程是非法的,因為即使 + 和= 都是合法的記號,但是你卻不能把它們倆緊挨在一起。類似的,在化學式中,下標位于 元素之后,而不是之前。
This is @ well-structured Engli$h sentence with invalid t*kens in it. This sentence all valid tokens has, but invalid structure with. 3
當你讀一個用英語寫的句子或者用形式語言寫的語句時,你都必須要理清各自的結構
(盡管在閱讀自然語言時,你是下意識地進行的)。這個過程被稱為解析 (parsing)。雖然形式語言和自然語言有很多共同點— 標記、結構和語法,它們也有一些不同:
歧義性 (ambiguity): 自然語言充滿歧義,人們使用上下文線索以及其它信息處理這些歧義。形式語言被設計成幾乎或者完全沒有歧義,這意味著不管上下文是什么, 任何語句都只有一個意義。
冗余性 (redundancy): 為了彌補歧義性并減少誤解,自然語言使用很多冗余。結果, 自然語言經常很冗長。形式語言則冗余較少,更簡潔。
字面性 (literalness): 自然語言充滿成語和隱喻。如果我說 “The penny dropped’’,可能根本沒有便士、也沒什么東西掉下來(這個成語的意思是,經過一段時間的困 惑后終于理解某事)。形式語言的含義,與它們字面的意思完全一致。
由于我們都是說著自然語言長大的,我們有時候很難適應形式語言。形式語言與自然語 言之間的不同,類似詩歌與散文之間的差異,而且更加明顯:
詩歌 (Poetry): 單詞的含義和聲音都有作用,整首詩作為一個整理,會對人產生影響, 或是引發情感上的共鳴。歧義不但常見,而且經常是故意為之。
散文 (Prose): 單詞表面的含義更重要,句子結構背后的寓意更深。散文比詩歌更適合分析,但仍然經常有歧義。
程序 (Programs): 計算機程序的含義是無歧義、無引申義的,通過分析程序的標記和結構,即可完全理解。
形式語言要比自然語言更加稠密,因此閱讀起來花的時間會更長。另外,形式語言的結 構也很重要,所以從上往下、從左往右閱讀,并不總是最好的策略。相反,你得學會在 腦海里分析一個程序,識別不同的標記并理解其結構。最后,注重細節。拼寫和標點方 面的小錯誤在自然語言中無傷大雅,但是在形式語言中卻會產生很大的影響。
3譯注:上面兩句英文都是不符合語法的,一個包含非法標記,另一個結構不符合語法。
總結
以上是生活随笔為你收集整理的[云炬ThinkPython阅读笔记]1.6 形式语言和自然语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5 API详解(4):最实用的A
- 下一篇: [云炬ThinkPython阅读笔记]1