编译原理语法分析实验报告(含有源代码)

时间:2024.4.15

《编译原理》 实验报告

编译原理语法分析实验报告含有源代码

编译原理语法分析实验报告含有源代码

编译原理语法分析实验报告含有源代码

编译原理语法分析实验报告含有源代码

编译原理语法分析实验报告含有源代码

编译原理语法分析实验报告含有源代码

编译原理语法分析实验报告含有源代码


第二篇:编译原理(语法分析源代码)


#include<stdio.h>

#include<string.h>

#include<iostream.h>

char prog[80],token[8];

char ch;

int syn,p,m=0,n,sum=0,kk=0;

char *rwtab[6]={"begin","if","then","while","do","end"};

 void expression();

 void factor();

  void term();

  void statement();

 void yucu();

void scaner()

{

       for(n=0;n<8;n++) token[n]=NULL;

       ch=prog[p++];

       while(ch==' ')

       {

              ch=prog[p];

              p++;

       }

       if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

       {

              m=0;

              while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

              {

                     token[m++]=ch;

                     ch=prog[p++];

              }

              token[m++]='\0';

              p--;

              syn=10;

              for(n=0;n<6;n++)

                     if(strcmp(token,rwtab[n])==0)

                     {

                            syn=n+1;

                            break;

                     }

       }

       else if((ch>='0'&&ch<='9'))

       {

              {

                     sum=0;

                     while((ch>='0'&&ch<='9'))

                     {

                            sum=sum*10+ch-'0';

                            ch=prog[p++];

                     }

              }

              p--;

              syn=11;

              if(sum>32767)

                     syn=-1;

       }

       else switch(ch)

       {

case'<':m=0;token[m++]=ch;

       ch=prog[p++];

       if(ch=='>')

       {

              syn=21;

              token[m++]=ch;

       }

       else if(ch=='=')

       {

              syn=22;

              token[m++]=ch;

       }

       else

       {

              syn=23;

              p--;

       }

       break;

case'>':m=0;token[m++]=ch;

       ch=prog[p++];

       if(ch=='=')

       {

              syn=24;

              token[m++]=ch;

       }

       else

       {

              syn=20;

              p--;

       }

       break;

case':':m=0;token[m++]=ch;

       ch=prog[p++];

       if(ch=='=')

       {

              syn=18;

              token[m++]=ch;

       }

       else

       {

              syn=17;

              p--;

       }

       break;

case'*':syn=15;token[0]=ch;break;

case'/':syn=16;token[0]=ch;break;

case'+':syn=13;token[0]=ch;break;

case'-':syn=14;token[0]=ch;break;

case'=':syn=25;token[0]=ch;break;

case';':syn=26;token[0]=ch;break;

case'(':syn=27;token[0]=ch;break;

case')':syn=28;token[0]=ch;break;

case'#':syn=0;token[0]=ch;break;

case'\n':syn=-2;break;

default: syn=-1;break;

       }

}

void expression()

{

       term();

       while(syn==13||syn==14)

       {

                     scaner();

                     term();

       }

        

       return;

}

void factor()

{

       if(syn==10)

         scaner();

       else if(syn==11)

              scaner();

              else if(syn==27)

              {

                     scaner();

                     expression();

                     if(syn==28)

                     {

                            scaner();

                     }

                     else

                     {

                            cout<<"输出')'错误"<<endl;

                            kk=1;

                    

                     }

              }

              else

              {

                     cout<<"表达式错误"<<endl;

                     kk=1;

                    

              }

              return;

      

}

void term()

{

       factor();

       while(syn==15||syn==16)

       {

              scaner();

              factor();

       }

       return;

}

void statement()

{

       if(syn==10)

       {

              scaner();

              if(syn==18)

              {

                     scaner();

                     expression();

              }

              else

              {

                     cout<<"赋值号错误"<<endl;

                     kk=1;

             

              }

       }

       else

       {

              cout<<"语句错误"<<endl;

              kk=1;

      

       }

       return;

}

void yucu()

{

       statement();

       while(syn==26)

       {

              scaner();

              statement();

       }

       return;

}

void lrparser()

