编译原理--文法

文法

终结符:不能单独出现在推倒式的左边。具有原子性,不可在分。

非终结符:可以拆分的元素。

一般用大写代表非终结符,用小写字母代表终结符。


文法类型:

0型文法:G=(Vn,Vt,P,S),如果每个产生式α→β都符合,a∈(VnUVt)*且至少含有一个非终结符,β∈(VnUVt)*,则G是一个0型文法。

0型文法也成为短语文法。

0型文法的能力相当于图灵机(Truing)。任何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。

PS:

Vn:非终结符的集合

Vt:终结符的集合

P:推导式的集合

S:推导符

()*递包的含义是用括号内任意的元素进行组合拼接起来的一个串


1型文法:

0型文法是基础,在0型文法α→β的基础上。有|β|>=|α|。|β|表示β的长度。

又称为:上下文有关文法。

此文法对应于线性有界自动机。

特例:α→ξ(空) 也满足1型文法。


2型文法:

在1型文法的基础上,每一个α→β都有α是非终结符。

又称为:上下文无关文法。


3型文法:

3型文法是在2型文法的基础上。A→α|αB(右线性)或A→α|Bα(左线性)。“|”为或的意思。

必须注意:它的规则只能符合前面的或者后面的,如果同时A->Ba,B->aB。则不符合3型文法。

即要不都符合左线性,要不就都符合右线性。不能两个掺和着。

又称为:正规文法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验2 文法的读入、判定和处理 一、实验目的 熟悉文法的结构,了解文法在计算机内的表示方法。 二、实验内容 1、 设计一个表示文法的数据结构; 2、 从文本文件中读入文法,利用定义的数据结构存放文法,并输出; 3、 本实验结果将来还有用。 三、实验要求 1、 了解文法定义的4个部分: G(Vn, Vt, S, P) Vn 文法的非终结符号集合,在实验中用大写的英文字母表示; Vt 文法的终结符号集合,在实验中用小写的英文字母表示; S 开始符号,在实验中是Vn集合中的一个元素; P 产生,分左部和右部,左部为非终结符号中的一个,右部为终结符号或非终结符号组成的字符串,如S->ab|c 2、 根据文法各个部分的性质,设计一个合理的数据结构用来表示文法, 1) 若使用C语言编写,则文法可以设计成结构体形,结构体中应包含上述的4部分, 2) 若使用C++语言或java语言编写,则文法可以设计成文法类形,类中至少含有4个数据成员,分别表示上述4个部分 文法数据结构的具体设计由学生根据自己想法完成,并使用C或C++语言或Java实现设计的数据结构。 3、 利用完成的数据结构完成以下功能: 1) 从文本文件中读入文法文法事先应写入文本文件); 2) 根据文法产生的结构,分析出文法的4个部分,分别写入定义好的文法数据结构的相应部分; 3) 整理文法的结构,判断该文法文法类型,是否为0型,1型,2型或3型文法,并输出判断结果; 4) 在计算机屏幕或者文本框中输出文法文法输出按照一个非终结符号一行,开始符号引出的产生写在第一行,同一个非终结符号的候选用“|”分隔的方输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值