1.文法及语言的形式表示

每一门编程语法都是有它自己的语法的,实际上,任何程序均可以看做是一定字符集上的一个字符串,而判定一个字符串是否为一个程序上合法的程序,其依据的则是语言的文法。

语言的文法是一组规则,包含词法规则和语法规则。

词法规则是描述语言单词符号构成规则的。单词符号包括:关键字、标识符(变量名或函数名等)、常数、运算符等。词法规则的描述工具通常为正规文法(正规式、有限自动机)。

语法规则是描述语言语法单位构成规则的。语法单位包括:表达式、语句、函数、过程等。语法规则的描述工具常为:上下文无关文法。

文法是描述语言结构的形式规则,一般分为四个类型:0型、1型、2型、3型。其中2型即为上下文无关文法,是描述程序语言语法的有效工具,3型即正规文法,是描述程序语言词法的有效工具。

(最常见的文法的分类系统是诺姆·乔姆斯基于1956年发展的乔姆斯基谱系,这个分类谱系把所有的文法分成四种类型:无限制文法上下文相关文法上下文无关文法正规文法。四类文法对应的语言类分别是递归可枚举语言、上下文相关语言、上下文无关语言和正规语言。)

2.文法和语言的形式定义

定义1:产生式(或规则)

产生式是一个有序对(A,α),通常记作A→α(或A::=α),其中A称为产生式的左部符号,α为产生式的右部有穷符号串,“→”表示“定义为”或“由…组成”。

定义2:文法

文法是一个四元组G[S]=(Vn,Vt,P,S),其中Vn为非空有穷集,其每个元素为非终结符,Vt为非空有穷集,其每个元素为终结符,由定义可知Vn∩Vt=Φ,文法符号集V=Vn∪Vt,P为产生式的有穷集合,每个产生式的形式为:A→α,A∈Vn,α∈V*,S为文法的开始符号S∈Vn。

Vn:非空有限的非终结符集合

Vt:非空有限的终结符集

S:开始符号

P:产生式集合

其中,Vn∩Vt=∅,S∈Vn

P中产生式一般形式为A→α|β,其中A∈Vn,α,β∈(Vn∪Vt)*

定义3:推导与归约

设G[S]=(Vn,Vt,P,S)是给定文法,x,y,A,β∈V*,且A→β∈P,此时符号串xAy能够直接产生出符号串xβy,我们称符号串xβy是符号串xAy的直接推导,或符号串xAy是符号串xβy的直接归约,记作xAy⇒xβy。

定义4:句型和句子

设G[S]=(Vn,Vt,P,S)是给定文法

若S⇒α,α∈V,则称α为文法G的句型。

若S⇒+α,α∈Vt*,则称α为文法G的句子。

例如:<无符号整数>、<数字串>、<数字串><数字>、<数字><数字>、5<数字>、56等均为文法的句型。而7、78、98、1212、32343、均为文法的句子。

定义5:语言

文法G[S]产生的所有句子的集合,称为文法G[S]所定义的语言,记为L(G[S]),即L(G[S])={w|w∈Vt*,且S⇒*w}。

例如:
求此文法所产生的语言。

通过产生式P我们可以知道,此文法产生的语言是:以终结符a1,a2,…an为运算对象,以∧∨ ~为运算符,以[ , ]为分隔符的布尔表达式串。

定义6:规范推导与规范规约

对于直接推导xAy⇒xβy,如y为Vt串或空符号串,则这种推导就称为规范推导(最右推导);与其对应的规约称为规范规约(最左规约)

例如:规范推导过程
<无符号整数>⇒<数字串>
⇒<数字串><数字>
⇒<数字串>6
⇒<数字>6
⇒66
同时,规范推导所得到的句型称为规范句型(最右句型)

形式语言理论的两个结论
(1)给定一个文法G,就能从结构上唯一的确定其语言,即G→L(G)
(2)给定语言L(G),可确定其文法,但其文法不是唯一的。即L→G1或G2…

定义7:等价文法

G1和G2是两个不同的文法如果L(G1)=L(G2),则称G1和G2 为等价文法。

定义8:递归产生式和递归文法

(1)递归产生式:对于文法G=(Vn,Vt,P,S),若A→α∈P,且有α⇒*xAy,则称产生式A→α是递归产生式。
(2)递归文法:含有递归产生式的文法称为递归文法,递归文法定义的语言集L(G)是无穷的,即递归文法可用有穷的产生式来描述无穷的语言。

定义9:短语、直接短语和句柄

设G[S]=(Vn,Vt,P,S)是给定文法,U∈Vn,x,y,u∈V*,

(1)若有S⇒*xUy⇒+xuy,则称u是句型xuy相对于非终结符号U的短语,特别的若有S⇒*xUy⇒xuy,则称u是句型xuy相对于U的直接短语。其中*表示零步以上推导,+表示一步以上推导。

(2)句型的最左直接短语称为该句型的句柄。

例如:
<无符号整数>⇒<数字串>
⇒<数字串><数字>
⇒<数字串>6
⇒<数字>6
⇒66
6 是句型 <数字>6 相对于 <数字> 的短语
<数字>6 是句型 <数字>6 相对于 <数字串> 的短语
<数字> 是句型 <数字>6 相对于 <数字串> 的直接短语,并且是句柄

