高级程序设计语言的三个基本因素:

语法:描述语言成分的构成规则(包括词法规则和语法规则)

语义:描述语法成分的含义

语用:描述语法成分的使用方法

形式语言理论(formal language theory)是用数学方法研究自然语言(如英语)和人工语言(如程序设计语言)的产生方式、一般性质和规则的理论。形式语言是模拟这些语言的一类数学语言,它采用数学符号,按照严格的语法规则构成。从广义上说,形式语言是符号取自某个字母表的字符串的集合。如同自然语言具有语法规则一样,形式语言也是由形式文法生成的。一个形式文法是一个有穷变元集合,这些变元也称为非终结符或语法范畴。每个变元都可以用来定义语言,定义方式可以是递归的,即通过一些称为终结符的原始符号,加上变元自身,递归地加以定义。和变元有关的规则称为产生式,产生式决定了语言是如何构造出来的。一个典型的产生式表示:给定变元所代表的语言包含这样一些字符串,它们是通过连结运算,将另外某些变元语言中的字符串和若干终结符连结起来而得到的。

PS:形式语言理论是编译原理的重要理论基础,形式语言理论中主要讨论了语言和文法的数学机制以及语言和文法的分类。文法是形式语言中一个十分重要的基本概念。

1,字母表与符号:字母表是元素的非空又穷集合。例如,由26个英文字母组成的集合是一个字母表。字母表记为∑。字母表中的元素称为符号。例如,26个英文字母中的元素a,b,c等等都称为符号。

2,符号串及其运算

a,符号串:符号的又穷序列称为符号串。有字母表中的任意符号组成的序列都是符号串。什么符号也不包含的符号串称为空符号串,以希腊字母 ε 表示。

b,符号串的长度:符号串所包含符号的个数,称为符号串的长度。设x是一符号串,它的长度记为|x|,例如,x = string, |x| = 6。特别有| ε | = 0,即空符号串的长度等于0。

c,符号串的连接。设x,y是两个符号串,则xy 称为x 与 y 的连接。特别有εa = aε = a,其中,a是任意符号串。

d,符号串集合的乘积。设A,B是两个符号串集合,AB表示A与B的乘积,则定义AB={ xy | x∈A,y∈B}。特别有 {ε}A = A{ε} = A , φA = Aφ = φ,其中,φ为空集。

e,ε  φ,即空符号串并不属于空集。

f,符号串的方幂。同一符号串的连接可写成方幂的形式。设x是一符号串,则定义

x^0 = ε

x^1 = x

x^2 = xx

x^3 = x^2x=xxx

g,符号串集合的方幂。同一符号串集合的乘积也可以写成方幂的形式。设符号串集合 A,则定义

A^0 = {ε}

A^1 = A

A^2 = AA

A^3 = A^2A=AAA

h,符号串集合的正闭包。设符号串集合A的正闭包记为A+,则有 A+ = A1 ∪ A2 ∪ A3 ... An , 即A+为集合A上所有符号串的集合。

i,符号串集合的自反闭包,设符号串集合A的自反闭包记为A* ,则有,A* = {ε} ∪ A+ = A+ ∪ {ε} 。对于集合A来说A的正闭包和A的星闭包的区别在于是否包含 ε (空符号串),包含空符号串的是星闭包,不包含的是正闭包。

3,文法

文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。文法是定义描述语言的语法结构的一组形式规则,一个程序语言的文法之目的就是用适当条数的语法规则把该程序语言的全部成分描述出来。文法可定义为一个四元组,文法G = (Vn,Vt,P,S)。其中,Vn 是一个非空有穷的非终结符号集,Vt 是一个终结符号集,P是一个产生式集合,S∈Vn 是文法的识别符(也称做开始符号)。从文法的开始符号出发反复使用其中的产生式对非终结符进行替换和展开推导出语言中的各种句子。在定义文法之前,需要先定义产生式。

