美文网首页
【编译原理系列】文法的定义

【编译原理系列】文法的定义

作者: zgljl2012 | 来源:发表于2016-12-26 14:38 被阅读546次

当我们要描述一种语言时,需要给出这种语言的所有句子,当句子的数目是有限可数时,就要都列出来;当句子是一个无穷集,也就是无限不可数时,就要给出可以表示它们的结构的描述方法或者说,句子的组成规则。这种规则就是文法

从形式上用于描述和规定结构的称为文法(或者说语法)

下面是文法的定义:

文法G定义为一个四元组(VN,VT,P,S),其中,VN为非终结符集合,VT终结符集合;P是产生式结合;S称为识别符或开始符号,也是一个非终结符,至少要在一条产生式的左边出现。

出现了几个名词,终结符、非终结符、产生式、识别符/开始符号等。下面具体聊聊这些名词和文法的定义。

VN是非终结符集合,非终结符N指的是可以被拆分的字符或串,它采取递归定义:一个非终结符是由终结符和至少一个非终结符组成的串,相对应的,终结符就是不可拆分的,语言中要用到的字符。所以VN中所存储的是所有的非终结符,VT中存储的是所有的终结符。

简单点讲:终结符就是推导到终结符时,不可再推导下去;而非终结符可以继续推导下去。

集合P存储的是所有的产生式。那什么是产生式呢?产生式就是推导规则。比方说 a→b 就是一条规则,即一条产生式,可以通过 a 推导出 b。

对照前面说的非终结符和终结符,就应该可以理解,在产生式左边的只能是非终结符,因为终结符不能再推导下去。而右边可以有终结符和非终结符。用数学的集合知识表示就是:

产生式的形式是α → β,α称为产生式左部,β称为产生式右部,α属于VN,β∈(VN∪VT)*,α∉ε

最后是S,S是开始符号,也就是最开始的那条产生式左边的非终结符,一切的推导从它开始。比方说

a → b
b → c|d
c → e

其中,a → b就是最开始的产生式,a就是最开始的非终结符,就是S。S是非终结符,所以S∈VN

以上就是编译原理中文法的定义以及相对应的没那么学术化的解释。


我的微信公众号:


相关文章

  • 【编译原理系列】文法的定义

    当我们要描述一种语言时,需要给出这种语言的所有句子,当句子的数目是有限可数时,就要都列出来;当句子是一个无穷集,也...

  • 编译原理-文法定义

    一. 文法公式 文法定义公式如下: VT : 终结符集合 终结符就是不可以再推导的字符。也就是说对于一个字符 a ...

  • 编译原理系列之二 文法和语言

    文法和语言 ε,{ε},Ø三者之间的区别 :ε是一个终结符推导出的结果,表示一个不包含任何字符的序列。Ø是不包含任...

  • 使用新版本golang项目中goyacc依赖问题的处理

    背景 最近项目使用中有用到go mod 和 goyacc工具。goyacc涉及到编译原理的词法分析,文法分析等功能...

  • Android View(转)

    自定义View的原理自定义View基础 - 最易懂的自定义View原理系列自定义View Measure过程 - ...

  • 解析器模式

    一、模式简介 定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子,用编译语言...

  • Flutter环境配置

    Flutter、Golang、Python、编译原理、算法、Chrome原理学习系列文章抢先看请关注【码农帮派】:...

  • c语言实现First文法

    最近编译原理课程实验做LL(1)中的First和Follow文法的算法实现,百度了半天,要么是要钱,要么是觉得好复...

  • 解释器模式(Interpreter)

    - 定义 给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言...

  • 编译原理一

    编译原理 正规式或NFA到DFA最小化 四元式DAG图的优化,根据要求写出优化结果翻译到目标代码 给你文法,给你句...

网友评论

      本文标题:【编译原理系列】文法的定义

      本文链接:https://www.haomeiwen.com/subject/azxjvttx.html