定义10:文法的二义性

若文法中存在一个句子对应两棵不同的语法树,则称此文发为二义性文法。

例如:文法G[E]的产生式集合如下:E→ E + E | E * E | (E) | i
其句子i * i + i 的语法树有如下两棵

综合训练

解:(1)aacb是G[S]中的句子。
最左推导如下:
S⇒aAcB
⇒aacB (由A→a推导出)
⇒aacb (由B→b推导出)
最右推导如下:
S⇒aAcB
⇒aAcb (由B→b推导出)
⇒aacb (由A→a推导出)
语法树如下:

直接短语如下:
a是句型aacb相对于A的句柄;
b是句型aacb相对于aAcB的短语
b是句型aAcb相对于aAcB的直接短语

上下文无关文法和语言相关推荐

  1. 上下文无关文法及其分析树

    上下文无关文法是程序设计语言所使用的语法.它的特点是同样的字符串在不同的语境下,意思不变.满足上下文无关文法的语言便于计算机识别和处理.我们已经介绍过,语言是语句的集合,而语句是通过产生式定义的.上下 ...

  2. 到底什么是上下文无关文法?

    在龙书Compilers - Principles, Techniques, & Tools英文版第2版42页中,提到上下文无关文法有以下的特点: 一个终结符的有限集(A set of ter ...

  3. 【编译原理】构造产生如下语言的上下文无关文法各一个:

    13.构造产生如下语言的上下文无关文法各一个: (1) (an bm c2m | n,m≥0 } S->AB A->ε|aA B->ε|bBcc (2) w c wR| w∈{a,b ...

  4. python语言平台无关_从零开始学Python自然语言处理(十二)——上下文无关文法...

    前文传送门: 在说上下文无关文法之前,我们来看看形式语言理论,什么是形式语言理论?形式语言理论形式语言理论是用数学方法研究自然语言或者程序设计语言的理论.研究语言组成规则,而不研究语言的具体含义.说到 ...

  5. 句法模式识别(两)-正规文法、上下文无关文法

    正规的语法特点 1.全部长度有限的语言都是正规的. 2.用正规文法当然能产生无限长串,当中周期反复部分的长度不大于非终止符的长度. 举个样例 在此规则之下.能生成句子 当中周期反复部分为ab,这个样例 ...

  6. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★

    文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 2 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...

  7. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★

    文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 1 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...

  8. 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★

    文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...

  9. 【编译原理】什么是上下文无关文法?

    上下文无关是指,一句话的含义与其前后的内容没有或者几乎没有关系,只由自己决定,把它剪切到其他任何位置,也还是原有的意思. 例如: ... a = 0; ... 这是一个赋值语句,无论此语句的前后是什么 ...

  10. 形式语言与自动机——第三章 上下文无关文法与下推自动机

    文章目录 3.1 推导树与二义性 3.2 上下文无关文法的改写 3.2.1 CFG的最简化 3.2.2 CFG的变换 3.2.2.1 去除可零化的非终结符 3.2.2.2 去除单产生式 3.2.2.3 ...

最新文章

  1. web渗透测试基本步骤
  2. java script 6 折线_Java入门第六篇:Java script(js)的事件
  3. 6个超实用的Sudo命令使用技巧
  4. YESLAB的数据中心课程介绍
  5. 一个比较简单、非常简单的计算器
  6. 应用存储和持久化数据卷:核心知识
  7. 为什么 OAuth 里除了 Access Token 之外,还需要 Refresh Token?
  8. c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展
  9. matlab为自定义后缀文件设置图标_【V3.0更新】| 这可能是全网最好用的文件管理神器了......
  10. restfull服务器端获取文件,使用 FileREST API (获取文件服务) - Azure 文件存储 | Microsoft Docs...
  11. python requests请求失败重试_Python:requests:详解超时和重试
  12. 解决vagrant up出现:An error occurred while downloading the remote file. The errormessage
  13. 色彩空间和色彩域互相转换及转化目的
  14. 面向对象的15位、18位中国大陆身份证号码解析、验证工具
  15. 【ROS】中级操作学习整理-TF坐标变换
  16. Guns二次开发(十二):自定义图片上传插件
  17. Spring Cloud的基本认识和使用Spring Cloud的基本教程(山东数漫江湖)
  18. Linux与git使用引导(git rm 与rm命令)
  19. Dreamweaver 无法粘贴的解决方法
  20. 转:用调制解调器打电话收传真-ModemFax

热门文章

  1. Pyside2 背景图片填充
  2. 硬盘坏道修复软件测试工程师,硬盘坏道检测,教您如何修复硬盘坏道
  3. Python数据处理Tips机器学习中文数据8种常用处理方法
  4. 两个栈实现一个队列,两个队列实现一个栈-JAVA
  5. 算法解析——矩阵快速幂
  6. 打开Internet信息服务及IIS管理器
  7. 教你划分必要开支和非必要开支
  8. 【算法与数据结构】—— 并查集
  9. Github Desktop for macos_zh 汉化
  10. MPUSH消息推送服务器搭建