前言
不学龙书的码农不是靠谱的码农。就冲这句话,我真的把编译原理给速推了一把。
干货
分析把源程序分解成多个组成要素,并在这些要素之上加上语法结构。
综合根据中间表示和符号表中的信息来构造目标程序。
把声明如何完成一个计算任务的语言称为强制式语言。
编译器最基本的数学模型是有穷状态机FSM和正则表达式。它们用来描述词法单位(关键字,标识符)以及被编译器用来识别这些单位的算法。此外,上下文无关文法用于描述程序设计语言的语法结构。
标识符是一个字符串。所有的标识符都是名字,但有些名字也可以是表达式,变量指向存储中的某个特定位置。
一个函数通常有一个返回值,而一个过程不返回任何值。方法在OO语言中和特定类相关联。
声明告诉我们事务的类型,而定义告诉我们它们的值。
语法描述该语言的正确形式。语义定义程序的含义。
词法单元由各名字和属性值组成,这些词法单元也称为终结符号。
一个文法描述了程序的层次结构。文法的定义使用了称为终结符号的基本符号和称为非终结符号的变量符号。这些符号代表了语言的构造。
词法分析器从输入中逐个读取字符,并输出一个词法单元的流。
语法分析从一个文法开始符号推导出一个给定的终结符号串。推导的方法是反复将某个非终结符替换为它的某个产生式的体。
语法分析的结构是中间代码,具体有抽象语法树AST和三地址代码TAC。
词法分析器扫描源程序并输出一个由词法单元组成的序列。
为了判断下一个词素何处结束。常常预先扫描输入字符。
一个词法分析器的行为经常用一个状态转换图来描述。有穷状态机是状态转换图的形式化表示。
自底向上语法分析器基于LR(k)语法分析。L表示从左到右的扫描,R表示反向构造出一个最右推导序列,