三天沖刺《編譯原理》——筆記(一)

點關注不迷路喲。你的點贊、收藏,一鍵三連,是我持續更新的動力喲!!!

持續關注我~~~主頁,查看更多內容喲(希望你能在這里有所收獲🤭)。點關注,不迷路,哈哈哈!~~~

主頁:

一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?type=blog

目錄

注意事項

1-1

2-1

3-1

4-1 自上而下的語法分析方法

注意事項

1-1

  1. 編譯程序從源代碼到目標代碼,需要經過以下六個步驟:

    詞法分析、語法分析、語義分析、中間代碼生成、優化、目標代碼生成

  2. Java源代碼轉換為字節碼的過程是一個編譯過程。

  3. 編譯型語言

    編譯型語言在執行前需要通過編譯器將源代碼一次性翻譯成機器碼(或字節碼),然后直接運行生成的可執行文件。這類語言的執行效率較高,但編譯過程可能需要較長時間。常見的編譯型語言包括:

    • C:一種廣泛使用的系統編程語言,用于開發操作系統、嵌入式系統、游戲等。

    • C++:C 語言的擴展,支持面向對象編程,常用于高性能應用程序、游戲引擎和圖形處理。

    • Java:Java 源代碼被編譯成字節碼(.class 文件),然后由 Java 虛擬機(JVM)解釋執行。雖然 Java 通常被認為是解釋型語言,但現代 JVM 使用即時編譯(JIT)技術將熱點代碼編譯為機器碼,因此也具有接近編譯型語言的性能。

    • Pascal語言

    • Go:一種開源的編程語言,設計目標是兼具高性能和開發效率,常用于網絡服務、云計算和分布式系統。

    • Rust:注重內存安全和高性能的系統編程語言,適用于開發底層系統、網絡服務和游戲。

    解釋型語言

    解釋型語言在運行時通過解釋器逐行解釋并執行源代碼,無需預先編譯。這類語言的開發效率較高,代碼可以快速修改和測試,但執行速度通常較慢。常見的解釋型語言包括:

    • Python:一種高級、通用的腳本語言,廣泛用于數據科學、人工智能、Web 開發和自動化腳本。

    • JavaScript:主要用于 Web 前端開發,也可通過 Node.js 在服務器端運行,支持事件驅動和異步編程。

    • Basic語言

    • Ruby:一種動態、面向對象的腳本語言,以簡潔的語法和高生產力著稱,常用于 Web 開發(如 Ruby on Rails 框架)。

    • PHP:一種專門為 Web 開發設計的腳本語言,廣泛用于服務器端編程,支持多種數據庫和 Web 框架。

    • Perl:一種靈活的腳本語言,早期在 Web 開發和系統管理中廣泛使用,現在仍用于文本處理和自動化任務。

  4. 三階段的編譯程序比兩階段的編譯程序多了一個:匯編程序

    兩階段轉換:編譯(.exe文件)——運行

    三階段轉換:編譯(.obj文件)——匯編(.exe文件)——運行

  5. 單詞:是高級語言中有實在意義的最小語法單位

  6. 語法分析的方法有:推導和歸約

  7. 一遍掃描是以:語法分析為核心工作的

  8. Lex是可以自動生成詞法分析器。

  9. 最右推導最左推導最左歸約和最右歸約

  10. 語法規則?

  11. 中間代碼使用最為廣泛的是:四元式

2-1

def count_nodes(node):if node is None:return (0, 0)if node.left is None and node.right is None:return (1, 0)  # 葉子節點計數left_leaf, left_branch = count_nodes(node.left)right_leaf, right_branch = count_nodes(node.right)total_leaf = left_leaf + right_leaftotal_branch = 1 + left_branch + right_branch  # 當前節點是分支節點return (total_leaf, total_branch)

      A/   \B     C/ \     \D   E     F

