zoukankan      html  css  js  c++  java
  • 编译原理-词法分析02-正则表达式

    0.术语

    r

    r:正则表达式,表示字符串的格式。

    L(r)

    r所匹配的串的集合。

    symbol符号

    L(r)中的元素称为符号。

    alphabet字母表

    表示符号的字符的集合。用 ∑ (sigma)表示。

    元字符metacharacter,元符号metasymbol

    它们非字母表中的字符,是一些特殊意义的字符,比如,*. 如果要匹配这类符号,则需要使用转义符号。

    escape character转义字符

    一般使用表示,用于匹配元字符。

    空串empty string

    不包含任何字符的串,但它仍然是一个匹配。用ε(eplsilon)表示

    空集empty set

    表示正则表达式无任何匹配。

    regular definition正则定义

    即正则表达式的名字。

    1.正则表达式的定义

    正则表达式是以下中的一种:

    1. 基本正则表达式由单个字符a(其中a在正规字符的字母表 ∑ 中),以及元字符ε或元字符 Φ。 分别表示为:
    • L(a) = {a};
    • L(ε) = {ε};
    • L(Φ) = {}.
    1. r|s格式的表达式:其中r和s均是正则表达式。在这种情况下:L(r|s) = L(r)|L(s)。
    2. rs格式的表达式:其中r是正则表达式。在这种情况下:L(rs) = L(r)L(s)。
    3. r格式的表达式:其中r是正则表达式。在这种情况下:L(r) = L(r)*。
    4. (r)格式的表达式:其中r是正则表达式。在这种情况下:L((r)) = L(r),因此,括号并不改变语言,它们只调整运算的优先级。

    注意到这个定义中,|,*,(,),Φ,ε均为元字符。

    2.扩展

    • r+ 正闭包,至少匹配一个

    • . 匹配任意一个字符

    • 区间匹配 如[a-z],[0-9],[A-Za-z]

    • ~a或^a 排除匹配

    • r? 可选匹配

    3.程序语言记号的正则表达式

    • number
    nat = [0-9]+ #自然数
    signedNat = (+|-)?nat #有符号数
    number = signedNat("."nat)?(E signedNat)? #数字,包含整数,小数,正负数,指数
    
    • reserved & identifier
    reserverd = if | while | then | repeat | do ...
    letter = [a-z]
    digit = [0-9]
    
    identifier = letter(letter|digit)*
    
    
    • comment
    {(~})*} #匹配{ this is a Pascal comment}
    
    
    • whitespace

      解决匹配的二义性遵循最长子串原理principle of longest。

    whitespace = (newline | blank | tab | comment) *
    
  • 相关阅读:
    Stm32cubemx_v6-1-1 提示需要JDK8版本,但已经安装JDK11 exe4j
    [Linux 内核驱动开发] 根据设备寻找驱动等信息
    DNS/mDNS/DoH/DoT 等DNS协议概括
    常用的在线工具网站
    计算机学科名词解析:透明
    Makefile 的用处,解决已包含头文件但还是 undefined reference to
    Oracle DataBases 12C Realeased2
    jz2440 开发板玩法
    树莓派 Zero W 安装与内核驱动开发入门
    深度学习与机器人结合 帮你做家务
  • 原文地址:https://www.cnblogs.com/pengzhen/p/5835703.html
Copyright © 2011-2022 走看看