導航:首頁 > 源碼編譯 > 編譯器裡面怎麼選中一個詞

編譯器裡面怎麼選中一個詞

發布時間:2024-01-17 14:01:25

1. 編譯器的工作分為哪幾個階段

編譯器就是一個普通程序,沒什麼大不了的
什麼是編譯器?

編譯器是一個將高級語言翻譯為低級語言的程序。

首先我們一定要意識到編譯器就是一個普通程序,沒什麼大不了的。

在沒有弄明白編譯器如何工作之前你可以簡單的把編譯器當做一個黑盒子,其作用就是輸入一個文本文件輸出一個二進制文件。

基本上編譯器經過了以下幾個階段,等等,這句話教科書上也有,但是我相信很多同學其實並沒有真正理解這幾個步驟到底在說些什麼,為了讓你徹底理解這幾個步驟,我們用一個簡單的例子來講解。

假定我們有一段程序:

while (y < z) {
int x = a + b;
y += x;
}
那麼編譯器是怎樣把這一段程序人類認識的程序轉換為CPU認識的二進制機器指令呢?

提取出每一個單詞:詞法分析
首先編譯器要把源代碼中的每個「單詞」提取出來,在編譯技術中「單詞」被稱為token。其實不只是每個單詞被稱為一個token,除去單詞之外的比如左括弧、右括弧、賦值操作符等都被稱為token。

從源代碼中提取出token的過程就被稱為詞法分析,Lexical Analysis。

經過一遍詞法分析,編譯器得到了以下token:

T_While while
T_LeftParen (
T_Identifier y
T_Less <
T_Identifier z
T_RightParen )
T_OpenBrace {
T_Int int
T_Identifier x
T_Assign =
T_Identifier a
T_Plus +
T_Identifier b
T_Semicolon ;
T_Identifier y
T_PlusAssign +=
T_Identifier x
T_Semicolon ;
T_CloseBrace }
就這樣一個磁碟中保存的字元串源代碼文件就轉換為了一個個的token。

這些token想表達什麼意思:語法分析
有了這些token之後編譯器就可以根據語言定義的語法恢復其原本的結構,怎麼恢復呢?

原來,編譯器在掃描出各個token後根據規則將其用樹的形式表示出來,這顆樹就被稱為語法樹。

語法樹是不是合理的:語義分析
有了語法樹後我們還要檢查這棵樹是不是合法的,比如我們不能把一個整數和一個字元串相加、比較符左右兩邊的數據類型要相同,等等。

這一步通過後就證明了程序合法,不會有編譯錯誤。

2. 編譯詳細資料大全

編譯(compilation , compile) 1、利用編譯程式從源語言編寫的源程式產生目標程式的過程。 2、用編譯程式產生目標程式的動作。 編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程式把人們熟悉兆猜吵的語言換成2進制的。 編譯程式把一個兆晌源程式翻譯成目標程式的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼最佳化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程式分析,分析過程中發現有語法錯誤,給出提示信息。

編譯語言是一種以編譯器來實現的程式語言。它不像直譯語言一樣,由解釋器將代碼一句一句運行,而是以編譯器,先將代碼編譯為機器碼,再加以運行。理論上,任何程式語言都可以是編譯式,或直譯式的。它們之間的區別,僅與程式的套用有關。

基本介紹

編譯程式,詞法分析,語法分析,中間代碼,代碼最佳化,目標代碼,表格管理,出錯處理,

編譯程式

將某一種程式設計語言寫的程式翻譯成等價的另一種語言的程式的程式, 稱之為編譯程式(compiler) .

詞法分析

