flex扫描程序

源程序

%{
#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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值