随笔分类 - 编译原理
摘要:目录什么是链接映射文件?生成链接映射文件的方法在 CMake 中启用在 GCC/LD 命令行中直接使用链接映射文件的核心内容1. 内存布局概览2. 段地址分配详情3. 符号地址表4. 库和归档成员引用5. 交叉引用表(可选)实际应用场景1. 诊断链接问题2. 分析内存使用3. 优化代码大小4. 验证
阅读全文
摘要:目录现象描述揭秘时刻:链接器的智能优化1. 静态库的链接机制2. 死代码消除(Dead Code Elimination)3. 调试信息剥离诊断工具集:验证链接内容查看实际链接的符号分析库的依赖关系检查各个段的大小实际案例分析优化建议1. 确保关键功能被链接2. 控制链接粒度3. 使用链接映射文件分
阅读全文
摘要:目录1. 寄存器层次2. 操作时的行为3. 用途4. 示例代码5. 注意事项 在x86架构中,RDX和EDX是密切相关的寄存器,它们属于同一寄存器组的不同部分,体现了x86的寄存器层次结构。以下是它们的关系和区别: 1. 寄存器层次 RDX:64位寄存器(在x86-64架构中引入)。 EDX:32位
阅读全文
摘要:目录1. RDI (Register Destination Index)2. RSI (Register Source Index)3. RDX (Register Data)4. RCX (Register Counter)关键点总结:实际代码示例(C内联汇编): 在x86-64架构中,rdi、
阅读全文
摘要:目录CFLAGSLDFLAGS 在编译 C/C++ 程序时,可以使用 CFLAGS 和 LDFLAGS 环境变量来设置编译器和链接器的选项。下面对 CFLAGS 和 LDFLAGS 进行详解: CFLAGS CFLAGS 是用于设置 C/C++ 编译器选项的环境变量。它可以用来指定编译过程中的各种选
阅读全文
摘要:目录 右线性文法(Right-Linear Grammar)是一种特殊的上下文无关文法,也被称为3型文法或正规文法。在这种文法中,所有的产生式都符合特定的形式。具体来说,如果G = (V_N, V_T, P, S)是一个右线性文法,那么其每一个产生式都必须是以下两种形式之一: A → αB,其中A和
阅读全文
摘要:目录产生语言 {a^n b^n | n >= 0} 的文法 产生语言 {a^n b^n | n >= 0} 的文法 要构造一个产生语言 {a^n b^n | n >= 0} 的文法,我们可以使用上下文无关文法(Context-Free Grammar, CFG)。这个语言包含所有由相同数量的连续a字
阅读全文
摘要:目录 在编译原理中,运行时存储分配是一个重要概念,涉及到程序在运行时如何分配和管理内存。程序在执行期间需要存储各种数据,包括变量、常量、程序代码等,而这些数据需要被妥善地安排在内存中以便程序能够正确、高效地访问它们。 运行时存储分配策略主要分为静态存储分配和动态存储分配两种。 静态存储分配:这种分配
阅读全文
摘要:目录符号表符号表条目信息符号表的建立 符号表 编译原理中的符号表是一种重要的数据结构,它在编译器或解释器的工作过程中发挥着关键作用。符号表主要用于存储源代码中各种标识符的信息,包括变量、函数名、数组名、类型名等。每个标识符在符号表中都有一个对应的条目,记录了该标识符的属性,如数据类型、作用域、存储地
阅读全文
摘要:目录中间代码生成三地址码 中间代码生成 中间代码生成(Intermediate Code Generation)是编译器设计中的一个关键阶段,它介于前端(负责词法分析、语法分析和语义分析)和后端(负责代码优化和目标代码生成)之间。在这个阶段,编译器将源程序(通常是高级语言编写的)转换成一种中间表示形
阅读全文
摘要:目录top_downbottom_up 语法分析的任务:识别句子,确定句子的类型 对于不同类型的语句,后续的语义分析器将执行不同的语义动作 语法分析技术分类 (前提:CFG无二义性) top_down bottom_up top_down LL1(文法) top_down步骤 消除歧义--无二义性
阅读全文
摘要:目录语义分析主要步骤 语义分析 编译原理中的语义分析是编译过程的一个重要阶段,它紧随语法分析之后进行。语义分析的主要任务是检查源程序在语法上正确之后,是否也具有正确的意义,即是否符合语言的语义规则。 与语法分析不同,语法分析关注的是程序的语法结构是否正确,而语义分析则关注程序的实际含义。语法分析构建
阅读全文
摘要:目录语法制导翻译属性文法带有继承属性的SDD带有综合属性的SDDS-属性定义(S-SDD)L-属性定义(L-SDD)SDD的求值顺序将S-SDD转换为SDT将L-SDD转换为SDT在非递归的预测分析过程中进行语义翻译在递归的预测分析过程中进行语义翻译在LR分析过程中进行语义翻译 语法制导翻译 语法制
阅读全文
摘要:目录LALR(1)算法 LALR(1)算法 LALR(1)算法是编译原理中的一种语法分析算法,它属于自下而上的分析方法,是基于LR(1)算法的改进。LALR(1)算法通过合并LR(1)项目集中的同心集来减少状态数量,从而解决LR(1)算法中可能出现的状态空间爆炸问题。 在LALR(1)算法中,首先构
阅读全文
摘要:目录展望符LR1算法与SLR算法的区别 展望符 在LR(1)文法中,展望符(lookahead)是一个非常重要的概念。它代表了在当前状态下,非终结符后面必须紧跟的终结符。换句话说,展望符用于预测下一个应该出现的输入符号。 在LR(1)项目中,一般形式为[A→α·β, a],其中A→αβ是一个产生式,
阅读全文
摘要:目录SLR算法算法步骤与LR0算法的区别 SLR算法 编译原理中的SLR(Simple LR)算法是一种用于解决文法分析冲突的策略,它基于LR(0)算法,但进行了一些简化和改进。SLR算法通过引入FOLLOW集来解决冲突,使得在特定状态下,可以根据下一个输入符号是属于移进集合还是某个FOLLOW集来
阅读全文
摘要:目录LR(0)分析表的构建项目集闭包CLOSURE函数GOTO函数规范LR(0)项集族构建ACTION表构建GOTO表LR(0)分析表构造算法步骤 1:构造初始项集I0步骤 2:构造项集族C步骤 3:构造ACTION和GOTO表注意事项:LR(0) 自动机的形式化定义移进/归约冲突和归约/归约冲突移
阅读全文
摘要:目录自底向上语法分析句柄移入-归约法可归约串算符优先分析LR分析法LR分析表LR分析算法4种LR算法LR(0)算法SLR算法 自底向上语法分析 自底向上的语法分析是编译原理中的一个重要概念,它与自顶向下的语法分析相对应。自底向上的语法分析是从输入串的底部(叶子节点)开始,逐步进行归约,直到达到文法的
阅读全文
摘要:目录预测分析法实现步骤递归的预测分析非递归的预测分析下推自动机PDA表驱动的预测分析法递归和非递归的对比 预测分析法实现步骤 构造文法 改造文法:消除二义性、消除左递归、消除回溯 求每个变量的FIRST集和FOLLOW集,从而求得每个候选式的SELECT集 检查是不是 LL(1) 文法。若是,构造预
阅读全文
摘要:目录S_文法q_文法FIRST 集合FOLLOW 集合SELECT 集合LL(1)文法预测分析表 S_文法 S_文法,也被称为简单的确定性文法(Simple Deterministic Grammar),是编译原理中的一种特定类型的文法。这种文法满足以下两个条件: 每个产生式的右部都以终结符开始。
阅读全文

浙公网安备 33010602011771号