程序设计语言
编译程序和解释程序
低级语言
汇编和机器语言
高级语言
c c++ java python
源程序(.java) -------------------解释(脚本)/编译(c c++ java)程序 翻译--------------------->目标程序(机器可以识别)
编译程序:
源程序.java ------编译程序------>等价源程序的目标程序.class 编译程序和源程序不参与目标程序的执行过程。
解释程序:
不生成独立的目标程序,源程序和解释程序都要参加到代码的运行过程。
控制程序:
顺序 选择 循环
编译器工作阶段
编译步骤
词法 语法 语义 目标代码生成 是必须的且顺序不可修改
解释步骤
词法分析 语法分析 语义分析 也是必须的
符号表
不断收集 记录 使用源程序的相关符号的特征,并将其存入符号表。
记录程序的重要信息,便于辅助语义的正确性检查和代码的生成。
词法分析
输入:符号表
把源程序看成字符串,从左到右,从上到下,逐个的扫描出单词符号。
词法分析的过程依据 的是语言的词法规则,判断结构是否正确,并输出记号流。
语法分析
输入:记号流
输出:语法树(分析数)
可以检测程序中的语法错误。例如检测括号匹配,变量未赋值被使用。
语义分析
输入:语法树
分析语法结构的含义,检测是否出现静态语义错误(类型不匹配、除小数)。
动态语义错误
在程序运行的时候可以检测,例如 除0,死循环。
目标代码生成
是编译器工作的最后一个阶段。
目的:
-
是把中间代码变成特定机器可以运行的目标代码,和具体的机器密切相关。
-
程序中的寄存器的分配。
中间代码生成
中间代码和具体的机器无关,可以将不同的高级语言翻译成同一种中间代码,具有良好的可移植性。
常见的中间代码有:
后缀式、三地址码、三元式、四元式、树、图。
正规式
词法分析阶段使用正规式
实例
有限自动机
词法分析阶段使用有限自动机
确定的有限自动机:每个状态识别字符后转移的状态是唯一的。
不确定的有限自动机:每个状态识别字符后转移的状态是不唯一的。
正确识别:一个正规式识别完成后到终态。
不需要识别任何字符就可以转移。
上下文无关文法
大多数程序设计语言用上下文无关文法来描述
后缀式+中缀式
中缀式:1-2 + 3 *(1+2)
后缀式:12-34*
中缀 转后缀式:
- 1-2 + 3 *(12+)
- 1-2+(312+*)
- (12-)+(312+*)
- 12-312+*+
后缀转中缀
栈
杂题
标签:语言,后缀,中间代码,语义,词法,程序设计,源程序,中缀 From: https://www.cnblogs.com/baidh/p/18115849