[系列][编译原理]正则表达式
2010-01-29 10:48
288 查看
关于正则表达式,作为软件工程师应该比较熟悉了。所谓正则表达式,就是表示字符串的格式。正则表达式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. 注释
基本的正则表达式
正则表达式运算
有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. 注释
相关文章推荐
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——5 DFA最小化
- 编译原理-词法分析02-正则表达式
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——4 构造DFA
- 编译原理-词法分析05-正则表达式到DFA-01
- 编译原理中的正则表达式、NFA和DFA
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——1 概述
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树
- 编译原理之正则表达式
- 【编译原理】正则表达式
- 编译原理中的正则表达式、NFA和DFA
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——1 概述
- 编译原理中正则表达式直接构造DFA,DFA的最小化算法
- 正则表达式(编译原理)
- 编译原理中正则表达式直接构造DFA,DFA的最小化算法
- JavaScript内核系列 第6章 正则表达式
- Java基础系列之正则表达式