[系列][编译原理]正则表达式

关于正则表达式,作为软件工程师应该比较熟悉了。所谓正则表达式,就是表示字符串的格式。正则表达式r完全由它所匹配的串集来定义。这个集合称为由正则表达式生成的语言,写作L(r)。此处的语言只是表示“串的集合”,它与程序设计语言并无特殊关系。

 

基本的正则表达式

  正则表达式运算

    有3种基本运算:

    1. 从各选择对象中选择,用元字符|表示。比如: a|b

    2. 连结,由并置表示。比如: ab

    3. 重复或“闭包”,由元字符*表示。比如: a*

 

  运算的优先和括号的使用

    例如: a|(b(c*))

 

  正则表达式的名字

    这样为较长的正则表达式提供了一个简化的名字。例如:

    定义 digit = 0|1|2|...|9

    则序列(0|1|2|...|9) (0|1|2|...|9)*可被写作digit digit*

 

正则表达式的拓展

  1. 一个或多个重复用元字符+表示。

  2. 任意字符用元字符.表示。

  3. 字符范围。例如[a-z]表示所有的小写字母。

  4. 不在给定集合的任意字符用元字符~表示。例如: ~(a|b|c)

  5. 可选的子表达式。

 

通用程序设计中记号的正则表达式

  1. 数。

    nat = [0-9]+

    signedNat = (+|-)? nat

    number = signedNat ("." nat ) ? (E signedNat)?

  2. 保留字和标识符

    reserved = if | while | do | ...

    letter = [a - zA - Z]

    digit = [0 - 9]

    identifier = letter (letter | digit)*

  3. 注释

posted @ 2010-01-29 10:48  nothing123  阅读(1365)  评论(0编辑  收藏  举报