色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

解答編譯器是怎樣運行的

GReq_mcu168 ? 來源:碼農的荒島求生 ? 作者:碼農的荒島求生 ? 2021-03-09 15:20 ? 次閱讀

對于程序員來說編譯器是非常熟悉的,每天都在用,但是當你在點擊“Run”這個按鈕或者執行編譯命令時你知道編譯器是怎樣工作的嗎?

這篇文章就為你解答這個問題。

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

什么是編譯器?

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

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

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

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

假定我們有一段程序:

while (y < z) { int x = a + b; y += x;}

那么編譯器是怎樣把這一段程序人類認識的程序轉換為CPU認識的二進制機器指令呢?

提取出每一個單詞:詞法分析

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

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

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

T_While whileT_LeftParen (T_Identifier yT_Less

就這樣一個磁盤中保存的字符串源代碼文件就轉換為了一個個的token。

這些token想表達什么意思:語法分析

有了這些token之后編譯器就可以根據語言定義的語法恢復其原本的結構,怎么恢復呢?

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

語法樹是不是合理的:語義分析

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

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

根據語法樹生成中間代碼:代碼生成

語義分析之后接下來編譯器遍歷語法樹并用另一種形式來表示,用什么來表示呢?那就是中間代碼,intermediate representation code,簡稱IR code

上述語法樹可能就會表示為這樣的中間代碼:

Loop: x = a + b y = x + y _t1 = y < z if _t1 goto Loop

怎么樣,這實際上已經比較接近最后的機器指令了。

只不過這還不是最終形態。

中間代碼優化

在生成中間代碼后要對其進行優化,我們可以看到,實際上可以把x = a + b這行代碼放到循環外,因為每次循環都不會改變x的值,因此優化后就是這樣了:

x = a + bLoop: y = x + y _t1 = y < z if _t1 goto Loop

中間代碼優化后就可以生成機器指令了。

代碼生成

將上述優化后的中間代碼轉換為機器指令:

add $1, $2, $3Loop: add $4, $1, $4 slt $6, $1, $5 beq $6, loop

最終,編譯器將程序員認識的代碼轉換為了CPU認識的機器指令。

總結

注意這篇簡短的講解不希望給大家留下這樣的印象,那就是編譯器是很簡單的,恰恰相反,現代編譯器是非常智能并且極其復雜的,絕不是短短一篇文章就能講清楚的,能實現一個編譯器是困難的,實現一個好的編譯器更是難上加難。

本文的目的旨在以極簡的方式描述編譯器的工作原理,這樣你就不用把編譯器當做一個黑盒了,希望這篇文章能對你有所幫助。
編輯:lyn

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編譯器
    +關注

    關注

    1

    文章

    1623

    瀏覽量

    49108

原文標題:編譯器是如何工作的

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    HighTec C/C++編譯器支持Andes晶心科技RISC-V IP

    汽車編譯器解決方案領先供貨商HighTec EDV-Systeme GmbH宣布其針對汽車市場的高度優化C/C++編譯器支持Andes晶心科技的RISC-V IP。這項支持對汽車軟件開發人員來說是一
    的頭像 發表于 12-12 16:26 ?186次閱讀

    分享關于編譯器的科普

    源代碼分析工具和IDE集成。GCC被構建成一個單一的靜態編譯器,這使得它非常難以被作為API并集成到其他工具中。 GCC比Clang支
    的頭像 發表于 12-09 09:49 ?84次閱讀

    MSP430優化C/C++編譯器v21.6.0.LTS

    電子發燒友網站提供《MSP430優化C/C++編譯器v21.6.0.LTS.pdf》資料免費下載
    發表于 11-08 14:57 ?0次下載
    MSP430優化C/C++<b class='flag-5'>編譯器</b>v21.6.0.LTS

    ARM優化C/C++編譯器 v20.2.0.LTS

    電子發燒友網站提供《ARM優化C/C++編譯器 v20.2.0.LTS.pdf》資料免費下載
    發表于 11-07 10:46 ?0次下載
    ARM優化C/C++<b class='flag-5'>編譯器</b> v20.2.0.LTS

    TMS320C6000優化C/C++編譯器v8.3.x

    電子發燒友網站提供《TMS320C6000優化C/C++編譯器v8.3.x.pdf》資料免費下載
    發表于 11-01 09:35 ?0次下載
    TMS320C6000優化C/C++<b class='flag-5'>編譯器</b>v8.3.x

    C7000優化C/C++編譯器

    電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
    發表于 10-30 09:45 ?0次下載
    C7000優化C/C++<b class='flag-5'>編譯器</b>

    Keil編譯器優化方法

    我們都知道,代碼是可以通過編譯器優化的,有的時候,為了提高運行速度或者減少代碼尺寸,會開啟優化選項。
    的頭像 發表于 10-23 16:35 ?505次閱讀
    Keil<b class='flag-5'>編譯器</b>優化方法

    AI編譯器技術剖析

    隨著人工智能技術的飛速發展,AI編譯器作為一種新興的編譯技術逐漸進入人們的視野。AI編譯器不僅具備傳統編譯器的功能,如將高級語言編寫的源代碼轉換為機器可執行的代碼,還融入了人工智能技術
    的頭像 發表于 07-17 18:28 ?1616次閱讀

    人工智能編譯器與傳統編譯器的區別

    人工智能編譯器(AI編譯器)與傳統編譯器在多個方面存在顯著的差異。這些差異主要體現在設計目標、功能特性、優化策略、適用范圍以及技術復雜性等方面。以下是對兩者區別的詳細探討,旨在全面解析其內在差異。
    的頭像 發表于 07-17 18:19 ?1835次閱讀

    Meta發布基于Code Llama的LLM編譯器

    近日,科技巨頭Meta在其X平臺上正式宣布推出了一款革命性的LLM編譯器,這一模型家族基于Meta Code Llama構建,并融合了先進的代碼優化和編譯器功能。LLM編譯器的推出,標志著Meta在人工智能領域的又一重大突破,將
    的頭像 發表于 06-29 17:54 ?1490次閱讀

    SEGGER編譯器優化和安全技術介紹 支持最新C和C++語言

    代碼生成,SEGGER編譯器生成非常小的代碼,非常適合內存受限的環境,而不會犧牲執行速度。 2)?速度優化:在最高優化級別,SEGGER編譯器生成盡可能快的代碼,確保您的應用程序以峰值性能運行
    的頭像 發表于 06-04 15:31 ?1443次閱讀
    SEGGER<b class='flag-5'>編譯器</b>優化和安全技術介紹 支持最新C和C++語言

    STM8S207R8使用IAR編譯自己的程序的時候,超出64K編譯器報錯是怎么回事?

    。直接下載程序到64K這款IC,居然成功了。然后所有功能運行都還正常。 問:1.編譯器不認具體芯片的型號。這個核實過了。 2.編譯器編譯完成已經超過芯片自身的flash容量了,還有超出
    發表于 05-17 06:52

    C語言:嵌入式開發中的關鍵編譯器角色

    嵌入式程序開發跟硬件密切相關,需要使用C語言來讀寫底層寄存、存取數據、控制硬件等,C語言和硬件之間由編譯器來聯系,一些C標準不支持的硬件特性操作,由編譯器提供。
    發表于 04-26 14:53 ?610次閱讀
    C語言:嵌入式開發中的關鍵<b class='flag-5'>編譯器</b>角色

    QT開發學習筆記1(安裝交叉編譯器

    QT安裝交叉編譯器
    的頭像 發表于 02-18 10:02 ?926次閱讀
    QT開發學習筆記1(安裝交叉<b class='flag-5'>編譯器</b>)

    RL78系列的C編譯器包數據手冊

    電子發燒友網站提供《RL78系列的C編譯器包數據手冊.pdf》資料免費下載
    發表于 01-26 15:55 ?1次下載
    RL78系列的C<b class='flag-5'>編譯器</b>包數據手冊
    主站蜘蛛池模板: 边摸边吃奶边做下面视频| 91精品乱码一区二区三区| 亚洲2017天堂色无码| 亚洲AV无码国产精品色午夜情| 午夜剧场1000| 亚洲日本天堂在线| 最近的2019中文字幕国语HD | 欧美精品色视频| 日本高清片免费观看| 十分钟免费视频大全在线| 亚洲AV久久婷婷蜜臀无码不卡| 一区二区乱子伦在线播放| 最近最新的日本字幕MV| 成人精品视频在线观看| 国产女人乱人伦精品一区二区| 久久国产欧美| 欧美末成年videos在线| 双性精跪趴灌满h室友4p| 亚洲三级黄色| 99麻豆精品国产人妻无码| 国产福利视频第一导航| 精品午夜视频| 免费无码又爽又黄又刺激网站 | 稚嫩挤奶h调教h| MELODY在线播放无删减| 国产乱国产乱老熟300部视频 | 考试考90就可以晚上和老师C| 欧美无码专区| 亚洲大码熟女在线| 97免费在线视频| 国产成人精品免费视频大全可播放的 | 91传媒蜜桃香蕉在线观看| 俄罗斯美女啪啪| 狠狠色狠色综合曰曰| 免费在线a| 性感尼姑风流寺| 98国产精品人妻无码免费| 国产啪精品视频网免费| 嗯啊快停下我是你老师啊H | 亚洲女初尝黑人巨磁链接| 99青草青草久热精品视频|