编译基础知识
语言是什么
1.1,高级语言
- 语言就是一个记号系统
- 通过语法来组成语义
1.2,语法规则
- 如何语言程序可以看成一定字符集
- 语法使得这串字符串形成一个形式上正确的程序
1.3,词法规则
-
规定了那些字符串是单词符号
-
单词符号一般包括:常数,标识符,基本字,算符等等
-
可以使用正规式和有限自动机理论来描述词法结构进行词法分析
- 正规式:正确的单词符号
- 有限自动机:用来比较编写的程序符号和正规式是否一样
1.4,语义
- 离开语义,语言就是一堆符号的集合
字符
字母表和符号串
- 字母表
- 是符号的非空有穷集合
- 用∑,V表示
- 符号
- 语言中最基本的单位
- 符号串
- 符号串是字母表中符号组成的又穷序列
- 空串:不含任何符号的串为空串,记作ε表示
- 句子
- 字母表上符合某种规则构成的串
- 这种规则可以是构成单词的构造也可以是构成语句的规则
- 语言
- 字母表上句子的集合
- 使用a,b,c表示符号;使用α,β,γ表示符号串;使用A,B,C表示集合
符号串集合的运算
- 连接(乘积)运算:
- 定义:若串集A={α1,α2,α3},串集B={β1,β2,β3},则乘积AB={αβ|α∈A and β∈B}
- 串集自身的乘积称为串集的方幂
- A的0次方={ε}
- 定义:若串集A={α1,α2,α3},串集B={β1,β2,β3},则乘积AB={αβ|α∈A and β∈B}
- 闭包运算
- 闭包:字母表A的闭包(A*):
- A* =A0∪A1∪A2∪A3……=A*
- A上所有符号组成的所有串的集合
- 正闭包:字符表A的正闭包(A+):
- A+ =A1∪A2∪A3……=A*-{ε}
- A上所有符号组成的所有串的集合(不包括空串)
- 语言:字母表上符合某种规则的语句组成的
- 字母表上的语言就是字母表上正闭包的子集
- 闭包:字母表A的闭包(A*):
文法和语言的关系
-
文法的概念
- 文法就是描述语言的语法结构的形式规则
-
相关概念
-
非终结符
- 出现在规则的左部,用<>括起来,表示一定语法概念的词
- 非终结符使用VN表示
-
终结符
- 语言中不可分割的字符串,使用终结符集合VT包含
-
开始符
- 表示所定义的语法范畴的非终结符
- 开始符称为识别符号
-
产生式
- 用来定义符号串之间的关系的一组语法规则
- 形式:A->α(A产生α)
-
推导
- 从开始符号开始,通过使用产生式的右部取代左部,最终产生语言的一个句子的过程
- 最左(右)推导:每次使用一个规则,以其右部取代符号串最左(右)非终结符
- 最左推导和最右推导称为规范推导
-
规约
- 规约就是推导的逆过程,从给定的源语言的句子开始,通过产生规则的左部替换右部,最终达到开始符号的过程
- 最左(右)规约是最右(左)推导的逆过程
- 最左规约和最右规约为规范规约
-
句型
- 句型是从文法的开始符号S开始的,每步推导(包括0步推导)所得到的字符串α
- 记作:S-* ->α,其中α属于(VN∪VT)*
- α是终结符和非终结符并集的闭包
- 句子:是仅含终结符的句型
-
过程
其中的形容词和名词的组成可以成为主语或者宾语,使用的是深度优先搜索算法,进行逐个的遍历语法,当发现语法不对就进行回溯
图形化的最左规约方式,这个图就是语法树 -
语言:
- 从S开始通过1步或者1步以上推导得到的句子的集合
- 记作L(G)。L(G)={α|S-±>α,且α∈VT*}
- 句型:必须包含非终结符;句子:只有终结符
-
巴斯克范式:
-
使用()提取因子:U->ax|ay|az U->a(x|y|z)
-
使用{}表示重复次数:<标识符>-><字母>{<字母>|<数字>}上5下0
-
[]任选符号:<整数>->[+|-]<数字>{<数字>}文法与语言的形式定义
-
-
-
Chomsky对文法的定义:(VN,VT,P,S)
- VN非终结符的集合,VT终结符的集合,P文法规则的集合,S开始符号