[编译原理随记]正则表达式记号和状态图
正则表达式记号
串:
通常接触多的名词是字符串,那么串,可以认为是一种数据,类型为任意的,是有穷序列(概念上可以数的完的序列)。
语言中句子和字,相当于“符号串”的意思。
串的部分:
记一个字符串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、 是 LLLL,四个L元素 (A/B) (A/B) (A/B) (A/B)
4、 是任意个L,包括空,也叫克林闭包
5、就是L开头,任意个PL并集 (A/B) (A/B/1/2)*
6、 真子集L(真子集就是至少一个),也叫正闭包
符号优先级:
*优先级最高,| 优先级最低,中间是连接符
所以综合起来,写一个标识符的正则是 [A-Za-z]+[A-Za-z0-9]* 或者 [A-Za-z][A-Za-z0-9]*
状态图
编译时候,比如识别 >= 那么就需要识别 > 然后识别 = 才确定是一个 >= 的状态,那么就有一个小流程
就是识别了>,再识别=,有可能识别为其他标识符,或者乱用符号报错。
那一般算术运算符状态流程就会这样:
根据正则写出来的标识符状态图:
这样子描述的图就叫状态图(当然不止这些样子)
下级文章
[编译原理随记]子集构造算法:https://blog.****.net/qq_28033719/article/details/107068996