当前位置: 首页 > news >正文

编译原理--文法定义(哈工大)

文法的定义讲解整理

一、文法引入:自然语言

下面我们来学习文法的定义。什么是文法?我们先从一个自然语言的例子讲起。这是一个简化版本的,用来描述英语句子构成规则的文法。从这个文法中我们可以看出,一个句子是由一个名词短语加上一个动词短语构成的。那么一个名词短语可以是由一个形容词加一个名词短语构成。还可以由一个名词构成。一个动词短语是由一个动词加上一个名词短语构成。形容词可以是 little,名词可以是 boy 或者 apple,动词可以是 eat。

二、文法核心组成要素的提取

从这个例子中,我们可以提取出一些文法的组成要素。在这个文法中出现的符号可以分为两类,这些用尖括号括起来的部分称为是语法成分,而未用尖括号括起来的部分表示语言的基本符号。因为这个文法是用来描述句子的构成规则的,那么句子的基本符号就是单词。如果一个文法是用来描述单词的构成规则的话,那么这个文法的基本符号就是字母。

三、文法的形式化定义(四元组)

那么根据这个例子,我们可以给出文法的形式化定义。文法我们用大写字母 G 来表示。我们把一个文法 G 定义成一个四元组。这里的这个 VT。VT 是终结符集合,V 表示向量 vector,T 表示终结符 terminal symbol。那么什么是终结符呢?终结符就是文法所定义的语言的基本符号。例如在刚才的这个例子中,这个文法是用来描述句子的组成规则的。那么句子的基本符号是单词,因此这些单词构成了这个文法的终结符集。终结符有时候也称为 token。这里的 VN 是非终结符集合,非终结符是用来表示语法成分的符号。

例如刚才这个文法中,用尖括号括起来的这些符号。由于可以从它们进一步推导出其他的语法成分,因此它们称为是非终结符。非终结符有时也称为是语法变量。

这里我们需要注意一下终结符集合和非终结符集合,它们是不相交的。终结符非终结符统称为文法符号。因此,VT 并上 VN 表示的是文法符号集。文法中的这个 P,表示的是产生式的集合。产生式描述了将终结符和非终结符组合成串的方法。简而言之。产生式就是用来产生串的式子。产生式的一般形式是阿尔法α加一个箭头,加上一个贝塔β,读作阿尔法α定义为贝塔β。从这两个式子我们可以看出,阿尔法α和贝塔β表示的是文法符号串。因为这个 VT 是终结符集合,它是一个字母表,VN 是非终结符集合,它也是一个字母表。那么这两个字母表的并集还是一个字母表。我们前面讲过。字母表的闭包表示的是这个字母表上的符号串构成的集合。因此,阿尔法α和贝塔β都是文法符号串。这里我们要求阿尔法α中至少要包含一个非终结符。阿尔法α也称为产生式的头或者左部,贝塔β称为产生式的体或者右部。

例如在刚才的这个文法中的每一条规则都是一个产生式。文法中的 S 表示的是文法的开始符号。S 是一个特殊的非终结符,它表示的是该文法中最大的语法成分。例如在刚才的这个例子中,这个文法是用来描述句子的构成规则,那么句子就是这个文法中最大的语法成分。因此这个就是这个文法的开始符号。

四、文法实例:算术表达式文法

下面我们来看一个文法的例子。这是一个简化版本的,用来表示算术表达式的文法。在这个文法中,终结符集合中包括了以下几个终结符,分别是 ID,也就是标识符,加号。乘号、左括号和右括号,这些都是最终出现在句子中的单词。因此它们构成了这个文法的终结符集合。这个文法的非终结符集合中只有一个非终结符。是 E,E 表示的是表达式,Expression。那么我们来看一下这个文法,它的产生式集合有 4 个产生式,分别是,E 定义为 E+E。E 定义为 E 乘 E,E 定义为括号 E,E 定义为 ID。由于这是一个用来描述表达式的文法,因此表达式是这个文法最大的语法成分,那么,E 就是这个文法的开始符号。而且这个文法中也没有其他的非终结符。我们这里约定,在不引起歧义的前提下,可以只写文法的产生式。例如这个文法我们可以简写为这种形式,就是只把它的产生式列出来,就可以表示这个文法。

五、产生式的简写规则

下面我们来看一下产生式的简写。对一组有相同左部的阿尔法产生式,阿尔法α定义为贝塔一

,阿尔法α定义为贝塔二,一直到阿尔法α定义为贝塔 N。可以简记为阿尔法α定义为贝塔一竖线、贝塔二竖线,一直到竖线贝塔 N。读作阿尔法定义为贝塔一或者贝塔二。或者一直到贝塔 N。那么贝塔 1 到贝塔 N称为是阿尔法的候选式。例如,对于这些 E 产生式,我们就可以把它简写成,E 定义为 E+E 或 E×E 或括号 E,或 id。