葉子節點:D、E、F(3個) 分支節點:A、B、C(3個)

  1. 乘法原理:若完成一件事需分 n 步,每步分別有 m?, m?, ..., m?種方式,則總方式數為 (m? * m?* m?)。

    符號串計數:長度為 k 的符號串數量 = 字母表大小的 k 次方(如 A1 長度為 2 的串數為 262)。

    集合連接積:若集合 X 有 m 個元素,Y 有 n 個元素,則 XY 的元素數為 (m * n)。

  2. 如何數葉子節點和分支節點?

    在樹形數據結構中,準確統計葉子節點和分支節點是基本操作。以下是具體方法和步驟:

  3. 葉子節點識別標準:

    • 沒有任何子節點的節點
    • 終端節點(位于樹的最底層)
    • 示例:在二叉樹中,左右指針都為NULL的節點
  4. 分支節點識別標準:

    • 至少有一個子節點的節點
    • 非終端節點
    • 包括根節點(除非樹為空)
    • 示例:在二叉樹中,左指針或右指針至少一個不為NULL的節點
  5. 擴展一下→統計方法(遞歸實現示例):

  6. 應用場景:

    • 文件系統分析(統計文件夾和文件數量)
    • DOM樹遍歷(計算元素節點和文本節點)
    • 決策樹評估(查看最終決策點和判斷條件數量)
  7. 注意事項:

    • 對于空樹,兩者計數都為0
    • 單節點樹:1個葉子節點,0個分支節點
    • 不同樹結構(二叉樹、多叉樹)需要調整判斷條件
      可視化示例:
  8. 什么是句柄?

    答:句型中的最左簡單短語。注意:句柄是最左規約時要尋找的簡單短語。

    簡單短語(直接短語):經過一步推導得到,樹根的所有的孩子節點構成的

  9. 用高級語言編寫的程序經編譯后產生的程序叫:目標程序。用不同語言編寫的程序產生目標程序后,可用:連接程序連接在一起生成機器可執行的程序。在機器中真正執行的是:機器指令代碼

  10. 巴科斯-諾爾范式(即BNF)描述文法
    短語一棵語法樹中所有子樹生成的符號串就叫:短語
    直接短語(簡單短語)經過一步推導的短語
    句柄最左直接短語
  11. 0型文法短語文法圖靈機
    1型文法上下文有關文法線性界限自動機
    2型文法上下文無關文法下推自動機
    3型文法正規文法有限狀態自動機

    0型包括1,2,3型

    1型包括2,3型

    2型包括3型

  12. 一個語言的文法是:不唯一的。例如Chomsky文法就有:0,1,2,3總共四種文法

  13. LR (k) 文法是一類無歧義文法

  14. 怎么判斷是否為二義性文法?

  15. 文法中,產生式規則的左部就是非終結符號。(×)

    產生式左部的限制

    • 2 型和 3 型文法:左部必須是單個非終結符(如 A、S),因此題目中的說法對這兩類文法成立。

    • 0 型和 1 型文法:左部可以是包含非終結符的任意符號串(如 (AB → CD) 或 (BAC → BDC)),此時左部可能包含終結符(如 B、C),因此題目中的說法不成立。

  16. [ω]表示ω可出現③0或1次,{ω}表示ω可出現④n(n>0)次。

3-1

  1. 暫無

4-1 自上而下的語法分析方法

  1. 下推自動機(PDA),定義:PDA是一個七元組 M,M=(Q,∑,H,δ,q0,z0,F), 其中:

    Q——控制器的有限狀態集

    ∑——輸入字母表

    H——下推棧內字母表 δ——Q×(∑∪{ε})×H 到 Q×H*的有限子集映射

    q0∈Q——控制器的初始狀態 z0∈H——下推棧的棧初始符號

    F?Q——控制器的終態集

  2. 自上而下的語法分析思想是:從文法的:開始符號出發,反復使用不同產生式進行②推導,試圖構造出與輸入符號串相同的③_終結符串___。

  3. LL(1)文法的要求是:

    對文法中每一條形如A→X1|X2|…Xn的產生式,要求其滿足如下條件: ① FIRST(Xi)∩FIRST(Xj)=? (i≠j) ② 如果

    img

    ,還需滿足FIRST(Xi)∩FOLLOW(A)=?

    在這里,①中“FIRST(Xi)∩FIRST(Xj)”的Xi和Xj是同一非終結符的不同候選式,②中

    “FIRST(Xi)∩FOLLOW(A)”的Xi是A的一個任一候選式。

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

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