{

       if(syn==1)

       {

              scaner();

              yucu();

              if(syn==6)

              {

                     scaner();

                     if(syn==0&&(kk==0))

                     {

                            cout<<"success"<<endl;

                     }

                      

              }

             

              else if(kk!=1)

              {

                cout<<"缺少end错误"<<endl;

                    

              }

             

       }

  

             

       else

       {

           cout<<"缺少begin错误"<<endl;

             

       }

             

      

       return;

}

void main()

{

       p=0;

      

       cout<<"Please input string:"<<endl;

       do

       {

              cin.get(ch);

              prog[p++]=ch;

       }

       while(ch!='#');

       p=0;

    scaner();

       lrparser();

}

更多相关推荐:
编译原理 语法分析 实验报告

编译原理实验报告编译原理实验报告1编译原理实验报告一实验内容设计编制并调式一个语法分析程序加深对语法分析原理的理解二实验目的及要求利用C或C编制确定的自顶向下预测分析语法分析程序并对简单语言进行语法分析21待分...

编译原理LL(1)语法分析实验报告

学号20xx2798专业软件工程姓名薛建东实验日期20xx0408教师签字成绩实验报告实验名称LL1语法分析实验目的通过完成预测分析法的语法分析程序了解预测分析法和递归子程序法的区别和联系使了解语法分析的功能掌...

编译原理语法分析实验报告

目录一语法分析方法11判断为算符优先文法12求FirstVT集和LastVT集13根据FirstVT和LastVT集构造算符优先表1二程序设计21总体设计22子程序设计2三程序中的结构说明31重要函数介绍32函...

编译原理实验报告词法分析

编译原理实验报告词法分析器学院计算机科学与技术时间20xx69一问题描述选择计算机高级程序语言之一C语言运用恰当的词法分析技术线路设计和实现其对应的词法分析器提示技术线路选择如下两种之一正则式NFADFAmin...

编译原理语法分析实验报告

南华大学计算机科学与技术学院实验报告20xx20xx学年度第二学期课程名称实验名称姓名专业地点寻友旭软件工程6413学号20xx4350227编译原理语法分析班级软件工程052班教师陈星南华大学计算机科学与技术...

编译原理-语法分析实验报告

课程实验报告课程名称:编译原理(语法分析)专业班级:信息安全1001班学号:姓名:指导教师:报告日期:20XX/11/8计算机科学与技术学院1、实验目的1)设计并编制一个语法分析程序,加深对语法分析程序中递归下…

编译原理语法分析实验报告

实验2语法分析1实验题目和要求题目语法分析程序的设计与实现实验内容编写语法分析程序实现对算术表达式的语法分析要求所分析算术表达式由如下的文法产生EETETTTTFTFFFidEnum实验要求在对输入表达式进行分...

武汉理工大学-编译原理实验报告-中国好学长系列之小灰灰的爸爸

武汉理工大学学生实验报告书实验课程名称编译原理开课学院计算机科学与技术学院指导老师姓名何九周学生姓名小灰灰的爸爸学生专业班级中国好学长系列20xx20xx学年第一学期实验课程名称编译原理实验课程名称编译原理

广东工业大学编译原理实验报告

实验报告课程名称编译原理题目名称PL0编译程序的修改扩充学生学院计算机学院专业班级学号学生姓名指导教师20年月日一课内实验要求对PL0作以下修改扩充增加单词保留字ELSEFORTODOWNTORETURN运算符...

LR语法分析器 北邮 编译原理 实验

TitlecLR语法分析器cppAuthorvolantfishnum10211xxxClass20xx211309Date20xx11volantfishIntroductionVersionincludel...

编译原理 语法分析实验报告

中北大学软件学院实验报告专业课程名称学号姓名辅导教师成绩

河工大版编译原理实验报告

编译原理实验报告编译原理实验报学院国际教育学院专业中法计算机合作专业班级姓名学号告编译原理实验报告目录实验一词法分析程序实现3实验设计3实验步骤3基本思路6程序代码6实验结果分析13自我评鉴14实验二语法分析程...

编译原理语法分析实验报告(38篇)