點關注不迷路喲。你的點贊、收藏,一鍵三連,是我持續更新的動力喲!!!
持續關注我~~~主頁,查看更多內容喲(希望你能在這里有所收獲🤭)。點關注,不迷路,哈哈哈!~~~
主頁:
一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?type=blog
目錄
注意事項
1-1
2-1
3-1
4-1 自上而下的語法分析方法
注意事項
1-1
-
編譯程序從源代碼到目標代碼,需要經過以下六個步驟:
詞法分析、語法分析、語義分析、中間代碼生成、優化、目標代碼生成
-
Java源代碼轉換為字節碼的過程是一個編譯過程。
-
編譯型語言
編譯型語言在執行前需要通過編譯器將源代碼一次性翻譯成機器碼(或字節碼),然后直接運行生成的可執行文件。這類語言的執行效率較高,但編譯過程可能需要較長時間。常見的編譯型語言包括:
-
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 開發和系統管理中廣泛使用,現在仍用于文本處理和自動化任務。
-
-
三階段的編譯程序比兩階段的編譯程序多了一個:匯編程序
兩階段轉換:編譯(.exe文件)——運行
三階段轉換:編譯(.obj文件)——匯編(.exe文件)——運行
-
單詞:是高級語言中有實在意義的最小語法單位
-
語法分析的方法有:推導和歸約
-
一遍掃描是以:語法分析為核心工作的
-
Lex是可以自動生成詞法分析器。
-
最右推導和最左推導【最左歸約和最右歸約】
-
語法規則?
-
中間代碼使用最為廣泛的是:四元式
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個)
-
乘法原理:若完成一件事需分 n 步,每步分別有 m?, m?, ..., m?種方式,則總方式數為 (m? * m?* m?)。
符號串計數:長度為 k 的符號串數量 = 字母表大小的 k 次方(如 A1 長度為 2 的串數為 262)。
集合連接積:若集合 X 有 m 個元素,Y 有 n 個元素,則 XY 的元素數為 (m * n)。
如何數葉子節點和分支節點?
在樹形數據結構中,準確統計葉子節點和分支節點是基本操作。以下是具體方法和步驟:
-
葉子節點識別標準:
- 沒有任何子節點的節點
- 終端節點(位于樹的最底層)
- 示例:在二叉樹中,左右指針都為NULL的節點
-
分支節點識別標準:
- 至少有一個子節點的節點
- 非終端節點
- 包括根節點(除非樹為空)
- 示例:在二叉樹中,左指針或右指針至少一個不為NULL的節點
-
擴展一下→統計方法(遞歸實現示例):
-
應用場景:
- 文件系統分析(統計文件夾和文件數量)
- DOM樹遍歷(計算元素節點和文本節點)
- 決策樹評估(查看最終決策點和判斷條件數量)
-
注意事項:
- 對于空樹,兩者計數都為0
- 單節點樹:1個葉子節點,0個分支節點
- 不同樹結構(二叉樹、多叉樹)需要調整判斷條件
可視化示例:
-
什么是句柄?
答:句型中的最左簡單短語。注意:句柄是最左規約時要尋找的簡單短語。
簡單短語(直接短語):經過一步推導得到,樹根的所有的孩子節點構成的
-
用高級語言編寫的程序經編譯后產生的程序叫:目標程序。用不同語言編寫的程序產生目標程序后,可用:連接程序連接在一起生成機器可執行的程序。在機器中真正執行的是:機器指令代碼。
-
巴科斯-諾爾范式(即BNF) 描述文法 短語 一棵語法樹中所有子樹生成的符號串就叫:短語 直接短語(簡單短語) 經過一步推導的短語 句柄 最左直接短語 -
0型文法 短語文法 圖靈機 1型文法 上下文有關文法 線性界限自動機 2型文法 上下文無關文法 下推自動機 3型文法 正規文法 有限狀態自動機 0型包括1,2,3型
1型包括2,3型
2型包括3型
-
一個語言的文法是:不唯一的。例如Chomsky文法就有:0,1,2,3總共四種文法
-
LR (k) 文法是一類無歧義文法
-
怎么判斷是否為二義性文法?
-
文法中,產生式規則的左部就是非終結符號。(×)
產生式左部的限制
-
2 型和 3 型文法:左部必須是單個非終結符(如 A、S),因此題目中的說法對這兩類文法成立。
-
0 型和 1 型文法:左部可以是包含非終結符的任意符號串(如 (AB → CD) 或 (BAC → BDC)),此時左部可能包含終結符(如 B、C),因此題目中的說法不成立。
-
-
[ω]表示ω可出現③0或1次,{ω}表示ω可出現④n(n>0)次。
3-1
-
暫無
4-1 自上而下的語法分析方法
-
下推自動機(PDA),定義:PDA是一個七元組 M,M=(Q,∑,H,δ,q0,z0,F), 其中:
Q——控制器的有限狀態集
∑——輸入字母表
H——下推棧內字母表 δ——Q×(∑∪{ε})×H 到 Q×H*的有限子集映射
q0∈Q——控制器的初始狀態 z0∈H——下推棧的棧初始符號
F?Q——控制器的終態集
-
自上而下的語法分析思想是:從文法的:開始符號出發,反復使用不同產生式進行②推導,試圖構造出與輸入符號串相同的③_終結符串___。
-
LL(1)文法的要求是:
對文法中每一條形如A→X1|X2|…Xn的產生式,要求其滿足如下條件: ① FIRST(Xi)∩FIRST(Xj)=? (i≠j) ② 如果
,還需滿足FIRST(Xi)∩FOLLOW(A)=?
在這里,①中“FIRST(Xi)∩FIRST(Xj)”的Xi和Xj是同一非終結符的不同候選式,②中
“FIRST(Xi)∩FOLLOW(A)”的Xi是A的一個任一候選式。