您的位置:首页 > 其它

武汉大学编译原理第二次作业

2015-09-23 15:22 337 查看
%{
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int length;
%}
SEP (";"|";"|"."|"。"|","|","|","|"!"|"!"|"\""|"”"|":")
%x STMT

%%
[^ \n\t\r]  {
if (rand() % 2 ) printf("尼玛");
unput(yytext[0]);
length = 0;
BEGIN(STMT);
}
[ \t\n\r] ;
<STMT>{SEP}+[ \t]*(\n)*|{SEP}*[ \t]*(\n)+\r*        {
if (length <= 4) {
printf("!!!!!");
} else {
if (rand() % 3) printf( "!你伤不起啊!!!");
if (rand() % 3) printf( "!亲!!!!!");
if (rand() % 2) printf( "!有木有!!!!!");
}
printf("!\n");
BEGIN(INITIAL);
}
<STMT>"我们"     length += 2; printf ("咱们") ;
<STMT>"我"     length += 2; printf ("偶") ;
<STMT>"什么"   length += 4; printf ("神马");
<STMT>"你"   length += 2; printf ("泥");
<STMT>"同志"   length += 4; printf ("筒子");
<STMT>"院士"   length += 4; printf ("猿士");
<STMT>"同学"   length += 4; printf ("童鞋");
<STMT>"教授"   length += 4; printf ("叫兽");
<STMT>"的"   length += 2; printf ("滴");
<STMT>"人才"   length += 4; printf ("淫才");
<STMT>[\x81-\xfe][\x40-\xfe] length +=2; ECHO;
<STMT>.   length++; ECHO;
%%

main( int argc, char **argv )
{
++argv, --argc;
if ( argc > 0 ) {
if ((yyin = fopen( argv[0], "rb" )) == NULL) {
printf("the file %s could'nt open!\n", argv[0]);
exit (1);
}
}
else
yyin = stdin;

srand((int)time(0));

yylex();
fclose(yyin);
return 0;
}

int yywrap()
{
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: