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

这个博客展示了如何使用C语言实现一个简单的编译器,它将特定的词汇转换为有趣的表达方式。代码中定义了词法规则,并通过`yylex()`函数处理输入,根据预定义的规则对字符进行替换,例如将'我'替换为'偶',并将一些短语转换为网络流行用语。
%{ 
#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>"教
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值