学渣课堂笔记--编译原理(1)

只是写给自己看的课堂笔记,边学边改,有错误及时指正,希望能画上一个圆满的问号(?)。

编译原理(一)

一、翻译、编译程序

    翻译程序:把一种语言程序(源语言程序等价的转化成另一种语言程序(目标语言程序)。

    编译程序:把一种高级语言等价的转换成另一种低级语言的程序。

(解释程序:边解释边执行源程序。)

二、编译过程

1.词法分析:-->输入:源程序-->输出:单词符号

     依循的原则:构词规则
     描述工具:有限自动机

有限自动机?:

2.语法分析:-->-输入:单词符号-->输出:语法单位

     依循的原则:语法规则
     描述工具:上下文无关文法

上下文无关文法?:

3.中间代码生成:-->输入:语法单位-->输出:中间代码

     依循的原则:语义规则

4.优化程序代码:-->输入:中间代码-->输出:优化后的中间代码

     依循的原则:程序的等价变换规则

5.目标代码生成:-->-输入:优化后的中间代码-->输出:目标代码

     目标代码的三种形式:

             绝对指令代码:可直接运行

             可重新定位指令代码:需要连接装配

             汇编指令代码:需要进行汇编

三、程序结构

1.表格和表格管理

     常见的表格:符号名表(编译中最重要),常数表,标号表,入口名表,过程引用表。

     格式:    名字(name)  |   信息(information)

2.出错处理

    出错处理程序:发现错误并通知用户。

3.遍(pass)

遍:扫描源程序(从开头到结尾或从中间到结尾)

    注意:并不是每种语言都能用单遍编译程序实现。

4.编译前端和后端

    前段:与源语言有关但与目标机无关的部分(词法分析、语法分析、中间代码生成)。

    后端;与目标机有关(优化,目标代码的产生)。

    Java跨平台:为了实现编译程序可改变目标机,通常需要多支持的中间语言,类似Java的操作平台无关性:Java定义一种虚拟机代码:Bytecode,Java编译器将java源代码编译成字节码bytecode,平台无关性就是基于相同bytecode规范做出不同平台的虚拟机。



猜你喜欢

转载自blog.csdn.net/qq_37800886/article/details/78039460