詞法分析的任務是對由字元組成的單詞進行處理,從左至右逐個字元地對源程式進行掃描,產生一個個的單詞符號,把作為字元串的源程式改造成為單詞符號串的中間程式。執行詞法分析的程式稱為詞法分析程式或掃描器。 源程式中的單詞符號經掃描器分析,一般產生二元式:單詞種別;單詞自身的值。單詞種別通常用整數編碼,如果一個種別只含一個單詞符號,那麼對這個單詞符號,種別編碼就完全代表它自身的值了。若一個種別含有許多個單詞符號,那麼,對於它的每個單詞符號族侍,除了給出種別編碼以外,還應給出自身的值。 詞法分析器一般來說有兩種方法構造:手工構造和自動生成。手工構造可使用狀態圖進行工作,自動生成使用確定的有限自動機來實現。

語法分析

編譯程式的語法分析器以單詞符號作為輸入,分析單詞符號串是否形成符合語法規則的語法單位,如表達式、賦值、循環等,最後看是否構成一個符合要求的程式,按該語言使用的語法規則分析檢查每條語句是否有正確的邏輯結構,程式是最終的一個語法單位。編譯程式的語法規則可用上下文無關文法來刻畫。 語法分析的方法分為兩種:自上而下分析法和自下而上分析法。自上而下就是從文法的開始符號出發,向下推導,推出句子。而自下而上分析法採用的是移進歸約法,基本思想是:用一個暫存符號的先進後出棧,把輸入符號一個一個地移進棧里,當棧頂形成某個產生式的一個候選式時,即把棧頂的這一部分歸約成該產生式的左鄰符號。

中間代碼

中間代碼是源程式的一種內部表示,或稱中間語言。中間代碼的作用是可使編譯程式的結構在邏輯上更為簡單明確,特別是可使目標代碼的最佳化比較容易實現中間代碼,即為中間語言程式,中間語言的復雜性介於源程式語言和機器語言之間。中間語言有多種形式,常見的有逆波蘭記號、四元式、三元式和樹。

代碼最佳化

代碼最佳化是指對程式進行多種等價變換,使得從變換後的程式出發,能生成更有效的目標代碼。所謂等價,是指不改變程式的運行結果。所謂有效,主要指目標代碼運行時間較短,以及佔用的存儲空間較小。這種變換稱為最佳化。 有兩類最佳化:一類是對語法分析後的中間代碼進行最佳化,它不依賴於具體的計算機;另一類是在生成目標代碼時進行的,它在很大程度上依賴於具體的計算機。對於前一類最佳化,根據它所涉及的程式范圍可分為局部最佳化、循環最佳化和全局最佳化三個不同的級別。

目標代碼

目標代碼生成是編譯的最後一個階段。目標代碼生成器把語法分析後或最佳化後的中間代碼變換成目標代碼。目標代碼有三種形式: ① 可以立即執行的機器語言代碼,所有地址都重定位; ② 待裝配的機器語言模組,當需要執行時,由連線裝入程式把它們和某些運行程式連線起來,轉換成能執行的機器語言代碼; ③ 匯編語言代碼,須經過匯編程式匯編後,成為可執行的機器語言代碼。 目標代碼生成階段應考慮直接影響到目標代碼速度的三個問題:一是如何生成較短的目標代碼;二是如何充分利用計算機中的暫存器,減少目標代碼訪問存儲單元的次數;三是如何充分利用計算機指令系統的特點,以提高目標代碼的質量。

表格管理

編譯過程中源程式的各種信息被保留在種種不同的表格,編譯各階段的工作都涉及到構造、查找、或更新有關的表格。 編譯程式的公共輔助部分。對源程式中的各種量進行管理,登記在相應的表格。編譯程式處理時通過查表得到所需的信息。

出錯處理

如果編譯過程中發現源程式有錯誤,編譯程式應報告錯誤的性質和錯誤的發生的地點,並且將錯誤所造成的影響限制在盡可能小的范圍內,使得源程式的其餘部分能繼續被編譯下去,有些編譯程式還能自動糾正錯誤,這些工作由錯誤處理程式完成。 需要注意的是,一般上編譯器只做語法檢查和最簡單的語義檢查,而不檢查程式的邏輯。

