簡介
在編譯語言中,語法錯誤一定只在編譯期時出現,編譯器要所有的語法都正確,才能正確編譯。不過解釋型語言中的語法錯誤可能要到運行期才會出現,而且不一定容易區分語法錯誤及語義錯誤。
早期8位家用電腦的用戶界面是BASIC解釋器,SYNTAX ERROR錯誤訊息常造成用戶的困擾,只要解釋器無法識別用戶的輸入,就會出現此一訊息。
若計算器中輸出不正確的算式,也會出現語法錯誤,例如算式中有左括弧但沒有右括弧、或是一個數字中有多個小數點等。
在Java語言中,以下的程式是正確的:
以下的程式不正確:
第二個程式理論上要顯示的是叫作Hello World的變數,而不是Hello World這個字,且Java語言的變數名稱中不可有空白,因此會出現語法錯誤。
編譯器會標示程式中有語法錯誤的行,可能也會有簡單的說明。
語義錯誤
在電腦程式設計中, 語義錯誤( Logic error)(又叫 邏輯錯誤)是程式錯誤的一種,這種錯誤會導致程式運行出錯,但還不至於崩潰。邏輯錯誤會產生意外的輸出或結果,但並不一定會立即被發現。
邏輯錯誤在編譯語言和解釋語言中都可能出現。與語法錯誤的程式不同的是,邏輯錯誤的程式從語法上來說是正確的一段程式,但其運行結果卻與預期不符。邏輯錯誤的唯一表現就是錯誤的運行結果。
在 C++ 語言中,邏輯錯誤是一種特殊的異常。
邏輯錯誤的原因可能是語句中出現了差錯(比如公式寫錯)、算法中的錯誤,甚至是選擇了錯誤的算法。此外還有一些其它原因,如類型轉換錯誤、變數作用域錯誤、遺漏的代碼段、對問題或需求的理解有誤等等。
解釋型語言
解釋型語言(英語:Interpreted language),是一種程式語言。這種類型的程式語言,會將代碼一句一句直接運行,不需要像編譯語言(Compiled language)一樣,經過編譯器先行編譯為機器碼,之後再運行。這種程式語言需要利用解釋器,在運行期,動態將代碼逐句解釋(interpret)為機器碼,或是已經預先編譯為機器碼的的子程式,之後再運行。
理論上,任何程式語言都可以是編譯式,或解釋型的。它們之間的區別,僅與程式的套用有關。許多程式語言同時採用編譯器與解釋器來實現,其中包括Lisp,Pascal,C,BASIC與Python。JAVA及C#採用混合方式,先將代碼編譯為bytecode,在運行時再進行解釋。