点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
持续关注我~~~主页,查看更多内容哟(希望你能在这里有所收获🤭)。点关注,不迷路,哈哈哈!~~~
主页:
一位搞嵌入式的 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 的串数为 26²)。
集合连接积:若集合 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的一个任一候选式。