-
詞法分析
鎖定
- 中文名
- 詞法分析
- 領 域
- 編譯原理
- 本 質
- 按照語言的詞法規則識別各類單詞
目錄
詞法分析簡介
詞法分析(英語:lexical analysis)是計算機科學中將字符序列轉換為單詞(Token)序列的過程。進行詞法分析的程序或者函數叫作詞法分析器(Lexical analyzer,簡稱Lexer),也叫掃描器(Scanner)。詞法分析器一般以函數的形式存在,供語法分析器調用。
詞法分析階段是編譯過程的第一個階段,是編譯的基礎。這個階段的任務是從左到右一個字符一個字符地讀入源程序,即對構成源程序的字符流進行掃描然後根據構詞規則識別單詞(也稱單詞符號或符號)。詞法分析程序實現這個任務。詞法分析程序可以使用Lex等工具自動生成。
詞法分析編譯
編譯(compilation , compile) 1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。 2、用編譯程序產生目標程序的動作。 編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。 編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。
[2]
詞法分析詞法分析程序
詞法分析詞法分析程序的功能
詞法分析單詞
針對如下C語言表達式:
sum=3+2;將其單詞化後可以得到下表內容:
語素 | 單詞類型 |
sum | 標識符 |
= | 賦值操作符 |
3 | 數字 |
+ | 加法操作符 |
2 | 數字 |
; | 語句結束 |
詞法分析掃描器
詞法分析的第一階段即掃描器,通常基於有限狀態自動機。掃描器能夠識別其所能處理的單詞中可能包含的所有字符序列(單個這樣的字符序列即前面所説的“語素”)。例如“整數”單詞可以包含所有數字字符序列。很多情況下,根據第一個非空白字符便可以推導出該單詞的類型,於是便可逐個處理之後的字符,直到出現不屬於該類型單詞字符集中的字符(即最長一致原則)。
詞法分析詞法分析器的設計與實現
詞法分析輸入緩衝區
成對且對半互補的輸入緩衝區模式。
詞法分析兩個緩衝區的輸入模式
詞法分析單詞生成器
單詞生成器
單詞化(Tokenization)即將輸入字符串分割為單詞、進而將單詞進行分類的過程。生成的單詞隨後便被用來進行語法分析。
例如對於如下字符串: The quick brown fox jumps over the lazy dog
計算機並不知道這是以空格分隔的九個英語單詞,只知道這是普通的43個字符構成的字符串。可以通過一定的方法(這裏即使用空格作為分隔符)將語素(這裏即英語單詞)從輸入字符串中分割出來。分割後的結果用XML可以表示如下:
<sentence> <word>The</word>
<word>quick</word>
<word>brown</word>
<word>fox</word>
<word>jumps</word>
<word>over</word>
<word>the</word>
<word>lazy</word>
<word>dog</word></sentence>
然而,語素只是一類字符構成的字符串(字符序列),要構建單詞,語法分析器需要第二階段的評估器(Evaluator)。評估器根據語素中的字符序列生成一個“值”,這個“值”和語素的類型便構成了可以送入語法分析器的單詞。一些諸如括號的語素並沒有“值”,評估器函數便可以什麼都不返回。整數、標識符、字符串的評估器則要複雜的多。評估器有時會抑制語素,被抑制的語素(例如空白語素和註釋語素)隨後不會被送入語法分析器。
net_worth_future = (assets - liabilities);
在進行語法分析後可能生成以下單詞流(空格被抑制):
NAME "net_worth_future"EQUALS
OPEN_PARENTHESIS
NAME "assets"
MINUS
NAME "liabilities"
CLOSE_PARENTHESIS
SEMICOLON
儘管在某些情況下需要手工編寫詞法分析器,一般情況下詞法分析器都用自動化工具生成。
- 參考資料
-
- 1. 陳英,陳朔鷹.編譯原理:清華大學出版社,2009年
- 2. 編譯 .百度百科[引用日期2015-03-15]