词法分析(编译原理)

文章探讨了正规式与正规文法之间的转换规则,提供了转换实例,如将正规式r=a(a|d)*转化为正规文法。同时,介绍了不确定和确定的有穷自动机(NFA和DFA),特别是NFA的功能和结构特点,并讨论了DFA的最小化方法——分割法。
摘要由CSDN通过智能技术生成

 正规式和正规文法的相互转换

(正规式即正则表达式,正规文法即3型文法)

1.  对形如A=>x*y的正规式产生式,重写为

A=>xB

A=>y

B=>xB

B=>y,B为一个新的非终结符

2. 对形如A=>x|y的正规式产生式,重写为

A=>x

A=>y

例如:将r=a(a|d)*转换为相应的正规文法

首先,令S为开始符号,则S=a(a|d)*,然后形成S=>aA和A=>(a|d)*

再变换成S=>aA   A=>(a|d)B  A=>ε B=>(a|d)B  B=>ε

最后全部变为符合正规文法的表达式:

S=>aA A=>aB A=>dB B=>aB B=>dB A=>ε  B=>ε

 

 

文法产生式

正规式

规则1

A=>xB  B=>y

A=xy

规则2

A=>xA|y

A=x*y

规则3

A=>x  A=>y

A=x|y

例如:有下列文法G[S]

S=>aA

S=>a

A=>aA

A=>dA

A=>a

A=>d

首先,进行合并,S=>aA|a,  A=(aA|dA)|(a|d)=(a|d)A(a|d)=(a|d)*(a|d)

再将A的右端带入S可得

S=>a(a|d)*(a|d)|a

即S=>a(a|d)*

  • 正规文法转换成正规式
  • 正规式转换成正规文法

 不确定的有穷自动机(NFA)            功能:准确地识别正规集

           M = (K,Σ,f,S,Z)

其中:(1)K是一个有穷集,每一个元素是一个状态

  (2)Σ是一个有穷字母表,每个元素代表一个输入符号。

  (3)f是转换函数,是K*Σ=>K上的全体子集的映像。即K*Σ=>2k,2k表示k的幂集。

  (4)S∈K,是唯一的一个初态

  (5)Z包含于K,是一个终态集也称为可接受状态或结束状态。

 

也就是说,最大的不同点在于可以多值映射。例如书上

0状态在读取a之后,可能到0状态,也可能到3状态。是一种一对多的关系。


 确定有穷自动机的化简

最小化问题,采用分割法

首先将子集,按终态和非终态划分为两个子集,然后看子集里的元素等不等价,把等价的元素分在一起。最后,这些等价的子集用其中一个元素表示即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值