一个 Lex 程序分为三个段:第一段是 C 和 Lex 的全局声明,第二段包括模式(C 代码),第三段是补充的 C 函数。 例如, 第三段中一般都有 main() 函数。这些段以%%来分界。
下面是一个统计字数的lex程序。
%{ int wordCount = 0; %} chars [A-za-z\_\'\.\"] /*类似shell使用的正则表达式*/ numbers ([0-9])+ delim [" "\n\t] whitespace {delim}+ words {chars}+ %% {words} { wordCount++; /*increase the word count by one*/ } {whitespace} { /* do nothing*/ } {numbers} { /* one may want to add some processing here*/ } %% void main() { yylex(); /* start the analysis*/ /*此函数由lex自动生成*/ printf(" No of words: %d\n", wordCount); } int yywrap() { return 1; }