
编译原理
文章平均质量分 81
turbolove
学习-模仿-创造
展开
-
编译原理 - 编译优化
代码优化是对被优化的程序进行的一种语义保持的变换。可以在整形、布尔型、浮点型等数据类型上进行。编译器从业者永不失业定理。原创 2023-12-21 09:15:20 · 148 阅读 · 0 评论 -
编译原理 - 中间表示
S-> x = n // 常数赋值| x = y ⊕ z // 二元运算| x = ⊙ y // 一元运算| x = y // 数据移动| x[y] = z // 内存写| x = y[v] // 内存读| x = f(x1, ... xn) // 函数调用| Cjmp (x1, L1, L2) // 条件跳转| Jmp L // 无条件跳转| Label L // 标号| Return x // 函数返回优点所有的操作都是原子的变量没有符合结构控制流结构被简化了。原创 2023-12-21 09:14:38 · 173 阅读 · 0 评论 -
编译原理 - 语义分析
为了高效,可以使用hash表等数据结构来实现符号表。语义分析的阶段是根据上述代码,找出代码错误。为了节约空间,也可以使用红黑树等平衡树。下面是示例代码,其中有些典型的错误。用来存储程序中的变量相关信息。内存:存放所有的变量。执行引擎:指令的执行。原创 2023-12-21 09:13:30 · 1036 阅读 · 0 评论 -
编译原理 - 语法制导翻译
编译器在做语法分析过程中除了回答程序语法是否合法外,还必须完成后续工作。这些后续的工作一般可通过语法制导的翻译完成。在语法动作当中,加入生成语法树的diam。在产生式归约的时候,会自底向上构造整棵树。所以抽象语法树必须编码足够多的源代码信息。将分析树的浓缩过程生成的树是抽象语法树。抽象语法树是编译器前端和后端的接口。在之前的加法中实现语法制导翻译。抽象语法书必须仔细设计。原创 2023-12-21 09:12:26 · 368 阅读 · 0 评论 -
编译原理 - 语法分析
冲突检测:如国对N的两条产生式规则N=》β和N到γ,要求FIRST_S(β)∩FIRST_S(γ) = {}FIRST[N] = 从非终结符N开始推导得出句子开头的所有可能终结符的集合。给定文法G和句子S,语法分析要回答的问题:是否存在对句子S的推导?基于LR(0),通过进一步判断一个前看符号,来决定是否执行归约动作。使用句子的每个非终结符规则的变化填写到表汇总。记号流=》语法分析器=》语法树。分析树的含义取决于树的后续遍历。之后使用gcc编译生成的c代码。上述代码执行之后应该报错。原创 2023-12-21 09:10:09 · 404 阅读 · 0 评论 -
编译原理 - 词法分析
如果我们有=、>符号,如下图,我们的提取步骤,根据第一个字符,我们可以按照下图步骤读取对应的符号。=》前端=》词法分析器=》记号=》语法分析器=》抽象语法树=》语义分析器=》中间表示=》词法分析的任务是将程序员所写的程序切分成记号流。输入的字符串=》FA=》{YES, NO}Thompson算法:正则表达式=》NFA。在标识符识别的时候,单独加上标识符的识别。词法分析器的任务:字符流到记号流的转换。其他的标识符转移图和上述的类似。子集构造算法:NFA=>DFA。原创 2023-12-21 09:08:58 · 224 阅读 · 0 评论 -
编译原理 -概述
》词法分析=》语法分析=》语法树构造=》语义分析=》翻译=》正规化=》指令选择=》控制流分析=》寄存器分析=》代码生成=》汇编器=》连接器=》=》词法分析=》语法分析=》语义分析=》代码生成=》编译原理集中体现了计算机科学的很多核心思想。编译器设计是理论和实践高度结合的一个领域。任务:编译程序1+2+3到栈式计算机。前端=》tree=》栈式计算机代码。编译器是其他领域的重要的研究基础。编译器本身就是非常重要的研究领域。目标机器:栈式计算机stack。源语言加法表达式Sum。原创 2023-12-21 09:07:44 · 169 阅读 · 0 评论