在理解编程语言和编译技术的上下文中,了解正则表达式(regular expressions)和正则集(regular sets)的概念是非常重要的。这些概念主要用于描述一组字符串的模式,广泛应用于词法分析中识别各类标记(tokens)。
正则表达式(Regular Expression)
正则表达式是用于描述一类字符串的方法。它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式是构建词法分析器的基本工具,用于定义需要识别的词法单元(如标识符、关键字等)的模式。
组成:
基本元素:字符、字符类、转义符等。
操作符:
连接:将两个正则表达式序列连接起来,通常是隐式的,如 ab 表示一个 a 后面跟一个 b。
选择(或):| 表示选择,如 a|b 表示 a 或 b。
闭包:* 表示零次或多次重复,如 a* 表示 a 出现零次或多次。
正闭包:+ 表示一次或多次重复,如 a+ 表示 a 出现一次或多次。
可选:? 表示零次或一次,如 a? 表示 a 出现零次或一次。
正则集(Regular Sets)
正则集是可以由正则表达式描述的语言集合。换句话说,正则集是一组能够被某个正则表达式完全匹配的字符串集合。
特点:
正则集表达的是由正则表达式定义的所有可能字符串的集合,它们具体化了正则表达式的抽象定义。
任何由正则表达式描述的语言都是正则的,它们是正则集。
关系与用途:
关系:正则表达式和正则集之间的关系是描述者与被描述对象的关系。正则表达式是一种符号方法来描述一组字符串,而这组字符串(满足某种模式的所有字符串)构成了一个正则集。
用途:在编译器的词法分析阶段,正则表达式用来定义标记的模式,识别这些模式则是解析输入文本到标记的过程。正则集帮助理解和分析这些模式能匹配哪些可能的输入序列。
示例:
表达式 ab*c
匹配 ac, abc, abbc, abbbc
等。
表达式 a(b|c)d
匹配 abd
和 acd
。
对于正规式0*(10*1)*0*
,其正规集中字符串的特点是1必须出现偶数次
L={ab |m≥0,n≥1}的正规表达式是a*bb*