当前位置:   article > 正文

深入浅出词法分析(正则表达式)_表达式词法解析

表达式词法解析

基本概念

  • 词法分析器的主要任务:读入源程序的输入字符,将他们组成词素,生成并输出一个词法单元序列,每一个词法单元对应于一个词素。

词法分析器还要过滤源程序中的注释和空白和注释
还要将编译器生成的错误消息与源程序的位置联系起来

  • 词法分析器将其转为token的序列,语法分析器每次从词法分析器获得一个token,对不同的token的处理也不同
  • token词法:带有附加信息的字符串
  • lexeme词素:单纯的字符串
  • 关键字/保留字:预先指定的单词(程序语言的关键字如if else等)
  • 标识符:非关键字的以字母开头的字母或数字序列

语言

语言上的运算

Kleene闭包与正闭包区别:正闭包不包含 L 0 L^{0} L0 (空串)

例子
L为A-Z的字母串
M为0-9的数字串
L ∪ \cup M:包含36个字母或数字的串
LM:包含26 × \times × 10个长度为2的串(每个串都是一个字母跟一个数字)
L ∗ L^{\ast} L:所有有字母构成的串的集合,包括空串 ε \varepsilon ε
L 4 L^{4} L4:所有由四个字母构成的串的集合
L ( L ∪ M ) ∗ L (L \cup M)^{\ast} L(LM):所有以字母开头,字母和数字组成的串的集合

正则语言(Regular Language)

描述词素——正则表达式
  • ε \varepsilon ε是一个正则表达式, L ( ε ) = { ε } L\left(\varepsilon \right)=\left\{\varepsilon \right\} L(ε)={ε} ,该语言只包含空串
  • 如果 a a a ∑ \sum 上的一个符号,那么a是一个正则表达式,并且L(a)={ a a a}

a a a是一个符号 a是正则表达式

  • 正则表达式与语言运算的对应

  • 正则表达式的运算级: ∗ \ast 》 连接运算符 》 |

  • 正则集合(正则表达书等价,与代数定律中的交换律,结合律相似)

正则定义( Regular Definition )

简单来说就是将一些正则表达式命名为 d 1 d_{1} d1 , d 2 d_{2} d2 符号等等,然后由这些符号就构成的集合
例子——c语言的标识符

正则表达式的扩展
  • 字符类:表示字母或数位时可以用连词符-缩写
    [abc]=a|b|c
    [a-z]=a|b|…|z
    [0-9]=0|1|…|9
  • ^:可表示非的意思
    ⊳ \vartriangleright [^abc]表示匹配出a b 或c外的任意字符
  • ^在[ ]外表示匹配开头
    ⊳ \vartriangleright ^ab表示匹配以ab开头的
  • $或\b表示匹配结尾
    ⊳ \vartriangleright ab$ ,ab\b表示ab结尾的
  • i 表示忽略大小写
//两条斜线之间的是正则文体,表示匹配abc或者ABC
/^abc/i
  • 1
  • 2
  • g:正则一般匹配到第一个就结束,加上全局修复符可以匹配到结束
  • m 让^和$匹配行首和结尾 (\n)
  • \s表示匹配空白字符,包括空格,制表符,换页符等
  • 单目后缀运算符*: 匹配0-n次
  • 单目后缀运算符+:表示一个正则表达式及其语言的正闭包(不包含空串 ε \varepsilon ε) (匹配1-n次)
    L ∗ L^{\ast} L= L + L ^{+} L+ | ε \varepsilon ε
    L + L ^{+} L+= L L ∗ LL^{\ast} LL= L ∗ L L^{\ast}L LL (开头或者结尾有一个L 即不为空串)
  • 单目后缀运算符?:表示零个或一个出现(匹配0次或1次)非贪婪模式
    L ? = L ∣ ε L?=L| \varepsilon L?=Lε
  • {n}匹配n次
    ⊳ \vartriangleright a{2}表示匹配aa
  • {m,n}表示匹配m到n次
    ⊳ \vartriangleright a{1,3}表示匹配 a|aa|aaa
  • {m,}表示匹配 m − ∞ m-\infty m
    ⊳ \vartriangleright a{3,}表示匹配aaa…
  • 转义符\,引用的语法:\数字表示引用前面的第几个捕获分组
    ⊳ \vartriangleright <(div)><\/\1>可以匹配 <div></div>
  • 不以ab字符串为开头的字符串,可以这样写^(?!ab)[a-z]+$
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/540824
推荐阅读
  

闽ICP备14008679号