[系列][编译原理]正则表达式
关于正则表达式,作为软件工程师应该比较熟悉了。所谓正则表达式,就是表示字符串的格式。正则表达式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. 注释