3. tc編譯器怎麼用啊,有知道的沒

1.主菜單

主菜單在Turbo C 2.0主屏幕頂上一行, 顯示下列內容:File Edit Run Compile Project Options Debug Break/watch

除Edit外, 其它各項均有子菜單, 只要用Alt加上某項中第一個字母(即大寫字母), 就可進入該項的子菜單中。

File (文件)菜單 ----按Alt+F可進入File菜單, 該菜單包括以下內容:

.Load (載入)
裝入一個文件, 可用類似DOS的通配符(如*.C)來進行列表選擇。也可裝入其它擴展名的文件, 只要給出文件名(或只給路徑)即可。該項的熱鍵為F3, 即只要在主菜單中按F3即可進入該項, 而不需要先進入File菜單再選此項。

.Pick (選擇)
將最近裝入編輯窗口的8個文件列成一個表讓用戶選擇, 選擇後將該程序裝入編輯區, 並將游標置在上次修改過的地方。其熱健為Alt-F3。

.New (新文件)
說明文件是新的, 預設文件名為NONAME.C, 存檔時可改名。

.Save (存檔)
將編輯區中的文件存檔, 若文件名是NONAME.C時, 將詢問是否更改文件名, 其熱鍵為F2。

.Write to (存檔)
可由用戶給出文件名將編輯區中的文件存檔, 若該文件已存在, 則詢問要不要覆蓋。

.Directory (目錄)
顯示目錄及目錄中的文件, 並可由用戶選擇。

.Change dir (改變目錄)
顯示當前目錄, 用戶可以改變顯示的目錄。

.Os shell (暫時退出)
暫時退出Turbo C 2.0到DOS提示符下, 此時可以運行DOS 命令, 若想回到Turbo C 2.0中, 只要在DOS狀態下鍵入EXIT即可。

.Quit (退出)
退出Turbo C 2.0, 返回到DOS操作系統中, 其熱鍵為Alt+X。

說明: 以上各項可用游標鍵移動色棒進行選擇, 回車則執行。也可用每一項的第一個大寫字母直接選擇。若要退到主菜單或從它的下一級菜單列表框退回均可用Esc鍵,Turbo C 2.0所有菜單均採用這種方法進行操作, 以下不再說明。

Edit (編輯)菜單---按Alt+E可進入編輯菜單, 若再回車, 則游標出現在編輯窗口, 此時用戶可以進行文本編輯。編輯方法基本與wordstar相同,

可用F1鍵獲得有關編輯方法的幫助信息。與編輯有關的功能鍵如下:
F1 獲得Turbo C 2.0編輯命令的幫助信息
F5 擴大編輯窗口到整個屏幕
F6 在編輯窗口與信息窗口之間進行切換
F10 從編輯窗口轉到主菜單

編輯命令簡介:
PageUp 向前翻頁
PageDn 向後翻頁
Home 將游標移到所在行的開始
End 將游標移到所在行的結尾
Ctrl+Y 刪除游標所在的一行
Ctrl+T 刪除游標所在處的一個詞
Ctrl+KB 設置塊開始
Ctrl+KK 設置塊結尾
Ctrl+KV 塊移動
Ctrl+KC 塊拷貝
Ctrl+KY 塊刪除
Ctrl+KR 讀文件
Ctrl+KW 存文件
Ctrl+KP 塊文件列印
Ctrl+F1 如果游標所在處為Turbo C 2.0庫函數, 則獲得有關該函數的幫助信息
Ctrl+Q[ 查找Turbo C 2.0雙界符的後匹配符
Ctrl+Q] 查找Turbo C 2.0雙界符的前匹配符
說明:
a. Turbo C 2.0的雙界符包括以下幾種符號:
花括符 { }
尖括符 < >
圓括符 ( )
方括符 [ ]
注釋符 /* */
雙引號 "
單引號 '
Turbo C 2.0在編輯文件時還有一種功能, 就是能夠自動縮進, 即游標定位和上一個非空字元對齊。在編輯窗口中, Ctrl+OL為自動縮進開關的控制鍵。

