Learn Lex
lex 会根据你提供的 pattern 输入分解成一个个 token。pattern 是通过正则表达式去表示的。所以 我们想把 lex 学好,首先得把正则表达式学好。
正则表达式(Regular Expression)
.
,匹配除了\n
的任意单个字符*
,匹配 0 个或者多个前面的字符[]
,表示一个字符集合。有如下规则:- 匹配集合中的任意字符
- 如果首个字符为
^
,那么作用和1.
相反。如[01]
表示匹配0
或1
。 那么[^01]
表示匹配除0
或1
之外的其他字符 - 用
-
去表示字符范围,如[0-9]
等价于[0123456789]
^
,表示一行的开头字符$
,表示匹配一行的最后一个字符{}
,表示前面的 pattern 匹配多少次,如A{3}
表示等价于AAA
\
,用于去 escape metacharacters,如\*
就表示匹配字面意义上的*
+
,表示匹配一个或者多个前面的 regular expression。如[0-9]+
就可以匹配1
,11343
等等?
,表示匹配一个或者 0 个前面的 regular expression,如-?[0-9]+
可以匹配正数,负数及 0|
,表示匹配前面的 regular expression 或者后面的 regular expression,如cow|pig
可以匹配 cow 或者 pig"..."
,表示将双引号内部的所有字符(除了 c escape sequences) literally,如"abc[d]+"
匹配的就是abc[d]+