軟考備考——程序語言
對于這部分內容,我在之前大部分接觸過,主要接觸的是文法分析方面的知識。
詞法分析(Lexical Analysis)
詞法分析是編譯器工作的第一個階段,也被稱為掃描(Scanning)或分詞(Tokenization)。在這個階段,編譯器會讀取源代碼的字符流,并將其分解為一個個有意義的符號或標記(Tokens)。這些標記是編譯器進一步處理的基本單位。
在C語言中,詞法分析器會識別出諸如關鍵字(如int, for, while等)、標識符(變量名、函數名等)、運算符(如+, -, *, /等)、數字字面量、字符串字面量、標點符號(如括號、分號等)等不同類型的標記。
例如,對于C語言的代碼片段int a = 5;,詞法分析器會將其分解為以下標記:int(關鍵字)、a(標識符)、=(賦值運算符)、5(整數字面量)和;(語句結束符)。
總結:關鍵字、標識符、賦值運算符、整數字面量、語句結束符
語法分析(Syntax Analysis)
語法分析是編譯器工作的第二個階段。在這個階段,編譯器會根據語言的語法規則(通常由上下文無關文法定義)將詞法分析器產生的標記組合成有意義的表達式和語句。這個過程通常通過構建一個抽象語法樹(Abstract Syntax Tree, AST)來實現。
在C語言中,語法分析器會檢查標記的排列是否符合C語言的語法規則。例如,它會檢查變量聲明、函數定義、控制流語句(如if語句、for循環等)和表達式等的結構是否正確。
對于上面的代碼片段int a = 5;,語法分析器會確認這是一個合法的變量聲明和初始化語句,并構建一個相應的AST節點。
語義分析(Semantic Analysis)
語義分析是編譯器工作的第三個階段。在這個階段,編譯器會檢查源代碼的語義是否正確,即檢查源代碼是否有意義。這包括類型檢查、變量和函數的作用域檢查、符號解析等。
在C語言中,語義分析器會確保變量和函數的類型正確,確保所有的函數調用都有正確的參數類型和數量,檢查變量是否在使用前已經聲明和初始化等。
對于上面的代碼片段int a = 5;,語義分析器會確認變量a的類型是int,并且它被賦值為一個整數5,這是合法的。

浙公網安備 33010602011771號