Run (運行)菜單---按Alt+R可進入Run菜單, 該菜單有以下各項:

.Run (運行程序)
運行由Project/Project name項指定的文件名或當前編輯區的文件。如果對上次編譯後的源代碼未做過修改, 則直接運行到下一個斷點(沒有斷點則運行到結束)。否則先進行編譯、連接後才運行, 其熱鍵為Ctrl+F9。

.Program reset (程序重啟)
中止當前的調試, 釋放分給程序的空間, 其熱鍵為Ctrl+F2。

.Go to cursor (運行到游標處)
調試程序時使用, 選擇該項可使程序運行到游標所在行。游標所在行必須為一條可執行語句, 否則提示錯誤。其熱鍵為F4。

.Trace into (跟蹤進入)
在執行一條調用其它用戶定義的子函數時, 若用Trace into項, 則執行長條將跟蹤到該子函數內部去執行, 其熱鍵為F7。

.Step over (單步執行)
執行當前函數的下一條語句, 即使用戶函數調用, 執行長條也不會跟蹤進函數內部, 其熱鍵為F8。

.User screen (用戶屏幕)
顯示程序運行時在屏幕上顯示的結果。其熱鍵為Alt+F5。

Compile (編譯)菜單---按Alt+C可進入Compile菜單, 該菜單有以下幾個內容:

.Compile to OBJ (編譯生成目標碼)
將一個C源文件編譯生成.OBJ目標文件, 同時顯示生成的文件名。其熱鍵為Alt+F9。

.Make EXE file (生成執行文件)
此命令生成一個.EXE的文件, 並顯示生成的.EXE文件名。其中.EXE文件名是下面幾項之一。
a. 由Project/Project name說明的項目文件名。
b. 若沒有項目文件名, 則由Primary C file說明的源文件。
c. 若以上兩項都沒有文件名, 則為當前窗口的文件名。

.Link EXE file (連接生成執行文件)
把當前.OBJ文件及庫文件連接在一起生成.EXE文件。

.Build all (建立所有文件)
重新編譯項目里的所有文件, 並進行裝配生成.EXE文件。該命令不作過時檢查(上面的幾條命令要作過時檢查, 即如果目前項目里源文件的日期和時間與目標文件相同或更早, 則拒絕對源文件進行編譯)。

.Primary C file (主C文件)
當在該項中指定了主文件後, 在以後的編譯中, 如沒有項目文件名則編譯此項中規定的主C文件, 如果編譯中有錯誤, 則將此文件調入編輯窗口, 不管目前窗口中是不是主C文件。

.Get info
獲得有關當前路徑、源文件名、源文件位元組大小、編譯中的錯誤數目、可用空間等信息。

Project (項目)菜單---按Alt+P可進入Project菜單, 該菜單包括以下內容:

.Project name (項目名)
項目名具有.PRJ的擴展名, 其中包括將要編譯、連接的文件名。例如有一個程序由file1.c, file2.c, file3.c組成, 要將這3個文件編譯裝配成一個file.exe的執行文件, 可以先建立一個file.prj的項目文件, 其內容如下:
file1.c file2.c file3.c
此時將file.prj放入Project name項中, 以後進行編譯時將自動對項目文件中規定的三個源文件分別進行編譯。然後連接成file.exe文件。如果其中有些文件已經編譯成.OBJ文件, 而又沒有修改過, 可直接寫上.OBJ擴 展名。此時將不再編譯而只進行連接。例如: file1.obj file2.c file3.c 將不對file1.c進行編譯, 而直接連接。 說明: 當項目文件中的每個文件無擴展名時, 均按源文件對待, 另外, 其中的文件也可以是庫文件, 但必須寫上擴展名.LIB。

