编译原理引论

简单来说编译器就是一个程序,可以阅读某一种语言编写的程序,并把它翻译成为一个等价的、用另一种语言(目标语言)编写的程序。解释器是另一种常见的语言处理器,不翻译源语言,而是直接利用用户提供的输入执行源程序中的指定操作。

创建可执行程序通常分为预处理器、编译器、汇编器、链接器/加载器。其中预处理器负责将源程序聚合在一起,并把宏转换为源语言的语句;编译器可能产生一个汇编语言程序,因为汇编语言比较容易输出和调试;经过汇编器处理之后生成可重定位的机器代码;链接器将多个可重定位的机器代码以及库文件连接在一起,形成真正在机器上运行的代码。

编译器的结构:

可以分为分析部分和综合部分。其中分析部分包括词法分析器、语法分析器、语义分析器,分析部分把源程序分解为多个组成部分,并在这些要素上加上语法结构,利用这个结构创建一个中间表示。同时分析部分还收集有关源程序的信息,并把信息存放在一个称为符号表的数据结构中;综合部分利用中间表示和符号表中的信息来构造用户期待的目标程序。在分析部分和综合部分之间还有一个与机器无关的优化步骤。

程序语言设计基础:

静态和动态的区别:问题在编译时刻决定称为静态策略,问题只有在程序运行中做出决定的策略称为动态策略,需要早运行时刻作出决定。如果仅通过阅读程序就可以确定一个声明的作用域,可以说使用的是静态作用域,或者词法作用域。否则使用的是动态作用域。如果使用动态作用域,在程序运行时,同一个对x的使用会指向x几个声明中的一个。

环境:一个从名字到存储位置的映射。

状态:一个从内存位置到它们的值得映射。


你可能感兴趣的:(编译原理)