编译原理课设——《TINY编译器》,用lex和yacc生成词法语法分析源码,实现编译器

           注:工作环境不变。

          本工作目标是让lex和yacc合作,替代scan.c和parse.c,从而可以构建出灵活可扩展的编译器。

           假定所有源码均未被修改。

           需修改文件:TINY.L和TINY.Y.

           在TINY.L文件的最后,添加函数 yywrap()

           int  yywrap()

           {

                return 1;

           }

         在ITNY.Y文件中将函数 static int yylex()注释掉(或删除掉)。

         文件修改即到此为止。

          使用命令:yacc -d TINY.Y生成y.tab.c和y.tab.h文件。

          使用命令:lex  TINY.L生成lex.yy.c文件。

          将此三个文件和其他源码文件(不包含scan.c和parse.c)加入到一新建工程中。编译即可。

         可以发现编译成功。

         拷贝出可执行文件,尝试执行,却发现程序如下异常:

      程序卡在标准输入界面。正常情况下应同不使用lex和yacc的源码执行一样,生成.tm文件。

       当输入两行字符时,出现:

   

     

     不解!

      我调试了很久,却始终如此。

      我在想,是不是我修改了TINY.L文件,确切的说,是不是我加入的yywrap()函数问题。

     希望各位指教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值