#编译原理# 词法分析(三)第二部分 (2)

c. 对字母表中存在的字母符号如正则式a,由x射出符号为该字符的弧到y

#编译原理# 词法分析(三)第二部分

 

(x,y为状态,只是构建的临时初态终态,符号即是正则表达式中读取到的字符(从左到右分解))

 

多个正则式,例如s,t,他们的NFA为Ns和Nt

a. R=s|t

 

#编译原理# 词法分析(三)第二部分

b. R=st

 

#编译原理# 词法分析(三)第二部分

c. R=s*

 

#编译原理# 词法分析(三)第二部分

d. R=(s),和R=S的NFA一样

 

例:

 

#编译原理# 词法分析(三)第二部分

1.从里开始构建NFA

 

#编译原理# 词法分析(三)第二部分

 

#编译原理# 词法分析(三)第二部分

 

#编译原理# 词法分析(三)第二部分

2.从外开始构建

 

#编译原理# 词法分析(三)第二部分

 

4.DFA M转正则表达式

规则:

(1)在M上加两个结点x,y。从x用空符号弧连接到M的所有初态节点,从M的所有终态节点用空符号弧连接到y,形成和M等价的的M’,此时只有一个初态一个终态。

(2)消除M’中的其他节点(除了x,y)

1.邻合并

 

#编译原理# 词法分析(三)第二部分

2.并变或

 

#编译原理# 词法分析(三)第二部分

3.递归加边加星号

 

#编译原理# 词法分析(三)第二部分

 

即正则表达式转NFA倒过来

 

例:

 

#编译原理# 词法分析(三)第二部分

 

#编译原理# 词法分析(三)第二部分

 

#编译原理# 词法分析(三)第二部分

  5.正则文法 G转正则表达式

三个规则,可将正则文法转换为一个只剩一个开始符号的产生式,并且右侧不含非终结符,仅含对应的表达式。转换后的产生式应用扩充的BNF表示,而在标识符好的0~n次重复时应该用*代替

(1)代入规则:对A→xB,B→y转化为A→xy

(2)消除递归规则:对A→xA|y转化为A→x*y

(3)BNF规则:对A→x,A→y转化为A→x|y

注:左线性的话,对A→Ax|y转化为A→yx*

例如:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppdws.html