關于編譯的一些思路和猜想

一、編譯原理的難度

編譯原理特別復雜,研究的是高級語言如何翻譯成匯編語言的過程。


二、編譯過程中一些思路

(一)語義識別的作用
語義識別指的是把一些無關字符忽略,把一些變量名保存在一起,把用空格隔開的關鍵字單獨放一起。

例如:
從源代碼第一個字符開始遍歷,如果:
1、遇到 //開頭的字符,那么后面直到換行符之間的字符都是注釋,就可以忽略。

2、如果遇到一個字符,它的左邊是一行的開頭,或者是空格,那么保存起來,繼續讀取直到下一個空格或者特殊符(特殊符是各種括號,各種運算符),就把這一段字符集中保存在一起。

3、判斷第2步獲取的字符是變量名,還是關鍵字。

4、遇到運算符或者括號就保存起來,作為一個單位。

5、遇到語句結束符也單獨作為一個單位。


(二)語法判斷的思路
1、把從語義識別過程中得到的每個單位構造成一棵樹。

2、樹的根是每個重新開始的語義單位,例如 var、 for、while、int等等。

3、根節點的子節點是遍歷過程中出現的下一個語義單位。

4、持續第3步,直到語句結束符;的添加。

5、根據編程語言的設計規則,來判斷以上構造的語法樹是否合法。
也就是判斷每個節點是否允許出現該子節點,例如 for節點是否允許出現 int節點?不能。for節點一般子節點是 左花括號{節點。

語法判斷完成后,就能得出程序編碼是否有錯誤。


(三)把每個語法樹轉成匯編語言
1、把聲明和創建變量的代碼替換為 分配內存空間,把變量名和內存地址號保存起來。

2、如果是循環,就建立一個子程序,名字是唯一生成的,把循環體作為子程序的內容,循環驗證條件就轉換成匯編的判斷條件。

如果滿足就調用子程序,不滿足就結束子程序。

3、如果使用網絡讀寫、磁盤讀寫,就調用對應的主板中斷程序。

4、如果是一些運算,就用對應的匯編運算符來替代,把結果存入寄存器或者內存塊中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21824.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21824.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21824.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

重新ysyx

一、克隆倉庫 1.創建ssh key ssh-keygen -t rsa cd ~/.ssh ls 查看里面是否有id_rsa id_rsa.pub ssh-keygen -t rsa -C "xiantong15834753336outlook.com" cat id_rsa.pub***********查看里面的內容,復制到下圖中綠色的按鈕 git init ssh -T g…

spark3.0.1版本查詢Hbase數據庫例子

需求背景 現有需求,需要采用spark查詢hbase數據庫的數據同步到中間分析庫,記錄spark集成hbase的簡單例子代碼 import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.client.{ConnectionFactory, Scan} import org.apach…

Marin說PCB之Max parallel知多少?

今天是個陽光明媚,萬里烏云的好日子。小編我一如既往地到家打開電腦準備看騰訊視頻的五十公里桃花塢的第四季,在看到汪蘇瀧汪臺說650電臺要解散的時候小編我差點也哭了。650電臺之于桃花塢就像樂隊的鼓手一樣,都是一個團隊的靈感啊&#xff0…

CSS中的長度單位詳解

在CSS中,長度單位是定義元素尺寸、間距、邊距等的重要工具。不同的長度單位具有不同的特性和使用場景。 絕對長度單位 絕對長度單位在所有設備和瀏覽器中表示相同的長度。這些單位包括: 1.像素(px) 像素是最常用的長度單位。一…

C語言分支和循環(2)

我的相關博客: C語言的分支與循環(1) 1.switch語句 除了 if 語句外,C語?還提供了 switch 語句來實現分?結構。 switch 語句是?種特殊形式的 的 if...else 結構,?于判斷條件有多個結果的情況。它把多重 else if…

非質量成本總結

非質量成本 非質量成本 定義 舉例 固定成本 不隨生產量或工作量變動而變動的成本 辦公室租賃費 可變成本 隨著生產量或工作變動而變動的成本 材料費 直接成本 可以直接計入某項目的成本 工人工資 間接成本 不能直接計入某項目而需要再幾個項目之間或在項目與職能部…

Linux基本指令3

Linux基本指令3 目錄 Linux基本指令3 一、Linux文件系統管理 二、Linux進程與服務管理

億發:制造型企業信息化規劃——從破冰到全面落地

在制造型企業中,信息化規劃的落地是一個復雜而關鍵的過程。盡管規劃和藍圖可能已經制定完畢,但如何成功地實施信息化才是關鍵所在。本文將詳細介紹制造型企業信息化規劃的落地過程,通過三個周期逐步推進,最終實現信息化與自動化的…

深度學習知識與心得

目錄 深度學習簡介 傳統機器學習 深度學習發展 感知機 前饋神經網絡 前饋神經網絡(BP網絡) 深度學習框架講解 深度學習框架 TensorFlow 一個簡單的線性函數擬合過程 卷積神經網絡CNN(計算機視覺) 自然語言處理NLP Wo…

OpenAI助手API接入-問答對自動生成

支持GPT-3.5-Turbo, GPT-4o, GPT-4-Turbo import json import openai from pathlib import Path import os client openai.OpenAI(base_urlbase_url, api_keyapi_key) file client.files.create( fileopen("H3.pdf", "rb"), purposeassistants ) …

HTTP 的三次握手

????? HTTP 的三次握手是指在建立 TCP 連接時,客戶端和服務器之間進行的三步握手過程。這個過程確保了雙方都能夠互相通信,并且同步了彼此的序列號和確認號。 概念: 第一次握手:客戶端發送一個 SYN(同步…

2.1數據的表示和運算--進位制

2.數據的表示和運算 2.1進位制 🔺問題:計算機采用二進制有什么優點? 答: 1.制造兩個穩態的物理器件較容易。 2.二進制的運算規則簡單。 3.便于用邏輯門電路實現運算。 4.二進制的0和1正好對應邏輯值真和假。 🔺…

成功解決“ModuleNotFoundError: No Module Named ‘utils’”錯誤的全面指南

成功解決“ModuleNotFoundError: No Module Named ‘utils’”錯誤的全面指南 在Python編程中,遇到ModuleNotFoundError: No Module Named utils這樣的錯誤通常意味著Python解釋器無法找到名為utils的模塊。這可能是由于多種原因造成的,比如模塊確實不存…

念念不忘,必有回響 的 echo

念念不忘,必有回響 的 echo 念念不忘,必有回響 的 echo幾個示例更多信息 念念不忘,必有回響 的 echo echo命令用于在終端設備上輸出字符串或變量的值,類似于Python的print和C語言的printf,是Linux系統中最常用的命令…

【GIC400】——PLIC,NVIC 和 GIC 中斷對比

文章目錄 PLIC,NVIC 和 GIC 中斷對比中斷向量表PLIC中斷向量表中斷使能中斷服務函數NVIC中斷向量表中斷使能中斷服務函數GIC中斷向量表系列文章 【ARMv7-A】——異常與中斷 【ARMv7-A】——異常中斷處理概述

深度學習筆記:0.cuda安裝,成功

B站上說:cs上騙子太多。文章太久,我深以為然。用了一天。才裝好。其實很簡單。 CUDA安裝教程(超詳細)-CSDN博客文章瀏覽閱讀1w次,點贊5次,收藏56次。windows10 版本安裝 CUDA ,首先需要下載兩個…

AI技術的演進與未來

隨著科技的不斷進步,人工智能(AI)技術已經成為引領時代發展的重要力量。從最初的模糊概念到如今的具體應用,wre98.cnAI技術已經滲透到我們生活的方方面面,并不斷拓展其邊界。本文將探討AI技術的演進歷程、當前應用領域…

【并發程序設計】總篇集(八萬字)

11_Concurrent_Programing 1.進程概念 在Linux中,進程是操作系統分配資源和調度運行的基本單位。 Linux中的進程有以下用處: 提高CPU利用率:通過進程的并發執行,可以讓多個程序同時利用計算機的資源,這樣每個用戶都…

Springboot與mongodb集成及聚合查詢

Spring Boot 與 MongoDB 的集成為開發者提供了一種簡便的方式來構建高性能、基于文檔的數據驅動應用程序。MongoDB 是一個非關系型數據庫(NoSQL),它使用 JSON 格式的文檔進行數據存儲,非常適合處理大量的、半結構化的數據。而 Spr…

mybatisplus 字段存的是json 在查詢的時候怎么映射成對象

數據庫交互對象 TableName(value "表名", autoResultMap true)TableField(typeHandler JacksonTypeHandler.class, value "user_info")private User user;autoResultMap 是一個 MyBatis-Plus 中的注解屬性,用于控制是否自動生成結果映射。…