文章目录
一、KMP模式串匹配
二、编译程序和解释程序
(1)编译程序
编译时独立生成目标程序,源程序和编译程序不参与目标程序的运行过程
(2)解释程序
编译时不生成独立的目标程序,解释程序和源程序都参与程序运行过程
三、传值调用和引用调用
(1)传值调用
实参传递值,可以是常量、变量、表达式
(2)引用调用
实参传递地址给形参,双向传递数据
四、编译器工作阶段
其中,中间代码生成和代码优化可以省略
源程序 -》 词法分析 -》 记号流 -》语法分析 -》语法树 -》语义分析
(1)词法分析
分析构成程序的字符,及由字符按照构造规则构成的符号是否符合程序语言的规定。
非法字符,关键字或标识符拼写错误。
(2)语法分析
可以发现程序中所有的语法错误,
对各条语句的结构做合法性的分析。
语法结构错误, if、endif不匹配,缺分号。
(3)语义分析
类型分析和检查,
只能发现静态语义错误,动态语义错误只有当程序运行时才能发现。
死循环、零除数
(4)中间代码
与具体的机器无关,常见的中间代码有:
后缀式、三地址码、三元式、四元式、树图等
(5)目标代码生成
将中间代码转换成特定机器上的指令代码,以及寄存器分配。
五、脚本语言
主要采用解释方式实现,一般运行在解释器或虚拟机中便于移植。
六、符号表
记录程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成。
七、沟通路径
八、正规式
只需要记住:
a*是由0个或多个a构成的字符串的集合
九、有限自动机
(1)确定的有限自动机
对每个状态来说,识别字符后转移的状态是唯一的。
(2)不确定的有限自动机
对每个状态来说,识别字符后转移的状态是不唯一的。
十、后缀表达式
又叫逆波兰式
十一、上下文无关文法