.Break make on (中止編譯)
由用戶選擇是否在有Warining(警告)、Errors(錯誤)、Fatal Errors( 致命錯誤)時或Link(連接)之前退出Make編譯。

.Auto dependencies (自動依賴)
當開關置為on, 編譯時將檢查源文件與對應的.OBJ文件日期和時間, 否則不進行檢查。

.Clear project (清除項目文件)
清除Project/Project name中的項目文件名。

.Remove messages (刪除信息)
把錯誤信息從信息窗口中清除掉。

Options (選擇菜單) ---按Alt+O可進入Options菜單, 該菜單對初學者來說要謹慎使用。

.Compiler (編譯器)
本項選擇又有許多子菜單, 可以讓用戶選擇硬體配置、存儲模型、調試技術、代碼優化、對話信息控制和宏定義。這些子菜單如下: Model 共有Tiny, small, medium, compact, large, huge 六種不同模式可由同戶選擇。
Define 打開一個宏定義框, 同戶可輸入宏定義。多重定義可同分號, 賦值可用等號。
Code generation 它又有許多任選項, 這些任選項告訴編譯器產生什麼樣的目標代碼。
Calling convention 可選擇C或Pascal方式傳遞參數。
Instruction set 可選擇8088/8086或80186/80286指令系列。
Floating point 可選擇模擬浮點、數學協處理器浮點或無浮點運算。
Default char type 規定char的類型。
Alignonent 規定地址對准原則。
Merge plicate strings 作優化用, 將重復的字元串合並在一起。
Standard stack frame 產生一個標準的棧結構。
Test stack overflow 產生一段程序運行時檢測堆棧溢出的代碼。
Line number 在.OBJ文件中放進行號以供調試時用。
OBJ debug information 在.OBJ文件中產生調試信息。
Optimization
Optimize for 選擇是對程序小型化還是對程序速度進行優化處理。
Use register variable 用來選擇是否允許使用寄存器變數。
Register optimization 盡可能使用寄存器變數以減少過多的取數操作。
Jump optimization 通過去除多餘的跳轉和調整循環與開關語句的辦法, 壓縮代碼。
Source
Indentifier length 說明標識符有效字元的個數, 默認為32個。
Nested comments 是否允許嵌套注釋。
ANSI keywords only 是只允許ANSI關鍵字還是也允許Turbo C 2.0關鍵字
Error
Error stop after 多少個錯誤時停止編譯, 默認為25個。
Warning stop after 多少個警告錯誤時停止編譯, 默認為100個。
Display warning
Portability warning 移植性警告錯誤。
ANSI Violations 侵犯了ANSI關鍵字的警告錯誤。
Common error 常見的警告錯誤。
Less common error 少見的警告錯誤。
Names 用於改變段(segment)、 組( group) 和類(class)的名字, 默認值為CODE,DATA,BSS。

.Linker (連接器)
本菜單設置有關連接的選擇項, 它有以下內容:
Map file menu 選擇是否產生.MAP文件。
Initialize segments 是否在連接時初始化沒有初始化的段。
Devault libraries 是否在連接其它編譯程序產生的目標文件時去尋找其預設庫。
Graphics library 是否連接graphics庫中的函數。
Warn plicate symbols 當有重復符號時產生警告信息。
Stack warinig 是否讓連接程序產生No stack的警告信息。
Case-sensitive link 是否區分大、小寫字。

.Environment (環境)
本菜單規定是否對某些文件自動存檔及製表鍵和屏幕大小的設置
Message tracking

Current file 跟蹤在編輯窗口中的文件錯誤。

All files 跟蹤所有文件錯誤。

Off 不跟蹤。

Keep message 編譯前是否清除Message窗口中的信息。

Config auto save 選on時, 在Run, Shell或退出集成開發環境之前,如果Turbo C 2.0的配置被改過, 則所做 的改動將存入配置文件中。選off時不存。

