- 论坛徽章:
- 0
|
词法分析程序的生成程序lex
1、字符的集合
[xyz]:方括号表示字符的集合,即x,y,z单个字符匹配。
-:表示字符的范围
^:必须写在第一个位置,它的作用是求方括号中除了^之外的字符组成的字符集合相对于计算机字符集的补集,如正则表达式[^abc]和除去a,b,c外的所有符号匹配。
2、闭包运算
运算符*和+是lex正则表达式中的闭包运算符,他们表示正则表达式中某子式的重复,例如a*表示由0个或者多个a组成的字符串的集合,而a+表示由1个或者多个a组成的字符串的集合,如[_a-zA-Z][_a-zA-Z0-9]*表示第一个字符是字母或者下划线,其余字符是字母,下划线或者数字的字符串,如c语言中的标识符。
3、选择和字符组
运算符|表示选择,如正则表达式(ab|cb)与字符串ab或者cb匹配。运算符()表示一组字符。注意()和[]的不同:(ab)表示字符串ab,而[ab]则表示单个字符a或者b。圆括号()用于表示复杂的正则表达式,例如:正则表达式(ab|cd+)?(ef)*与字符串abefef,efef,cdef,cddd等匹配,但不与字符串abc,abcd,或者abcdef匹配。
4、重复和辅助定义
当被{}括起来的是数字时,{}表示重复,当他括起来的是第一个标识符时,则表示辅助定义的展开。例如正则表达式a{1,5}表示字符串集合{a,aa,aaa,aaaa,aaaaa}。而{digit}则把digit所定义的正则表达式插入到他所在的位置上。
5、其他
运算符.匹配除了\n外的所有字符。运算符?指出正则表达式中可有可无的子式,例如正则表达式ab?c与字符串ac或者abc匹配,即b是可有可无的。
常用的一些运算符:
x 字符x
"x" 字符x
\x 字符x
[xy] 字符x或者字符y
[x-z] 字符x,y或者z
[^x] 除了x外的所有字符
. 除了\n外的所有字符
^x 出现在一行开始处的字符x
<S>;x 当lex处于开始条件S下时的x
x$ 出现在行尾的x
x? 可有可无的x
x* 0个或者多个x
x+ 1个或者多个x
x|y x或者y
(x) 字符x
x/y 其后紧随y的字符x
x{m,n} m到n个x
未完----待续 |
|