ch18-codegen-riscv-RISC-V 概述
ch18-codegen-riscv-RISC-V 概述 RISC: Reduced Instruction Set Computer (精简指令集计算机) V: Five ISA是向上层提供的接口 cpu是ISA的硬件实现 提供指令、数据类型、寄存器 2017 ACM Turing Award “RISC-V 很可能发展成为世界主流 CPU 之一, 在 CPU 领域形成 Intel、...
阅读全文13 篇文章
ch18-codegen-riscv-RISC-V 概述 RISC: Reduced Instruction Set Computer (精简指令集计算机) V: Five ISA是向上层提供的接口 cpu是ISA的硬件实现 提供指令、数据类型、寄存器 2017 ACM Turing Award “RISC-V 很可能发展成为世界主流 CPU 之一, 在 CPU 领域形成 Intel、...
阅读全文ch17-LR(1)-LR(1) 语法分析器 SLR(1) 文法FOLLOW(E) !image-20230623144436433-LR(1)%20%E8%AF%AD%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8/image-20230623144436433.png) SLR(1) 分析表...
阅读全文ch16-parser-lr0-LR0 语法分析器 只考虑无二义性的文法 这意味着, 每个句子对应唯一的一棵语法分析树 !image-20230622223756217 LL(K) 特点:自顶向下的、 递归下降的、 预测分析的、 适用于LL(1) 文法的、 LL(1) 语法分析器 LL(k) 的弱点: 在仅看到右部的前 k 个词法单元时就必须预测要使用哪条产生式 LR(K) 自底向上的、...
阅读全文ch15-ir-backpatch-控制流语句翻译中的地址回填技术 使用标签标记跳转目标 !image-20230622145609928 Java Bytecode: 使用地址值作为跳转目标 !image-20230622145746213 每条指令占据多少字节,第四条指令编号为3,占据了三个字节,下一个指令编号为6 地址是一个绝对地址 ...
阅读全文ch14-ir-control-比较复杂的控制流翻译 如何生成更短、更高效的代码? !image-20230527195529306 !image-20230527172334371 t3 = true的赋值不是必须的:我只要知道根据bool表达式跳转到哪即可 直接用布尔表达式改变控制流br 使用控制流跳转间接表明布尔表达式的值 实现思路:分工 合作 父节点为子节点准备跳转指令的目标标签 ...
阅读全文ch13-ir-control-控制流语句的翻译 本讲内容颇有难度, 需要多多思考 虽然有非常简单的讲法, 教材龙书偏偏采用了让初学者望而生畏的讲法。 为什么要 “创造困难”? 简单的翻译方案会产生大量冗长的代码,选择困难的翻译方案是为了生成更短、更高效的代码 control.g4和bool表达式的文法 主要关注绿框中的控制流语句,assign上节课已经讲过了所以不关注 control.g4...
阅读全文ch12-ir-expr-表达式翻译 分工和合作 父节点为子节点准备跳转指令的目标标签 子节点通过继承属性确定跳转目标 P → S S → if (B) S1!image-20230516210447611 一部分是B的中间代码,应该由B生成 B需要有一个B.code综合属性来表示B节点所生成的对于复合表达式的中间代码 一部分是S1的中间代码 S1需要有一个S1.code ...
阅读全文ch11-llvm-ir-中间代码生成 LLVM介绍 LLVM官网:The LLVM Compiler Infrastructure Project 与gcc相比,LLVM的模块化更好 Low Level Virtual Machine:x no 获得了ACM Software System Award 2012 LLVM IR (Intermediate Representation)...
阅读全文ch10-semantics-ag 为什么需要引入新的文法 Regular Expression (词法分析):正则表达式 Context-Free Grammar (语法分析):正则表达式不够用,上下文无关文法 语义分析:类型检查,属性文法 (Attribute Grammar): 为上下文无关文法赋予语义 语义:类型检查、变量使用前是否定义等 ...
阅读全文ch09-语义分析-符号表 !image-20230419152824467 符号表 (Symbol Table) 符号表是用于保存各种信息的数据结构 !image-20230419152922914 第几行进行的声明和定义,在第几行被用到过 符号表实现的难点:与作用域相关 “领域特定语言” (DSL) 通常只有单作用域 (全局作用域) DSL: Domain-Specific...
阅读全文ch08-parser-allstar ANTLR 4 自动将类似 expr 的左递归规则重写成非左递归形式 ANTLR 4 提供优秀的错误报告功能和复杂的错误恢复机制 ANTLR 4 使用了一种名为 Adaptive LL(∗) 的新技术 ANTLR 4 几乎能处理任何文法 (二义性文法✓ 间接左递归✗) ANTLR 4 如何处理直接左递归与优先级的 写在前面就是优先级...
阅读全文ch07 LL(1) 语法分析器 构建语法分析树: 自顶向下 vs. 自底向上 只考虑无二义性的文法 这意味着, 每个句子对应唯一的一棵语法分析树 自顶向下的、 递归下降的、 基于预测分析表的、 适用于LL(1) 文法的、 LL(1) 语法分析器 自顶向下构建语法分析树 根节点是文法的起始符号 S 每个中间节点表示对某个非终结符应用某个产生式进行推导 (Q : 选择哪个非终结符,...
阅读全文ch06 2023.3.29 监听器模式 时机问题:监听enter还是exit CallGraphListener.java java public class CallGraphListener extends CymbolBaseListener { private Graph graph = new Graph(); String currentFunctionName =...
阅读全文