低级语言:汇编语言和机器语言
高级语言:Java,c++,Python…
脚本语言是动态语言(也是弱类型语言),PHP,JS,Python
1.编译程序和解释程序java既是编译也是解释型
- 编译程序,将源语言程序翻译成等价的目标语言程序,先编译,再执行。
编译程序不参与目标程序的执行 解释程序,一般运用于脚本语言,立即执行源程序,并得出结果,不生成目标程序
解释程序参与源程序的执行解释,程序执行速度慢
符号表:不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。
词法分析:识别句子中的一个个单词,输入:源程序 输出:记号流(单词符号)
语法分析:分析句子的语法结构 输入:记号流 输出:语法树
语法分析可以发现程序中所有语法错误
比如 变量b未声明,b = a -1;自顶向下语法分析:递归下降分析法和预测分析法,不是这两种那就属于自底向上自底向上语法分析:算符优先分析法和LR分析法
语义分析:分析句子的含义,检查是否包含静态语义错误
静态语义:编译阶段检查
静态语义方法:语法指导翻译
静态语义错误:比如类型不匹配,int a = “123”;
动态语义:运行时才能检查
动态语义错误:比如被除数为0,int a = 1/0;
中间代码生成:进行初步的翻译
代码优化:对译文进行修饰
常见的中间代码:后缀式、三地址码、三元式、四元式和树(图)等形式。
目标代码生成:写出最后的译文
寄存器的分配工作处于目标代码生成阶段
for循环无限循环
3.程序设计语言的成分- 数据具有类型的作用
便于为数据合理分配存储单元便于对参与表达式计算的数据对象进行检查便于规定数据对象的取值范围及能够进行的运算
- 传值调用:将实参的值传递给形参,实参可以是变量、常量和表达式。不可以实现形参和实参间双向传递数据的效果传引用(地址)调用:将实参的地址传递给形参,形参必须有地址,实参不能是常量(值),表达式。可以实现形参和实参间双向传递数据的效果,即改变形参的值同时也改变了实参的值。
*号表示循环(0到多次),|号表示或
正规式要能表达出相应文法,但不能多,范围不能更大
正规集可以用正规式描述,用有限自动机识别。
6.有限自动机有限自动机是词法分析的一个工具,它能正确地识别正规集,识别一个字符后,转移一下
两个圆圈是终态,识别完后,一定在终态上
确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不确定的。比如字符为1,转移的路径有多条可以去选
上下文无关文法广泛的表示语言的语法规则
8.中缀、后缀表达式转换规则:a?b(中缀) 变 ab?(后缀)
例子:中缀:1+2 后缀:1 2 +
中缀表达式怎么变后缀表达式
- 先看优先级,按优先级符号后置优先级相同,从右至左看
a×b/(c-d) 变为 abcd-/×
- a×b/cd-a×bcd-/abcd-/×
后缀表达式怎么变中缀表达式
利用栈
abcd-/× 从左至右放入栈
遇到符号,按栈的规则将数字提出来
栈底 abcd 栈口
- -号 cd出来 c-d/号 b出来 b/(c-d)×号 a出来 a×b/(c-d)
中缀式:语法树中序遍历可以得出中缀式,左根右
后缀式:语法树后序遍历可以得出后缀式,左右根



