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

    技术2022-07-11  84

    正则表达式记号

    串:

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

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

    串的部分:

    记一个字符串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.csdn.net/qq_28033719/article/details/107068996

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

    Processed: 0.015, SQL: 9