编译原理(二) 文法和语言

字母表和符号串

  1. 字母表Σ:符号(元素)的非空有穷集合
    字符(符号):可以相互区别的记号

  2. 符号串:由字母表Σ中的符号组成的任何有穷序列称为该字母表上的符号串

(1) 空符号串ε:没有符号的符号串

Σ={a,b}
ε,a,b,ab,aa,aabba…都是Σ上的符号串

(2)符号串S的头(前缀):移走符号串S尾部的0个或多于0个符号得到的符号串。

如:b是符号串banana的一个前缀

符号串S的尾(后缀):删去符号串S头部的0个或多于0个符号得到的符号串。

如:nana是符号串banana的一个后缀

(3)符号串S的字串:从s中删去一个前缀和一个后缀得到的符号串

如:nan是符号串banana的一个子串

对于每个字符串S,S和ε都是符号串S的前缀、后缀、字串。

  1. 符号串的运算
    (1)符号串的长度:符号串中符号的个数,符号串的长度记为|S|,
    ε的长度为0
    (2) 连接:符号串x,y的连接是把y符号写在x的符号之后得到的符号串xy,
    (3)方幂:符号串自身连接N次得到的符号串
    (4)符号串的集合

两个符号串集合A和B的乘积定义为:

若集合A中所有元素都是某字母表E上的符号串, 则称A为字母表E 上的符号串集合。

AB ={xy |x∈A且y∈B}

若集合A={ab,cde} B = {0,1}, 则
AB={ ab1 , ab0, cde0 , cde1}

  1. 闭包:使用Σ^表示Σ上的一切符号串(包括 ε)组成的集合。Σ*称为Σ的闭包。
    Σ上的除ε外的所有符号串组成的集合记为Σ^。Σ称为Z的正闭包。

文法和语言的形式定义

1.终结符:语言中不可再分的基本符号,通常是一个语言的字母表。如程序设计语言中的基本字、常数、运算符、分界符等。

2.非终结符: 它不像终结符代表了语法的最小元素,是一种个体记号,它是一个类、一个集合。一个非终结符代表了一定的语法概念。程序设计语言中常见的语法单位有“过程”、“赋值语句” 、“表达式”等。

3.开始符号:是一个特殊的非终结符。

4.产生式:构造某个语法时应满足的规则

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

语言是由句子组成的集合。是由一组符号所构成的集合。

语法数和文法的二义性

在这里插入图片描述

语法树的构造过程:

以文法开始符号 S为根结点随着推导的逐步展开,对句型中某个非终结符A用相应产生式A- a的右部替换时,为A的结点生成其子结点依次为a的子树,直至推导结束。

在这里插入图片描述

在这里插入图片描述

文法的二义性:

若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
或者, 若一个文法存在某个句子有两个不同的最左(右)推导,则称这个文法是二义的。

文法的类型

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值