编译原理记录1——词法分析正则表达式

词法分析概念

  1. 词素(lexeme):源程序中的字符序列,它和某类此法单元的模式匹配,被词法分析器识别为该词法单元的实列。

  2. 词法单元(token):包含单元名(tokenname)和可选的属性值(attribute-value)。单元名是表示某种词法单位的抽象符号。语法分析器通过单元名即可确定词法单元序列结构。

  3. 模式(pattern):词法单元对应的词素可能具有的形式,可以用正则表达式来表示。

语言

  1. 概念:
    字母表: 一个有限的符号集合
    串:字母表中符号组成的一个有穷序列
    串s长度:|s|
    空串ε,长度为0
    语言:给定字母表上一个任意可数串的集合
  2. 串的运算:
    连接:把y附加在x后,记作xy
    幂运算: s^0=ε, s^1=s
  3. 语言的运算:
    L∪M={s|s∈M或s∈L}
    LM={st|s∈L,t∈M}
    L*=∪0~∞Li
    L+=∪1~∞Li

正则表达式

正则表达式的递归构建:

  1. 基本部分:
    1. ε是一个正则表达式,L(ε)={ε}
    2. 若a为Σ上的一个符号,那么a是正则表达式,L(a)={a}
  2. 归纳步骤:
    1. 选择:®|(s),L(®|(s))=L®∪L(s);
    2. 连接:®(s),L(®(s))=L®L(s);
    3. 闭包:®,L(®)=(L®)*;
    4. 括号:®,L(®)=L®。
  3. 运算优先级:* 连接 |

正则表达式的性质

  1. 等价性: 若两个正则表达式r和s表示同样的语言,则r=s。
  2. 定律:
    1. 选择是可交换的:r|s=s|r
    2. 选择是可结合的:r|(s|t)=(r|s)|t
    3. 连接是可结合的:r(st)=(rs)t
    4. 连接对选择是可分配的:r(s|t)=rs|rt
    5. ε是连接的单位元:εr=rε=r
    6. 闭包中含有ε:r*=(r|ε)*
    7. 具有等幂性:r*=r*

词法单元的识别

词法分析器要求能够检查输入字符串。在前缀中找出和某个模式匹配的词素。
1. 首先通过正则定义来描述各种词法单元的模式
2. 定义ws(white space)——>(blank|tab|newline)+ 来消除空白。(分析器识别到这个模式时,不返回词法单元,继续识别其他模式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值