用某種高級語言或彙編語言編寫的程序稱為源程序,源程序不能直接在計算機上執行。彙編語言源程序需要用一個彙編程序將其翻譯成目標程序後才能執行。高級語言源程序則需要對應的解釋程序或編譯程序對其進行翻譯,然後在機器上運行。解釋程序也稱為解釋器,它或者直接解釋執行源程序,或者將源程序翻譯成某種中間代碼後再加以執行;而編譯程序(編譯器)則是將源程序翻譯成目標語言程序,然後在計算機上運行目標程序。這兩種語言處理程序的根本區別是:在編譯方式下,機器上運行的是與源程序等價的目標程序,源程序和編譯程序都不再參與目標程序的執行過程:而在解釋方式下,解釋程序和源程序(或其某種等價表示)要參與到程序的運行過程中,運行程序的控制權在解釋程序,。簡單來説,在解釋方式下,翻譯源程序時不生成獨立的目標程序,而編譯器則將源程序翻譯成獨立保存的目標程序。
程序已經開始運行,説明編譯時無錯誤,因此不是語法錯誤和詞法錯誤,編譯時發現的語義錯誤稱為靜態的語義錯誤。運行時陷入死循環屬於動態語義錯誤。