Vn:非空有穷的非终结符号集。在英文表示中所有的大写字母都是非终结符号是可分解的,小写字母都是终结符号是不可分解的。在中文表示中所有的带 “<> ”是非终结符号是可分解的,不带 "<>" 的是终结符号是不可分解的。

Vt:非空有穷的终结符号集。在英文表示中所有的大写字母都是非终结符号是可分解的,小写字母都是终结符号是不可分解的。在中文表示中所有的带 “<> ”是非终结符号是可分解的,不带 "<>" 的是终结符号是不可分解的。

P:非空有穷的产生式集合。产生式又称重写规则,它意味着能将一个符号串用另一个符号串替换,可以用产生式的右部符号串替换左部的符号串。产生式可以通过 “::=”或  ”→“ 来定义(用来定义语法结果),即 α→β 且 V = Vn ∪ Vt , Vn ∩ Vt = φ , α ∈ V+ , β∈ V* 。

S:称作识别符号或开始符号的一个非终结符,它至少要在一条产生式中作为左部出现。

4,文法的分类(文法分为0 型,1 型 ,2 型,3 型四种类型)

1,0 型文法(短语文法):0 型文法所有产生式的左部 α 和右部 β 都是符号串,对它们没作任何限制。即产生式的左部至少有一个非终结符右边随意。若对0 型文法的产生式作某些限制,则可以给出其他三种类型的文法。

2,1 型文法(上下文有关文法):1型文法所有产生式左部可以含有一个、两个或两个以上的字符,但其中必须至少有一个非终结符。产生式右部的符号串的长度必须大于等于左边符号串的长度。对于产生式 “S→ε”是1  型文法中的一个特例。

3,2 型文法(上下文无关文法 | 左线性文法):2 型文法的所有产生式左部是单个非终结符,右部是由终结符和非终结符组成的符号串。

4,3 型文法(右线性文法 | 正规文法):3 型文法所有的产生式右部是单个终结符或单一终结符后跟着单一非终结符。产生式右部符号串长度小于等于2。

5,文法类型的判断

for example:

文法G=({ A,B,T,S },{ x,y,z},P,S)其中,P = { S→xTB|xB,T→xTA|xA,B→yz,Ay→yA,Az→yzz}。

解释:我们判断文法G是什么类型文法时可以从最复杂的3型进行判断,依次向下判断,如果不符合3型的,那再看是不是2型的,不是2型的,再看是不是1型的。对于文法G来说产生式集合P中有两条产生式左部不是单个非终结符(Ay→yA,Az→yzz),所以文法G不是3 型文法也不是2 型文法( 2 型文法和3 型文法都要求P中的每条产生式左部必须为单个非终结符)。再看是不是1 型文法,文法G中P的每条产生式都满足产生式左部由1个或2个字符构成并且必须含有一个非终结符,每条产生式的右部符号串的长度都大于等于左部符号串的长度。即文法G是1 型文法。

6,图示四种文法之间的关系:

PS:4个文法类型的定义是逐渐增加限制的。因此每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是0型文法。 从外到内四种文法对产生式的限制越来越多,其语言的描述能力越来越弱。

7,四种文法所生成的语言可被4种自动机识别:

0 型-----------------图灵机

1 型-----------------线性界限自动机

2 型-----------------下推自动机

3 型-----------------有穷自动机

转载于:https://blog.51cto.com/luochen2015/1858683

