编译原理之文法一
2012-10-04 14:39
3627 查看
介绍文法之前,先介绍形式形式语言的一些基础知识。
形式语言基础知识
字母表:符号的非空有限集合称为字母表
符号串:由字母表中的符号组成的有限符号序列称为该字母表的符号串
符号长度:|a|,即a中出现的符号个数
前缀:符号串a末尾删除零个或多个符号后得到的符号串
后缀:符号串a开头删除零个或多个符号后得到的符号串
子串:符号串a删除前缀和后缀之后的符号串
子序列:符号串a删除0或多个符号(可以不连续)得到的符号串。
语言:某个确定的字母表上符号串的任何集合。
终结符:不可再分的元素,一般用小写字母代替
非终结符:可以再次拆分的元素,一般用大写字母代替
非形式化语言运算
语言L和M的合并,LUM={s|s∈L或 s∈M}
语言L和M的连接,LM={st|s∈L,t∈M}
语言L的Kleene闭包,L*=
语言L的正闭包,L+=
第3条表示0个到无穷多个L元素的集合,第4条表示1个到无穷多个L元素的集合,例如
L1 ={a,b,…y,z} M1 ={1,2…8,9 } (L1UM1)={a,b,… y,z,1,2…8,9 }
(L1UM1)*={a,b,… y,z,1,2…8,9 ,aa,1a,…xyz,6789st..}
L1(L1UM1)*={所有字母打头的字母和数字符号串}
好了,文法的前续工作已经准备完毕,然后咱们再说说文法的用途,文法是一种形式化语言,知其作用:文法是通过生成方式描述语言的:语言中的每个句子可以用严格定义的规则来构造。
我的理解是,每种语言都有自己的规则,比如说汉语,最常见的规则是:主语+谓语+宾语,每种编程语言也都有其自己的语法规则,文法就是对源代码中的单词串进行约束的一种规则。
文法
文法是一个四元组:G={VT,VN,S,P}
VT:非空有限符号集合,它的每个元素为终结符号,如abc
VN:非空有限符号集合,它的每个元素为非终结符号,如ABED
S:属于非终结符集合,是文法G的开始符号
P:是一个非空有限集合,它的元素为称为产生式
文法约束
VN和VT不含公共的元素,即VN ∩ VT = φ(大写和小写不会有交集)
用V表示VN ∪ VT ,称为文法G的字母表。
规则,也称产生式或生成式,是形如α→β,α称为规则的左部,β称作规则的右部,开始符S必须出现在某一个产生式的左部一次。
下篇博客详细介绍四种文法类型:编译原理之文法二
相关文章推荐
- 【编译原理】简析文法分析,语法分析
- 编译原理中四种文法语言的基本概念
- 【编译原理】:编译原理各种文法对应的自动机
- 编译原理-文法
- 编译原理之LL(1) 、LR(0)、SLR、LR(1)、LALR文法的对比
- CSUFT 编译原理实验二LL(1)文法分析
- [编译原理]学习笔记(二)——文法和语言
- 【转】编译原理4种文法类型
- 编译原理文法类型判断
- 编译原理--文法基础知识
- 编译原理-左递归文法
- 【编译原理】语法制导翻译之属性文法(一)
- 编译原理中的四种类型文法
- 编译原理-第2部分形式语言导论-第二节文法和语言 第二小节形式语言分类
- 编译原理与编译构造 文法的优化2
- 编译原理:文法与语法分析基本概念
- 编译原理之形式语言文法分类
- [编译原理]算符优先文法分析与实现
- 编译原理(一) Chomsky文法的判断方法及C++代码实现
- 【软考】——编译原理:文法的简单理解