当前位置:   article > 正文

flex扫描程序_letter [a-za-z] %{ int count; %}

letter [a-za-z] %{ int count; %}

源程序

%{
#include "stdio.h"
#include "stdlib.h"                         
%}
digit [0-9]
letter [A-Za-z]
//关键字
keyword auto|bool|break|case|catch|char|class|const|const_cast|continue|default|delete|do|double|dynamic_cast|else|enum|explicit|extern|false|float|for|riend|goto|if|inline|int|long|mutable|namespace|new|operator|private|protected|publie|register|reinterpret_cast|return|short|signed|sizeof|static|static_cast|struct|switch|template|this|throw|true|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|while|include|main|cin|cout|endl
//特殊符号
teshu #|<|>|"-"|"+"|"("|")"|"{"|"}"|"["|"]"|;|,|<<|>>|h|"."|=|"++"|"+="|"-="|"*="|"/="|"%"|"&"|"|"|">="|"<="|"!="|"=="|"^"|"||"|"&&"
//数字
number {digit}+
//标志符
id ({letter}|[_])({letter}|{digit}|[_])*  
//字符串
string  \"[^"]*\"
//注释
zhushi "/*"[^"*/"]*"*/"
//回车换行
enter [\n]+  
space [ |\t]+
%%
 
{keyword} {
printf("%-10skeyword\n",yytext);} //关键字
 
{teshu} {
printf("%-10sspecial symbol\n",yytext);}
 
{number} {  
int n=atoi(yytext);
printf("%-10dnumber\n",n);
}
 
{id} {
printf("%-10sid\n",yytext);
}
 
{string} {
printf("%-10sstring\n",yytext);
}

{zhushi} {
printf("NOTATUON   %s\n",yytext);
}
 
{enter} { }
 
{space} { }
 
%%
int main()
{
 
yylex();
return 0;
 
}
int yywrap()
{
return 1;
}



PS不能有注释符//

编译

flex demo.l

 gcc -o wo lex.yy.c

./wo<输入文件名

编译运行结果

#         special symbol
include   keyword
<         special symbol
iostream  id
.         special symbol
h         special symbol
>         special symbol
main      keyword
(         special symbol
)         special symbol
{         special symbol
int       keyword
i         id
;         special symbol
cin       keyword
>>        special symbol
i         id
;         special symbol
if        keyword
(         special symbol
i         id
>         special symbol
3         number
)         special symbol
cout      keyword
<<        special symbol
"ok"      string
;         special symbol
for       keyword
(         special symbol
int       keyword
i         id
=         special symbol
0         number
;         special symbol
i         id
<         special symbol
10        number
;         special symbol
i         id
++        special symbol
)         special symbol
{         special symbol
cout      keyword
<<      special symbol
endl      keyword
;          special symbol
}          special symbol
NOTATUON   /*notation*/
}          special symbol





声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/294246
推荐阅读
相关标签
  

闽ICP备14008679号