赞
踩
源程序
%{
#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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。