在編程語言(如C,C++)中,語法和語義有什麼區別?編程語言的語法和語義有什麼區別?
回答
語法大約是結構或語言的語法。它回答了這個問題:我如何構建一個有效的句子?所有語言,甚至英語和其他人類(又稱「自然」)語言都有語法,即定義句子是否正確構建的規則。
下面是一些C語言的語法規則:
- 用分號
- 圍成一個IF語句的條件表達式括號內
- 組多個語句成單個語句通過封入單獨的語句在大括號中
- 數據類型和變量必須在第一個可執行語句之前聲明(此功能已在C99.C99中刪除,而後者允許混合類型聲明)
語義是關於句子的含義。它回答了這個問題:這句話有效嗎?如果是這樣,那麼這個句子意味着什麼?例如:
x++; // increment
foo(xyz, --b, &qrs); // call foo
是句法上有效的C語句。但他們是什麼意思?嘗試將這些語句轉換爲可執行的指令序列甚至有效嗎?這些問題是語義學的核心。
考慮第一條語句中的++運算符。首先,這是否是有效的嘗試?
- 如果x是一個浮點數據類型,這種說法是沒有意義的(根據C語言的規則),因此它是一個錯誤即使該語句是語法正確的。
- 如果x是一個指針,指向一些數據類型,語句的意思是「到值在地址x在地址x加的sizeof(一些數據類型)並將結果存儲到位置」。
- 如果x是一個標量,則語句的含義是「將地址x中的值加1並將結果存儲到地址x處的地址」。
最後,請注意,某些語義無法在編譯時確定,因此必須在運行時進行評估。在++運算符的例子中,如果x已經處於其數據類型的最大值,當你嘗試給它加1時會發生什麼?另一個例子:如果你的程序試圖取消引用其值爲NULL的指針,會發生什麼?
總之,語法只關注自身是否該語句對該語言的語法有效。語義是關於句子是否具有有效含義。
語義是您的代碼意味着什麼 - 您可能會在僞代碼中描述。語法是實際結構 - 從變量名到分號的所有內容。
http://c2.com/cgi/wiki?SyntaxVsSemantics – thumbtackthief
語法指的是一種語言的結構,追蹤它的etymology如何結合在一起。
例如,您可能需要通過聲明類型,名稱和分號來將代碼放在一起,以便在語法上正確。
Type token;
另一方面,語義是關於意義。 編譯器或解釋器可能會抱怨語法錯誤。你的同事會抱怨語義。
是邏輯的語義同義嗎? –
@Talespin_Kit含義而不是結構:邏輯更像是一種抽象,例如P => Q等等或者!! P = P,但是當你添加語義時,事物可以有微妙的含義,如果P是「開心」,那麼!! P是「我不開心」!=「我是快樂「 – doctorlove
+1」編譯器或解釋器可能會抱怨語法錯誤,您的同事會抱怨語義。「 – JagsVG
維基百科有答案。閱讀syntax (programming languages) & semantics (computer science) wikipages。
或想想任何compiler或的工作。第一步是lexical analysis,其中令牌是通過將字符串分割成詞位然後parsing生成的,其構建一些abstract syntax tree(這是語法的表示)。接下來的步驟涉及轉換或評估這些AST(語義)。
另外,注意觀察,如果你定義的C的變體,每一個關鍵字轉化成它相當於法國(所以if
成爲si
,do
成爲faire
,else
成爲sinon
等等等等......),你肯定會改變的語法你的語言,但你不會改變太多的語義:法語-C編程不會更容易!
語法:它指語言的語法結構。如果您正在編寫c語言。你必須非常小心地使用數據類型,標記[它可以是文字或符號,如「printf()」。它有3個tokes,「printf,(,)」]。同樣,你必須非常小心,你如何使用函數,函數語法,函數聲明,定義,初始化和調用它。
雖然語義,它關係到邏輯或句子或語句的概念。如果你用概念或邏輯說出或寫出某些東西。那麼,你的語義錯誤。
語法是表達式,語句和程序單元,但語義的結構或形式是那些表達式,語句和程序單元的含義。 語義直接從語法。 語法是指特定編程語言指定的代碼的結構/形式,但是語義涉及分配給符號,字符和單詞的含義。
- 1. 編程語言和腳本語言有什麼區別?
- 2. 自然語言和編程語言在語法環境中有什麼區別?
- 3. Codeigniter系統/語言應用程序/語言有什麼區別?
- 4. Racket(lisp編程語言)中的[]和()括號有什麼區別?
- 5. 學習HTML和學習編程語言有什麼區別?
- 6. 語義標記和語義網有什麼區別?
- 7. 系統編程語言和應用程序編程語言之間的區別
- 8. 術語語言和語言實現有區別嗎?
- 9. 用於描述編程語言語法的術語是什麼?
- 10. 編程語言語法
- 11. 腳本與編程語言的區別
- 12. Windows:什麼編程語言?
- 13. 什麼編程語言?
- 14. 什麼編程語言有這種語法?
- 15. 標記,編碼,腳本,shell腳本和編程語言有什麼區別?
- 16. 下面的語法有什麼區別?
- 17. Stata編程語言沒有語法?
- 18. 這兩種語法有什麼區別?
- 19. ReactJs組件語法,有什麼區別?
- 20. 兩種EL語法有什麼區別?
- 21. 使用什麼語言編寫Go編程語言?
- 22. 語法錯誤和語義錯誤與邏輯錯誤有什麼區別?
- 23. document.write和return語句有什麼區別?
- 24. Oz編程語言中塊註釋的語法是什麼?
- 25. 什麼是語法如此的編程語言?
- 26. Postgres上的C和Posix語言環境有什麼區別?
- 27. Sql中的Callable語句和Prepared語句有什麼區別?
- 28. 識別編程語言
- 29. 編程語言的原語
- 30. Swift編程語言的語法
好的。如果'x'處於其數據的最大值並且向其添加了'1',則會導致一些奇怪的輸出('0'),這不是語義錯誤嗎? – haccks
考慮車輛里程錶 - 它有一系列相互關聯的輪子,每個輪子上印有數字0到9。最右邊的輪子旋轉最快;當它從9迴歸到零時,其左側的車輪前進一個。當此輪從9前進到0時,其左側前進,依此類推。 –
這是什麼意思? – haccks