编译原理之形式语言文法分类相关推荐

  1. 编译原理四种文法的理解补充

    如果你是学习,给定一个文法,判断是哪一个文法的话,那这篇不是讲这个,只是一点小小的理解补充. 四种文法如下: 补充: 1.0型文法,即递归可枚举文法相当于图灵机是指: 给定一个文法G,一个句子g,如果 ...

  2. 【编译原理】判断文法是几型文法

    今天上课学习文法,感觉对于概念很模糊,下面两张图截自<编译原理 第四版>. 以下内容转载自梦里一明月的博客-CSDN博客 首先,应该明确,四种文法,从0型到3型,其规则和约定越来越多,限制 ...

  3. 编译原理学习-形式语言 乔姆斯基文法

    四种文法 我觉得讲课的老师都不一定能搞清楚这些文法到底是什么东西 0型文法 1型文法 2型文法-上下文无关文法 3型文法 直接推出的严格定义 可以理解成字符串替换吧 有一个字符串αβγ 如果β→b是一 ...

  4. 【学习笔记】编译原理 第二章 文法和语言

    以下为参考课件与<编译技术>(张莉等著)的个人整理,若有错误欢迎指出 第二章 文法和语言 文章目录 第二章 文法和语言 一.文法的非形式讨论 二.文法的形式定义 1.文法的形式定义 2.推 ...

  5. 【编译原理】关于文法形式化定义的探索

    文章目录 1 文法的概念 2 符号和符号串的定义 3 文法的形式化定义 3.1 终结符 3.2 非终结符 3.3 P&&S 1 文法的概念 每一种自然语言或者是编程语言都需要文法来描述 ...

  6. 编译原理:理解文法和语文

    1.理解符号串与集合运算. L={A,B, - ,Z,a,b, - ,z} D={0,1, - ,9} 说明下表示的含义: LUD         :全部字母和数字的集合 LD        :由一个 ...

  7. 【编译原理】正则文法与正则式的等价性

    正则文法到正规式的转换规则: 文法表达式 正则式 规则1 A->xB B->y A=xy 规则2 A->xA|y A=x*y 规则3 A->x A->y A=x|y 正则 ...

  8. 编译原理LL(1)文法

    First集 官方定义 设G=(VT,VN,S,P)是上下文无关文法 ,则 (1)如果X是终结符,则FIRST(X) = { X } . (2)如果X是非终结符,且有产生式形如X → a-,则FIRS ...

  9. 编译原理和离散数学 考研

    离散数学 四色定理的内容?解决方法? 四色定理又称四色猜想.四色问题,是世界三大数学猜想之一.四色定理是一个著名数学定理,通俗称:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接区域颜色相同./ ...

最新文章

  1. 【部分原创】python实现视频内的face swap(换脸)
  2. QC数据库恢复,解决SQL孤立用户问题
  3. but no declaration can be found for element #39;aop:aspectj-autoproxy#39;.
  4. 再见!妈妈再也不用担心我的计算机基础!
  5. 实习二 分组密码加密_分组密码加密模式
  6. python源码笔记_python源码学习笔记(二)
  7. 中科院自动化所王金桥:深耕AI中台引擎,助力AI场景化、多元化落地...
  8. 定期删除30天以前的elasticsearch的日志
  9. 关于计算机音乐编创的论文,有关浅谈少儿舞蹈音乐的编创论文
  10. Directx 9在vs2008 里面的环境配置
  11. chrome新版安装flash控件失败解决方法
  12. pve 不订阅更新_炉石传说pve冒险到底好玩在哪里?绯夜千雪来告诉你!
  13. Swift 读标准库源码笔记 -- Integers(基本数据类型篇)
  14. Unity文档——AssetBundle使用模式
  15. 软件测试的工作流程是什么?
  16. 使用scrapy爬取qq音乐
  17. 阿里P9:做了6年架构设计,这次聊聊微服务与分布式事务细节
  18. tk-mybatis使用
  19. SVN图标消失解决方案
  20. 计算机信息系统集成高级工程师,2020系统集成项目管理工程师(高级系统集成项目管理工程师)...

热门文章

  1. 电脑html文件删除,电脑plugin可以删除吗
  2. mysql 去除微秒_mysql的微秒补丁 - sihanjishu的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  3. mysql最高安全级别双一_Mysql 双一配置保证数据0丢失
  4. python画图怎样写文字_python画图系列之个性化显示x轴区段文字的实例
  5. ENVI BSQ转BIL或者BIP
  6. P4287 [SHOI2011]双倍回文
  7. 科学种草 | 破解小红书素人爆文的奥秘
  8. day17_自动化的框架搭建
  9. Hard Voting 与 Soft Voting 的对比
  10. Linux 各种top命令