编译原理笔记4 文法与语言
来源:互联网 发布:网络流行语的翻译建议 编辑:程序博客网 时间:2024/05/16 18:05
1.字母表与符号串
2.连接(乘积)运算:串集间的乘积;串集的方幂:串集的自身乘积
3.字母表的闭包与正闭包
1)字母表A的闭包(A*)
2)字母表A的正闭包(A*),除了空串的所有次方幂和
4.文法:文法是描述语言的语法结构的形式规则
1)非终结符:出现在规则左部、用<>括起来、表示一定语法规则的词,用Vn表示
2)终结符:语言中不可再分割的字符串。终结符是组成句子的基本单位。用VT表示
3)开始符号:表示所定义的语法范畴的非终结符,又叫识别符号
4)产生式:形式A->
5)推导:从开始符号开始,通过使用产生式的右部取代左部,最终能产生语言的一个句子的过程。最左推导和最右推导成为规范推导。
6)规约:推导的逆过程,从源语言的句子开始,通过规则的左部取代右部,最终达到识别符号的过程。——最左(右)规约是最右(左)推导的逆过程。
7)句型、句子和语言:——句型:从文法的识别符号,每步推导(包括0步推导)得到的字符串阿尔法。——句子:是仅含终结符的句型。——语言:语言是由S开始通过1步或1步以上推导所得句子的集合。记为:L(G)
8)文法规则递归定义。
9)文法规则的扩充表示——扩充的BNF表示。——()提因子。——{}重复次数的指定。——[]任选符号。
10)元语言符号:用来说明文法符号之间关系的符号。如->、|。
5.文法与语言的形式定义。
1)Chomsky对文法的定义:从形式上说文法G是一个四元式(VN,VT,P,S)
2)根据对文法产生式的限制分为四类。0.1.2.3型文法。
3)0型文法,产生式的左边至少有一个符号,且至少有一个非终结符。——识别0型语言的自动机成为图灵机(TM)。——0型文法是对产生式限制最少的文法。——任何0型都是递归可枚举的。
4)1型文法——P中产生式除了开始符号可以产生空串,其他规则右部的长度一定大于等于左部;如果开始符号产生空串,开始符号就不能出现在产生式右部。
5)—识别的自动机是线性界限自动机
6)2型文法:产生式左部一定是非终结符,产生式右边可以是任意符号,包括空串;非终结符的替换不必靠了上下文。——识别2型语言的自动机称为下推自动机(PDA);2型文法也称上下文无关文法。
7)3型文法——规则中产生式的左边是一个非终结符,右边是终结符
8)词法分析和语法分析中对产生式的限制——不存在P->P。——非终结一定能够转换为终结符。
文法的构造与简化:
1.由于同一语言可以用不同的文法来描述,显然应当选择产生式的个数最少,最符合语言特征的来描述。
2.在文法中,有些产生式对推导不起作用,要删除掉。
3.简化步骤:1)查找有无形如p-〉p的产生式,有就删除。2)若某个产生式在推到中永远不会被用到,就删掉。3)不能推导出终结符的,删除它。4)整理剩余产生式就得到了简化的文法。
4.构造无空串产生式的上下文无关文法。规则中要么不出现空串产生式,要么只有开始符号有空串产生式。——如果开始符号能推出空串,则开始符号不出现在任何产生式右部。
语法树与文法的二义性
1.定义:用来表示语言句子结构的树
2.作用:使用语法树可以使语法分析过程直观、形象,易于判断文法二义性。
3.语法树中的概念:1)子树:所有的非叶子结点连同它的所有子孙结点构成子树。2)修剪子树:减去子树树根的所有孩子。3)句型:在一棵语法树生长过程中的任何时刻,所有那些叶子结点排列起来就是一个句型。4)短语:如果Z=〉xUy,且U=〉+
4.句子二义性:如果文法的一个句子存在对应的两颗或两棵以上的语法树,则称句子是二义的。
- 编译原理笔记4 文法与语言
- 编译原理与文法
- 编译原理与编译构造 由语言构造文法1
- 编译原理与编译构造 由语言构造文法2
- 编译原理:文法和语言
- 编译原理--文法和语言
- 编译原理---文法和语言
- 编译原理与编译构造 LR文法
- 编译原理文法语言递归实现
- 编译原理中四种文法语言的基本概念
- 编译原理(2):文法和语言
- [编译原理]文法的定义与文法产生的分类
- 编译原理-LL(1)文法笔记
- 软考笔记-编译原理-文法
- [数据结构与算法]编译原理文法知识
- 编译原理:文法与语法分析基本概念
- [编译原理]学习笔记(二)——文法和语言
- [编译原理]学习笔记(二)——文法和语言
- C++实验5:项目1—数组分离
- 编译原理笔记1 编译原理入门及引论
- 编译原理笔记2 引论续之编译程序的…
- 编译原理笔记3 编译程序
- Linux Vi或VIM的使用技巧
- 编译原理笔记4 文法与语言
- Linux 配置 tor
- 编译原理笔记5 词法分析
- php5.4后 php-fpm如何启动的停止
- MPAndroidChart饼图的使用
- 编译原理笔记6 词法分析程序
- c++和Java的多态机制
- 编译原理笔记7 自上而下语法分析-…
- Eclipse中如何生成jar包及jar包的正确导入