六、文法符号的使用通用约定

为了避免总是声明哪些符号是终结符,哪些符号是非终结符。这里我们对符号的使用做一些约定。我们约定,下述符号是终结符。字母表中排在前面的小写字母,比如说 a b c 表示的是终结符。另外,运算符、标点符号和数字都是终结符。粗体的字符串,比如说 id if 等等,它们也是终结符。

我们约定,下述符号是非终结符。字母表中排在前面的大写字母,有大写的 A、B、C,它们表示的是非终结符。另外字母 S 通常用来表示文法的开始符号,因此它也是一个非终结符。小写斜体的名字,比如说 E S P R 用来表示表达式 Expression S T M T 用来表示句子 Statement。那么他们这些小写的斜体名字都表示非终结符,除了字母表中排在前面的大写字母以外,用来代表程序构造的一些大写字母。比如说 E、T、F 等等,也是非终结符。这里,E 表示的是表达式,expression。T 表示的是项,term。F 表示的是因子,factor。

我们约定字母表中排在后面的大写字母,比如说大写的 X、Y、Z,它表示的是文法符号。也就是说它既可以表示终结符,也可以表示非终结符。字母表中排在后面的小写字母主要是 u v w x y z 它们表示的是终结符号串。既然是串,就有可能是空串,因此这里包括空串。小写的希腊字母,比如说阿尔法、贝塔、伽马等等,它们表示的是文法符号串。既然是文法符号串,那么也包括空串。除非特别说明,第一个产生式的左部就是文法的开始符号。我们来总结一下,字母表中排在前面的小写字母用来表示终结符,字母表中排在前面的大写字母用来表示非终结符。字母表中排在后面的大写字母用来表示文法符号,文法符号既可以是终结符,也可以是非终结符。而字母表中排在后面的小写字母用来表示终结符号串。而小写的希腊字母用来表示文法符号串。

http://www.jsqmd.com/news/450117/

相关文章:

  • MATLAB常见错误与高效调试技巧
  • 分享浙江森谷声学技术有限公司情况,森谷声学反馈好不好呢 - 工业设备
  • Trae轻松安装openclaw的教程-附带免费token
  • 题解:AT_abc441_e [ABC441E] A > B substring
  • 2026年有实力的财税合规公司哪家好,华光讯服务物流运输中小企业 - 工业推荐榜
  • 2026年中国留学生求职机构权威榜单发布:五大品牌服务实力深度排位赛 - 品牌推荐
  • 佛山深信服EDR杀毒免费上门服务
  • ARP欺骗一篇文章讲透:原理、攻击与防御全解析
  • 2026软著版本号怎么填?V1.0还是1.0?如何保证材料全局一致不补正
  • java字面量
  • 基于西门子S7-200 PLC的智能照明控制系统设计与实现:包含电路图、IO表、源程序及单机组...
  • 2026恒压变频供水设备市场,这些厂家口碑佳,无负压供水设备/消防泵/污水提升设备,恒压变频供水设备实力厂家哪个好 - 品牌推荐师
  • 二手观光车性价比高的企业
  • 【运维实操】浅谈CDN在网站运行中的核心价值,360CDN实操体验分享
  • 收藏!2026大模型转行/入门指南:普通人落地AI的实战路线(避开90%新手坑)
  • 传统分块已死?Agentic Chunking拯救语义断裂,实测RAG准确率飙升40%!
  • 2026年和你一起品味浙江静音房设计来图定制企业哪家好 - 工业品网
  • 华为 S5700 三层交换 VLAN 互通与 ACL 隔离实战笔记
  • hot100 62.不同路径
  • Flutter 三方库 coingecko_api 的鸿蒙化适配指南 - 掌控货币行情资产、精密金融治理实战、鸿蒙级行情专家
  • AiPPT接口文件PHP版本全,智能生成PPT文件并下载
  • 不需要 RAG!在 30 分钟内构建一个问答 AI 代理-万字长文,慎点!
  • 计算机专业大二大三学生找后端开发找实习如何规划?如何就业找工作?
  • 马斯克百万卫星太空AI数据中心计划刚申报,哈佛前NASA专家:这比我们想象的还要灾难10倍!
  • 微信小程序 python+AI 高校教师科研成果管理平台_i4kt68eq
  • SpringBoot微服务全链路压测实战详解
  • 让计划可以添加图片的功能实现
  • 新手转行入门AI大模型,真的一点都不难,看这份教程就行了(附教程)
  • DeepAgents的沙箱后端实战+Skills Agent+openclaw+AI大模型简历指导+项目包装+面试技巧+核心技能!
  • 盒马鲜生礼品卡变现全攻略:快速兑换现金的方法与技巧 - 团团收购物卡回收