相關文章

代理模式Proxy Pattern

模式定義 給某一個對象提供一個代理,并由代理對象控制對原對象的引用 對象結構型模式 模式結構 Subject:抽象主題角色Proxy:代理主題角色RealSubject:真實主題角色 代理類實現代碼 public class Proxy implements Subject {p…

基于YOLOv11與單目測距的實戰教程:從目標檢測到距離估算

引言 在計算機視覺領域,目標檢測與距離估算的結合是自動駕駛、機器人導航等場景的關鍵技術。本文將以YOLOv8模型為核心,結合單目相機的幾何模型,實現對視頻中目標的實時檢測與距離估算。代碼參考自單目測距原理博客,并通過實踐驗…

代碼生成器使用原理以及使用方法

代碼生成器使用原理以及使用方法 版本號:1.0 二Ο二五年二月 目錄 文檔介紹 1.1編寫目的 1.2文檔范圍 1.3讀者對象 系統設計 2.1設計目標 2.2設計思路 2.3代碼實現原理 使用方法 3.1如何使用 3.2如何修改? 對原程序的bug修改及簡…

STM32標準庫-I2C通信

文章目錄 一、I2C通信1.1 I2C1.2硬件電路1.3I2C時序基本單元1.4I2C時序 二、MPU60502.1簡介2.2MPU6050參數2.3硬件電路2.4MPU6050框圖 三、I2C外設(硬件)3.1簡介3.2I2C框圖3.3I2C基本結構3.4主機發送3.5主機接收3.6軟件/硬件波形對比1. 時序精度2. 信號穩定性3. 速率與效率4. 波…

使用 Azure LLM Functions 與 Elasticsearch 構建更智能的查詢體驗

作者:來自 Elastic Jonathan Simon 及 James Williams 試用這個示例房地產搜索應用,它結合了 Azure Gen AI LLM Functions 與 Elasticsearch,提供靈活的混合搜索結果。在 GitHub Codespaces 中查看逐步配置和運行該示例應用的方法。 更多閱讀…

模糊查詢 的深度技術解析

以下是 模糊查詢 的深度技術解析,涵蓋核心語法、通配符策略、性能優化及實戰陷阱: 🔍 一、核心運算符:LIKE SELECT * FROM 表名 WHERE 列名 LIKE 模式字符串;🎯 二、通配符詳解 通配符作用示例匹配案例%任意長度字符…

[論文閱讀] (39)EuroSP25 CTINEXUS:基于大模型的威脅情報知識圖譜自動構建

《娜璋帶你讀論文》系列主要是督促自己閱讀優秀論文及聽取學術講座,并分享給大家,希望您喜歡。由于作者的英文水平和學術能力不高,需要不斷提升,所以還請大家批評指正,非常歡迎大家給我留言評論,學術路上期…

強化學習三大分類

核心目標: 教會一個智能體(比如機器人、游戲AI、推薦系統)通過試錯和獎勵,學會在某個環境中完成特定任務的最佳策略。 核心角色: 智能體 (Agent): 學習者,比如玩游戲的小人、控制溫度的空調系…

城市排水生命線安全運行監測項目

近年來,城市內澇、污水溢流等問題頻發,讓排水管網這一"城市生命線"的安全運行備受關注。如何讓地下的"毛細血管"更智能、更可靠?本文將帶您深入解析城市排水生命線安全運行監測項目的建設邏輯與技術內核,看科…

LeetCode - 34. 在排序數組中查找元素的第一個和最后一個位置

題目 34. 在排序數組中查找元素的第一個和最后一個位置 - 力扣&#xff08;LeetCode&#xff09; 思路 查找左邊界 初始化 left 0, right nums.size() - 1 當 left < right 時循環&#xff1a; 計算中點 mid left (right - left) / 2 如果 nums[mid] < target…

Tesollo四指靈巧手DG-4F:18自由度與多種抓取模式結合實現高精度操作

Tesollo四指靈巧手 DG-4F 是一款具備 18 自由度的多模態末端執行器&#xff0c;采用模塊化結構設計&#xff0c;融合人手靈活性與夾爪高效性特點。該產品兼容 Universal Robots、Techman、Doosan Robotics、Rainbow Robotics 等主流機器人平臺&#xff0c;適用于工業自動化、科…

深入淺出JavaScript 原型鏈:對象繼承的“隱形鏈條”

深入淺出JavaScript 原型鏈&#xff1a;對象繼承的“隱形鏈條” 在 JavaScript 的世界里&#xff0c;原型鏈&#xff08;Prototype Chain&#xff09;是一個核心概念。它如同一條隱形的鏈條&#xff0c;連接著所有對象&#xff0c;使得代碼能夠高效地共享屬性和方法。理解原型…

LINUX中MYSQL的使用

LINUX中MYSQL的使用 MYSQL的數據類型 bool&#xff1a; 布爾類型 0 或者 1 CHAR&#xff1a; 單字符的字符 CHAR&#xff08;n&#xff09;:多字節字符 VARCHAR&#xff08;n&#xff09;&#xff1a;可變長度的字符型 TINYINT &#xff1a; 單字節整型 SMALLINT&#x…

打卡第48天:隨機函數與廣播機制

知識點回顧&#xff1a; 隨機張量的生成&#xff1a;torch.randn函數卷積和池化的計算公式&#xff08;可以不掌握&#xff0c;會自動計算的&#xff09;pytorch的廣播機制&#xff1a;加法和乘法的廣播機制 ps&#xff1a;numpy運算也有類似的廣播機制&#xff0c;基本一致 …

學習昇騰開發的第四天--基本指令

1、查看npu當前狀態信息 npu-smi info 2、查看NPU的ID npu-smi info -l3、調用python python3 4、修改用戶名 su - HwHiAiUser 5、查看cann版本 cat /usr/local/Ascend/ascend-toolkit/latest/compiler/version.info 6、刪除文件夾 sudo rm -rf HelloWorld7、在本地環…

vue3 - 自定義hook

自定義hook 簡單點來說就是將人物或者訂單的所有數據和方法放在一個ts文件里面 這樣便于維護 假如一個人只需要管 人物的模塊 那他只需要操作usePerson.ts文件就可以了 //useDog.ts import { ref,reactive} from vue; import axios from axios;export default function(){…

【python】bash: !‘: event not found

報錯 # 2. 測試smplx是否工作&#xff08;可能不需要chumpy&#xff09; python -c "import smplx; print(? smplx works!)"bash: !: event not found 分析 這是bash的歷史擴展問題&#xff0c;感嘆號被解釋為歷史命令。用這些方法解決&#xff1a; &#x1f680…

【Python打卡Day47】注意力熱力圖可視化@浙大疏錦行

可視化空間注意力熱力圖的意義&#xff1a; 提升模型可解釋性 熱力圖能直觀展示模型決策的依據區域&#xff0c;破除深度學習"黑箱"困境。例如在圖像識別中&#xff0c;可以看到模型識別"貓"是因為關注了貓耳和胡須區域&#xff0c;識別"禁止通行&qu…

樹狀數組 2

L - 樹狀數組 2 洛谷 - P3368 Description 如題&#xff0c;已知一個數列&#xff0c;你需要進行下面兩種操作&#xff1a; 將某區間每一個數加上 x&#xff1b; 求出某一個數的值。 Input 第一行包含兩個整數 N、M&#xff0c;分別表示該數列數字的個數和操作的總個數。…

YOLOv2 技術詳解:目標檢測的又一次飛躍

&#x1f9e0; YOLOv2 技術詳解&#xff1a;目標檢測的又一次飛躍 一、前言 在 YOLOv1 提出后&#xff0c;雖然實現了“實時性 單階段”的突破&#xff0c;但其在精度和小物體檢測方面仍有明顯不足。為了彌補這些缺陷&#xff0c;Joseph Redmon 等人在 2017 年提出了 YOLOv2…