码迷,mamicode.com
首页 > 其他好文 > 详细

编译原理 - 实验三 - 递归下降语法分析器的调试及扩展

时间:2015-05-09 17:26:26      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

语法分析介绍

语法分析是编译过程的核心部分,它的主要任务是按照程序语言的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成做准备。执行语法分析任务的程序叫语法分析程序或语法分析器。

所实现的语义分析和代码生成程序能处理什么语句

(1)简单变量的声明语句

(2)表达式语句

(3)if语句.

(4)while语句

(5)for语句

(6)write语句

(7)read语句

(8)do语句.

(9)处理过程调用和返回

.实验过程

①用VC6.0建立一个Win32 Console Application得空项目,然后输入附录C 语法分析程序的代码(TESTparse)及主程序代码(main)

②在建立一个文件将附录B中的TESTscan()函数加到项目分析中

③编译运行

 技术分享

④对do的修改:

int do_stat()

    {

     int es=0;

     fscanf(fp,"%s%s/n",&token,&token1);

     printf("%s%s/n",token,token1);

     if(strcmp(token,"(")) return(es=5);

     fscanf(fp,"%s%s/n",&token,&token1);

     printf("%s%s/n",token,token1);

     es=expression();

     if(es>0) return(es);

     if(strcmp(token,")")) return(es=6);

     fscanf(fp,"%s%s/n",&token,&token1);

     printf("%s%s/n",token,token1);

     es=statement();

     if(es>0)return(es);

        if(strcmp(token,"while")==0)

        {

        fscanf(fp,"%s%s/n",&token,&token1);

        printf("%s%s/n",token,token1);

         es=statement();

        if(es>0)return(es);

         }

     return(es);

    

     }

⑤log_expr修改

char singleword[50]="+-*(){};,:!";   

 

char doubleword[10]="><=&&||";   

 

int log_expr(){

       int es=0;

       es=bool_expr();

       if(es>0) return(es);

       if(strcmp(token,"&&")==0 || strcmp(token,"||")==0

       )

       {

              fscanf(fp,"%s%s\n",&token,&token1);

              printf("%s%s\n",token,token1);

              es=bool_expr();

              if(es>0) return(es);

       }

       return(es);

}

技术分享

.遇到问题:

Link出错

Linking...

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16

Debug/test.exe : fatal error LNK1120: 1 unresolved externals

Error executing link.exe.

 

test.exe - 2 error(s), 0 warning(s)

 

这个文件中使用了WinMian而不是main作为入口函数。vc这时的默认设置是针对控制台程序的。

解决方法:

1.进入project->setting->c/c++, 在category(第一行)中选择preprocessor,在processor definitions中删除_WINDOWS, 添加_CONSOLE

 

2.进入project->setting->Link, 在Project options中将/subsystem:windows.改为/subsystem:console

3.保存设置,Rebuild All.

简单来说就是在建立项目时创建成了Win32 Application的,所以建议直接建立Win32 Console Application项目

 

编译原理 - 实验三 - 递归下降语法分析器的调试及扩展

标签:

原文地址:http://www.cnblogs.com/zzhili/p/4490617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!