Operational Semantics in Programing Language (編程語言的操作語義)

之前一直不懂什麼是semantics (語義), syntax (句法) 和grammar (語法),也不懂environment (context 上下文)到底指的是什麼。 現在先簡單講下在自然語言下這些都代表了個啥。syntax和grammer是語法,即句子或者短語的組成規則,規定了什麼樣的句子或者短語是合法的句子或短語。一個句子由主謂賓構成即最基本的語法。而語義是指句子符合語法後所表達的意思。符合語法的句子不代表有合適的意思/意義。如 『蘋果 操 牛』這句話 複合基本語法,但沒有表達任何實際意義,我們無法理解蘋果是怎麼能操牛的(什麼你能理解?!那你牛逼。。)。對於編程語言也是同樣道理,在用parser得到合法的abstract syntax tree後,我們想要理解這段程序所表達的含義是什麼,也就是分析它的目的和行爲,而這就是PL中的semantics。再說白點,semantics是一種抽象,我們在後面會發現operational semantics基本是個精簡C語言,那我們爲什麼需要『C語言』來解釋C語言呢?這是有歷史原因的,C語言和羅馬城一樣不是一下子就有的。在C之前還是彙編的時代,那時候的彙編爲了適應底層的硬件實現,還帶了許多諸如出入程序棧,在寄存器之間移動這樣的底層實現細節。C語言抽象了這些細節們解放了程序員。operational semantics也是同理,它抽象了語言的瑣屑和實現細節(無論對象是高級語言還是彙編),類似於高級語言,用來解釋程序是如何運行的。舉個例子,在C代碼中我們寫的a + b是C的合法句法,它代表的意義即a 加上 b, 也就是說翻譯過來同樣是a + b,。但這倆a + b完全是倆碼事了,後者翻譯自前者,是前者的抽象。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章