编译原理(2)——高级语言及其文法
码文不易,希望支持,谢谢->支持原创
高级语言及其文法
让系统知道组成规则并按规则执行
目录
语言的概述
语言是用来交换信息的工具
语言
- 自然语言(Natural Language)
- 计算机语言(Computer Language)
自然语言
是人与人之间的通讯工具
语义(Semantics):环境、背景知识、语气、二义性——难以形式化
计算机语言
计算机系统间、人机间通讯工具
严格的语法(Grammar)、语义(Semantics) ——易于形式化:严格
形式化的内容提取
自然语言
- 字符(Character) 语言的基本字符
- 单词(Token) 满足一定规则的字符串
- 句子(Sentence) 满足一定规则的单词序列(在计算机语言中一个程序就是一个句子)
- 语言(Language) 一定规则的句子的集合、
程序设计语言
- 程序(Program) 满足语法的语句序列
- 语句 (Statement) 满足语法规则的单词序列
- 单词(Token) 满足语法规则的字符串
语言是字和组合字的的规则——结构性描述
基本定义
字母表
字母表(Alphabet) 是一个非空有穷集合,字母表中的元素称为该字母表的一个字母(Letter),也叫字符(Character)
符号串
字母表上符号串(String)
(1) 是上的一个符号串(叫做空串);
(2) 若x是上的符号串,而a是∑的元素,则xa是上的符号串;
(3) y是上的符号串,当且仅当它由(1)和(2)导出
对于字符串s
前缀:移走s的尾部的零个或多于零个符号
后缀:删去s的头部的零个或多于零个符号
子串:从s中删去一个前缀和一个后缀
子序列: 从s中删去零个或多于零个符号(这些符号不要求是连续的)
长度:是该符号串中的符号的数目。
由字母表中的符号所组成的的任何有穷序列被称之为该字母表上的符号串,也称作“字”(Word)
正闭包
的正闭包(Positive Closure):
={x | x是上的非空字符串}
=
克林闭包
的克林闭包(Kleene Closure):
={}
=
乘积
设、是两个字母表,与 的乘积(Product)={ ab | a,b }
语言&句子
设是一个字母表,,L称为字母表上的一个语言(Language),,x叫做L的一个句子。
连接
设x和y是符号串,它们的连接(Concatenation )xy是把y的符号写在x的符号之后得到的符号串。
幂
设x是符号串,x的n次幂(power)为,,n>0。
文法定义
码文不易,希望支持,谢谢->支持原创
文法的形式定义
文法G为一个四元组:
:终结符(Terminal)集 在产生式右边且自身不会再生成
:非终结符(Variable)集,
语法范畴——某个语言结构
:开始符号(Start Symbol),
至少在产生式左侧出现一次
:产生式(Product)集合
α→β,被称为产生式(定义式),读作:α定义为β。
其中,且α中至少有中元素的一个出现。。α称为产生式α→β的左部(Left Part),β称为产生式α→β的右部(Right Part) 。
一般的非终结符用大写 终结符小写
产生式的简写
对一组有相同左部的产生式
简单地记为:
读作:α定义为β1,或者,…,或者,并且称它们为α产生式。,,…,称为候选式(Candidate)。
直接推导与归约
是文法G的一个产生式,且,称直接推导/派生(Derive)出,也称 直接归约(Reduce)为
注意到是根据而将中的变成了,所以,一般称将归约为
记为 ( )
多步推导/归约
记为 (恰用n步)
(至少一步)
(若干步:零步或多步)
句型与句子
如果则称α是G产生的一个句型(Sentential Form)。
如果且,则称x是G产生的一个句子(Sentence)
句型 包括句子
句子 没有非终结符
文法G产生的语言
产生式集合、终结符集合、非终结符集合是有限的,
递归实现从有限到无限
文法的分类(chomsky体系)
短语结构化语言0型 图灵机
上下文有关文法1型 线性有限自动机
上下文无关 2型 多数语言 下推自动机
正则文法正规文法 (左线性 右线型)3型
短语结构文法
如果G满足文法定义的要求,则G是0型文法(短语结构文法PSG: Phrase Structure Grammar )
上下文有关文法
除形如α→ε的ε产生式外,若α→β满足|α|≤|β|则G是1型文法,又叫上下文有关文法(CSG—Context Sensitive Grammar)
上下文无关文法
若 α→β满足 ,则 G 是2型文法,又叫上下文无关文法(CFG: Context Free Grammar)
正规文法
设
右线性(Right Linear)文法:A→aB或A→a
左线性(Left Linear)文法:A→Ba或A→a
都是3型文法(正规文法 Regular Grammar -RG)
总结
四种文法之间的关系是将产生式作进一步限制而定义的,他们呈逐级“包含”关系,分析方法越来越简单,所能实现功能越来越有限。
语法树
码文不易,希望支持,谢谢->支持原创
语法树(Parse Tree,语法分析树,分析树)
用树的形式表示句型的结构
用中的符号标记结点, 标记时为独子
树根:开始符号;中间结点:非终结符
如果一个中间结点v标记为A,v的儿子从左到右依次为,,……,,并且它们分别标记为,,……,,则
结果
设有文法G的一棵语法树T, T的所有叶子顶点从左到右依次标记为
则称符号串
是T的结果(Yield)
短语与句柄
文法G的一棵语法子树的“结果”表示一个句型中某一部分的结构 ——子结构
子树B表示其“结果”的结构。称为短语(Phrase)如果,则称γ是句型αγβ的相对于变量A的短语
如果,则称γ是句型αγβ的相对于变量A的直接短语
最左直接短语叫做句柄(Handle)
用子树解释短语,直接短语,句柄
短语:子树的结果是相对于子树根的短语
直接短语:仅有父子两代的子树的结果
句柄:一个句型的分析树中最左那棵只有父子两代的子树的结果