Lex是一个生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现lex的源代码。
令牌:令牌是一组构成基本原子语法的字符组,即令牌是与模式匹配的一类词素。例如–关键字,标识符,运算符,分隔符。
例子:
Input: int p=0, d=1, c=2;
Output:
total no. of tokens = 13
下面是上述说明的实现:
/*Lex code to count total number of tokens */
%{
int n = 0 ;
%}
// rule section
%%
//count number of keywords
"while"|"if"|"else" {n++;printf("\t keywords : %s", yytext);}
// count number of keywords
"int"|"float" {n++;printf("\t keywords : %s", yytext);}
// count number of identifiers
[a-zA-Z_][a-zA-Z0-9_]* {n++;printf("\t identifier : %s", yytext);}
// count number of operators
"<="|"=="|"="|"++"|"-"|"*"|"+" {n++;printf("\t operator : %s", yytext);}
// count number of separators
[(){}|, ;] {n++;printf("\t separator : %s", yytext);}
// count number of floats
[0-9]*"."[0-9]+ {n++;printf("\t float : %s", yytext);}
// count number of integers
[0-9]+ {n++;printf("\t integer : %s", yytext);}
. ;
%%
int main()
{
yylex();
printf("\n total no. of token = %d\n", n);
}
输出: