[编译原理随记]正则表达式记号和状态图

正则表达式记号

串:

通常接触多的名词是字符串,那么串,可以认为是一种数据,类型为任意的,是有穷序列(概念上可以数的完的序列)。

语言中句子和字,相当于“符号串”的意思。

串的部分:

记一个字符串S = apple,有

1、S前缀: app为S前缀,是以apple的a开头的连续序列,包括空

2、S后缀:le为S后缀,是去掉任意S前缀剩下的序列,包括空

3、S子字符串:pp为S子字符串,是去掉任意前缀和后缀得到的序列,包括空

4、S子序列:pl为S子序列,只要S包含的相同数量的字符序列就行

集合:

设L = {A,B},P= {1,2}

1、那么L U(并) P就是L和P并集 {A,B,1,2}

2、LP是一个L元素,后面跟着一个P元素 (A / B)(1 / 2)

3、L^{4} 是 LLLL,四个L元素 (A/B) (A/B) (A/B) (A/B)

4、L^{*} 是任意个L,包括空,也叫克林闭包

5、L (P \bigcup D)^{*}就是L开头,任意个PL并集 (A/B) (A/B/1/2)*

6、L^{+} 真子集L(真子集就是至少一个),也叫正闭包

符号优先级:

*优先级最高,| 优先级最低,第二是连接符

所以综合起来,写一个标识符的正则是 [A-Za-z]+[A-Za-z0-9]*  或者 [A-Za-z][A-Za-z0-9]*


状态图

编译时候,比如识别 >= 那么就需要识别 > 然后识别 = 才确定是一个 >= 的状态,那么就有一个小流程

就是识别了>,再识别=,有可能识别为其他标识符,或者乱用符号报错。

那一般算术运算符状态流程就会这样:

根据正则写出来的标识符状态图:

这样子描述的图就叫状态图(当然不止这些样子)


下级文章

[编译原理随记]子集构造算法:https://blog.csdn.net/qq_28033719/article/details/107068996

[编译原理随记]正则表达式转为DFA状态图(Thompsion构造法):https://blog.csdn.net/qq_28033719/article/details/107084565

猜你喜欢

转载自blog.csdn.net/qq_28033719/article/details/107067798