在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    1657

    瀏覽量

    49981

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    什么樣的代碼會被編譯器優化

    現在的編譯器有多智能,可能你辛辛苦苦寫的代碼,在編譯器看來就是幾句廢話,直接被刪除掉。
    的頭像 發表于 01-16 16:38 ?533次閱讀

    Triton編譯器與GPU編程的結合應用

    Triton編譯器簡介 Triton編譯器是一種針對并行計算優化的編譯器,它能夠自動將高級語言代碼轉換為針對特定硬件優化的低級代碼。Triton編譯器的核心優勢在于其能夠識別并行模式,
    的頭像 發表于 12-25 09:13 ?769次閱讀

    Triton編譯器如何提升編程效率

    在現代軟件開發中,編譯器扮演著至關重要的角色。它們不僅將高級語言代碼轉換為機器可執行的代碼,還通過各種優化技術提升程序的性能。Triton 編譯器作為一種先進的編譯器,通過多種方式提升編程效率,使得
    的頭像 發表于 12-25 09:12 ?708次閱讀

    Triton編譯器在高性能計算中的應用

    高性能計算(High-Performance Computing,HPC)是現代科學研究和工程計算中不可或缺的一部分。隨著計算需求的不斷增長,對計算資源的要求也越來越高。Triton編譯器作為一種
    的頭像 發表于 12-25 09:11 ?890次閱讀

    Triton編譯器的優化技巧

    在現代計算環境中,編譯器的性能對于軟件的運行效率至關重要。Triton 編譯器作為一個先進的編譯器框架,提供了一系列的優化技術,以確保生成的代碼既高效又適應不同的硬件架構。 1. 指令
    的頭像 發表于 12-25 09:09 ?866次閱讀

    Triton編譯器的優勢與劣勢分析

    Triton編譯器作為一種新興的深度學習編譯器,具有一系列顯著的優勢,同時也存在一些潛在的劣勢。以下是對Triton編譯器優勢與劣勢的分析: 優勢 高效性能優化 : Triton編譯器
    的頭像 發表于 12-25 09:07 ?1094次閱讀

    Triton編譯器在機器學習中的應用

    1. Triton編譯器概述 Triton編譯器是NVIDIA Triton推理服務平臺的一部分,它負責將深度學習模型轉換為優化的格式,以便在NVIDIA GPU上高效運行。Triton編譯器
    的頭像 發表于 12-24 18:13 ?917次閱讀

    Triton編譯器支持的編程語言

    Triton編譯器支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯器通過Python接口提供了對Triton語言和編譯器的訪問,使得用戶可以在Python環境中
    的頭像 發表于 12-24 17:33 ?906次閱讀

    Triton編譯器與其他編譯器的比較

    Triton編譯器與其他編譯器的比較主要體現在以下幾個方面: 一、定位與目標 Triton編譯器 : 定位:專注于深度學習中最核心、最耗時的張量運算的優化。 目標:提供一個高度抽象、靈活、高效
    的頭像 發表于 12-24 17:25 ?925次閱讀

    Triton編譯器功能介紹 Triton編譯器使用教程

    Triton 是一個開源的編譯器前端,它支持多種編程語言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個可擴展和可定制的編譯器框架,允許開發者添加新的編程語言特性和優化技術
    的頭像 發表于 12-24 17:23 ?1581次閱讀

    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 ?1905次閱讀
    Keil<b class='flag-5'>編譯器</b>優化方法

    AI編譯器技術剖析

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

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

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

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

    近日,科技巨頭Meta在其X平臺上正式宣布推出了一款革命性的LLM編譯器,這一模型家族基于Meta Code Llama構建,并融合了先進的代碼優化和編譯器功能。LLM編譯器的推出,標志著Meta在人工智能領域的又一重大突破,將
    的頭像 發表于 06-29 17:54 ?1830次閱讀
    主站蜘蛛池模板: 午夜私人影院 | 日日夜夜狠狠 | 二十年等一人小说在线观看 | 午夜影院在线观看免费 | 久草视频在线免费看 | 乱说欲小说又粗又长 | 极品吹潮视频大喷潮tv | 网红和老师啪啪对白清晰 | 午夜看片网址 | 大喷水吹潮magnet | yy4080午夜理论一级毛片 | 午夜国产精品理论片久久影院 | 午夜影院免费 | 久久精品午夜 | 激情六月色 | 国产午夜视频在永久在线观看 | 免费视频现线观看 | 99精品在免费线视频 | 正在播放国产巨作 | 2022年国产精品久久久久 | 美女扒开尿口给男人桶爽视频 | 男人j进女人j的一进一出视频 | 五月综合色啪 | 手机在线看片福利盒子 | 色天天综合久久久久综合片 | 成年视频在线观看 | 毛片网站在线 | 狠狠操亚洲 | 婷婷综合久久 | free 欧美| 日本一区不卡在线观看 | 九色亚洲 | 国产夜夜操 | 国产一区二区三区夜色 | 亚色最新网址 | 碰免费人人人视频 | 男人j桶进女人免费视频 | 国产牛仔裤系列在线观看 | 香蕉视频在线免费播放 | 欧美seav在线 | 性欧美处|