一些编译相关知识,在此mark一下
预编译
编译
链接
装载
词法分析:
扫描器 解析器:有限自动机构成
解析方式:表驱动解析 硬编码解析(常用)
产生:词法记号(Token)
分为:标识符 关键字 常量 界符 err end
语法分析: (1)(2)表示提前看多少个标记 lookahead
LL:自上而下 递归下降子程序 (1)不容许出现左递归 gcc 使用LL(2)
LR:自下而上 (合并终结符)
终结符:词法记号(Token)
非终结符:将词法记号序列抽象出来 用符号来表示 此符号为非终结符
文法:0,1,2(正则文法:例有限自动机),3(上下文无关文法)型
BNF :巴科斯范式 - 一种表示上下文无关文法的语言 上下文无关文法描述一类形式语言
BNF 规定是推导规则(产生式)的集合,写为:
<符号> ::= <使用符号的表达式>
产生式:非终结符->终结符 非终结符 | 终结符
So 高级程序语言语法解析过程就是将其逐步用相应产生式(推导规则)拆分的过程
左递归消除规则:
S->Sa | b
引入新的非终结符号S`
S-> bS=> bS
= abS` | b 同时消b =>
S-> aS
| ε
program = program segment | ε 消除左递归 =>
program = segment program | ε
program = ε program=> program = program
program= segment program
| ε
语法分析 : 递归下降子程序
一个program 经语法分析 输出的是抽象语法树 每个子节点都是相应的语法块 对应相应的子程序 输出保存到文件里面 也可以直接进行符号表管理 语义分析 代码生成 —>语法制导
语义分析:声明和定义检查 类型转换