编译原理-词法分析02-正则表达式0.术语
r
r:正则表达式,表⽰字符串的格式。
L(r)
r所匹配的串的集合。
symbol符号
L(r)中的元素称为符号。
alphabet字母表
表⽰符号的字符的集合。⽤ ∑ (sigma)表⽰。
元字符metacharacter,元符号metasymbol
它们⾮字母表中的字符,是⼀些特殊意义的字符,⽐如,*. 如果要匹配这类符号,则需要使⽤转义符号\。escape character转义字符
⼀般使⽤\表⽰,⽤于匹配元字符。
空串empty string
不包含任何字符的串,但它仍然是⼀个匹配。⽤ε(eplsilon)表⽰
空集empty set
表⽰正则表达式⽆任何匹配。
regular definition正则定义
即正则表达式的名字。
正则匹配原理1.正则表达式的定义
正则表达式是以下中的⼀种:
1. 基本正则表达式由单个字符a(其中a在正规字符的字母表 ∑ 中),以及元字符ε或元字符Φ。分别表⽰为:
L(a) = {a};
L(ε) = {ε};
L(Φ) = {}.
2. r|s格式的表达式:其中r和s均是正则表达式。在这种情况下:L(r|s) = L(r)|L(s)。
3. rs格式的表达式:其中r是正则表达式。在这种情况下:L(rs) = L(r)L(s)。
4. r格式的表达式:其中r是正则表达式。在这种情况下:L(r) = L(r)*。
5. (r)格式的表达式:其中r是正则表达式。在这种情况下:L((r)) = L(r),因此,括号并不改变语⾔,它们只调整运算的优先级。注意到这个定义中,|,*,(,),Φ,ε均为元字符。
2.扩展
r+ 正闭包,⾄少匹配⼀个
. 匹配任意⼀个字符
区间匹配如[a-z],[0-9],[A-Za-z]
~a或^a 排除匹配
r? 可选匹配
3.程序语⾔记号的正则表达式
number
nat = [0-9]+ #⾃然数
signedNat = (+|-)?nat #有符号数
number = signedNat("."nat)?(E signedNat)? #数字,包含整数,⼩数,正负数,指数reserved & identifier
reserverd = if | while | then | repeat | do ...
letter = [a-z]
digit = [0-9]
identifier = letter(letter|digit)*
comment
{(~})*} #匹配{ this is a Pascal comment}
whitespace
解决匹配的⼆义性遵循最长⼦串原理principle of longest。
whitespace = (newline | blank | tab | comment) *
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论