程序设计语言正规式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序设计语言正规式相关的知识,希望对你有一定的参考价值。

参考技术A 词法分析是把构成源程序的字符串转换成单词符号序列。词法规则可用 3型文法 (正规文法)或正规表达式描述,他产生的集合是语言基本字符集Σ(字母表)上的字符串的一个子集,称为正规集。

正规式是一种表示正规集的工具,正规式是描述程序语言单词的表达式,对于字母表Σ。

正规式(正规表达式)的运算符有3个,优化级从高到低顺序排列为:*(闭包)、·(连接,可省略)、|(或)。

正规式  →  正规集

ab  →  字符串ab构成的集合

a|b  →  字符串a、b构成的集合

a*  →  由0个或多个a构成的字符串集合

(a|b)*  →  所有字符a和b构成的串的集合

a(a|b)*  →  以a为首字符的a、b字符串的集合

(a|b)*abb  →  以abb结尾的a、b字符串的集合

有限自动机可以转换为正规式,正规式也可以转换为有限自动机。

词法分析器的构造步骤:

1)用正规式描述语言中的单词构成规则。

2)为每个正规式构造一个NFA,它识别正规式所表示的正规集。

3)将构造出的NFA转换成等价的DFA。

4)对DFA进行最小化处理,使其最简。

5)从DFA构造词法分析器。

正规文法和正规式

 1.分别写出描述以下语言的正规文法和正规式:

L1={abna|n≥0}

正规文法:

S->aA

A->Ba

B->ε|bB

正规式:ab*a

L2={ambn|n≥1,m ≥1}

正规文法:

S->AB

A->aA|a

B->bB|b

正规式:aa*bb*

L3={(ab)n|n≥1}

正规文法:

S->aA

A->bB

B->aA|ε

正规式:(ab)*(ab)

2.将以下正规文法转换到正规式

Z→0A
A→0A|0B
B→1A|ε

答:

A=0A+0(1A+ε)=0A+01A+0=(0+01)A+0=(0+01)*0=(0|01)*0

Z=0(0|01)*0

 

Z→U0|V1
U→Z1|1
V→Z0|0

 

答:

V=(V0+V1)1+1

V=(V0+V1)0+0

Z=(Z1+1)0+(Z0+0)1

Z=Z10+10+Z01+01

Z=(10+01)*(01+10)

Z=(10|01)*(01|10)

 

S→aA
A→bA|aB|b
B→aA

 

答:

S=a(bA+aaA+b)

S=abA+aaaA+ab

S=(ab+aaa)*ab

S=(ab|aaa)*ab

 

 

I→L|IL|Id

答:

I=L+IL+Id=L+I(L+d)=(L+d)*L=(L|d)*L

以上是关于程序设计语言正规式的主要内容,如果未能解决你的问题,请参考以下文章

软件设计师笔记-----程序设计语言与语言处理程序基础

程序设计语言与语言处理程序基础

函数绘图语言解释器

软考重点5 程序设计语言

初级程序员软考重点5 程序设计语言

正规文法和正规式