Edit auto save 是否在Run或Shell之前, 自動存儲編輯的源文件。

Backup file 是否在源文件存檔時產生後備文件(.BAK文件)。

Tab size 設置製表鍵大小, 默認為8。

Zoomed windows 將現行活動窗口放大到整個屏幕, 其熱鍵為F5。

Screen size 設置屏幕文本大小。

.Directories (路徑)
規定編譯、連接所需文件的路徑, 有下列各項:
Include directories 包含文件的路徑, 多個子目錄用";"分開。
Library directories 庫文件路徑, 多個子目錄用";"分開。
Output directoried 輸出文件(.OBJ, .EXE, .MAP文件)的目錄。
Turbo C directoried Turbo C 所在的目錄。
Pick file name 定義載入的pick文件名, 如不定義則從current pick file中取。

.Arguments (命令行參數)
允許用戶使用命令行參數。

.Save options (存儲配置)
保存所有選擇的編譯、連接、調試和項目到配置文件中, 預設的配置文件為TCCONFIG.TC。
.Retrive options 裝入一個配置文件到TC中, TC將使用該文件的選擇項。

Debug (調試)菜單

---按Alt+D可選擇Debug菜單, 該菜單主要用於查錯, 它包括以下內容:

.Evaluate

.Expression 要計算結果的表達式。

.Result 顯示表達式的計算結果。

.New value 賦給新值。

.Call stack 該項不可接觸。而在Turbo C debuger 時用於檢查堆棧情況。

.Find function 在運行Turbo C debugger時用於顯示規定的函數。

.Refresh display 如果編輯窗口偶然被用戶窗口重寫了可用此恢復編輯窗口的內容。

Break/watch (斷點及監視表達式)

---按Alt+B可進入Break/watch菜單, 該菜單有以下內容:

. Add watch 向監視窗口插入一監視表達式。

.Delete watch 從監視窗口中刪除當前的監視表達式。

.Edit watch 在監視窗口中編輯一個監視表達式。

.Remove all watches 從監視窗口中刪除所有的監視表達式。

.Toggle breakpoint 對游標所在的行設置或清除斷點。

. Clear all breakpoints 清除所有斷點。

. View next breakpoint 將游標移動到下一個斷點處。參考資料:http://ChinaGPA.com GPA之家&ChinaGPA.com GPA工作室 Andy

4. 編譯器的邏輯階段可以怎樣分組

編譯器的邏輯階段通常可以分為以下幾個部分:

5. 使用vs2019如何只編譯一個c++文件

比如說有cpp01 和cpp02 兩個文件,你只想編譯cpp02
1、最簡單的方法
將cpp01文件里的int main() 改成 int main01()這種,編譯器就會只執行 02裡面的main()函數了
2、將cpp01全選,注釋掉
3、在文件上右鍵-屬性--生成中排除

閱讀全文

與編譯器裡面怎麼選中一個詞相關的資料

熱點內容
cad圖紙不能跨文件夾粘貼 瀏覽:252
學生雲伺服器主機 瀏覽:883
單片機狀態周期 瀏覽:620
lua中的android 瀏覽:441
加密貴還是植發貴 瀏覽:662
陽光壓縮機繼電器 瀏覽:969
修改阿里雲伺服器密碼 瀏覽:815
lk4102加密晶元 瀏覽:588
怎麼更改app店面 瀏覽:489
設備部門如何做好伺服器 瀏覽:849
androido下載 瀏覽:478
神奇高量戰法副圖源碼 瀏覽:830
匯編語言設計凱撒密碼加密器 瀏覽:392
主次梁加密是加在哪裡 瀏覽:664
模板匹配演算法matlab 瀏覽:825
外地程序員去北京 瀏覽:24
安卓機換蘋果12如何轉移數據 瀏覽:420
互聯網ntp伺服器地址及埠 瀏覽:613
pdf到word轉換器 瀏覽:269
飛行解壓素材 瀏覽:498