📜  Lex代码以计算令牌总数

📅  最后修改于: 2021-06-28 07:01:38             🧑  作者: Mango

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);   
       
} 

输出: