C# 词法分析器(三)正则表达式
系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 正则表达式是一种描述词素的重要表示方法。虽然正则表达式并不能表达出所有可能的模式(例如“由等数量的 a 和 b 组成的字符串”),但是它可以非常高效的描述处理词法单元时要用到的模式类型。 一、正则表达式的定义 正则表达式可以由较小的正则表达式按照规则递归地构建。每个正则表达式 r r 表示一个语言 L ( r ) L(r),而语言可以认为是一个字符串的集合。正则表达式有以下两个基本要素: ϵ ϵ 是一个正则表达式, L ( ϵ ) = ϵ L(ϵ)=ϵ,即该语言只包含空串(长度为 0 的字符串)。 如果 a a 是一个字符,那么 a a 是一个正则表达式,并且 L ( a ) = { a } L(a)={a},即该语言只包含一个长度为 1 1 的字符串 a a。 由小的正则表达式构造较大的正则表达式的步骤有以下四个部分。假定 r r 和 s s 都是正则表达式,分别表示语言 L ( r ) L(r) 和 L ( s ) L(s),那么: ( r ) | ( s ) (r)|(s) 是一个正则表达式,表示语言 L ( r ) ∪ L ( s ) L(r)∪L(s),即属于 L ( r ) L(r) 的字符串和属于 L ( s ) L(s)