从简单编译器到多核片上系统(MPSoC)软件设计
1. 软件编译基础
软件编译是电子和信息领域的常见概念。通常,应用程序使用高级编程语言(如 C/C++)实现。软件编译是将用高级符号语言编写的指令序列转换为机器语言,以便指令能够被执行。以将 C 语言应用程序转换为处理器可接受的汇编语言为例,编译过程包含以下步骤:
1. 词法分析 :将源代码文本分割成小片段,称为标记(tokens)。每个标记是语言的单个原子单元,如关键字、标识符或符号名。标记的语法通常是正则表达式。这一阶段也称为词法扫描,执行词法分析的软件称为词法分析器或扫描器。
2. 语法分析 :解析标记序列并构建中间表示,例如以树的形式。树是根据定义语言语法的形式语法规则构建的。解析树的节点代表基本操作和运算符,而弧表示节点之间的依赖关系。
3. 语义分析 :为解析树添加语义信息并构建符号表。符号表是一种数据结构,程序源代码中的每个标识符都与有关其声明和在源代码中出现的信息相关联,如类型、作用域,有时还有其位置。此阶段还执行语义检查,如类型检查(检查类型错误)或对象绑定(将变量和函数引用与其定义关联起来)。
4. 优化 :将中间解析树转换为功能等效但更快或更小的形式。优化的示例包括内联展开、死代码消除、常量传播、寄存器分配或自动并行化。
5. 代码生成 :遍历中间树并为树的每个节点生成目标语言的代码。这还涉及资源和存储决策,例如决定哪些变量适合放入寄存器和内存,以及选择和调度适当的机器指令及其相关的寻址模式。
超级会员免费看
订阅专栏 解锁全文
103

被折叠的 条评论
为什么被折叠?



