• 大小: 201KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-10-11
  • 语言: 其他
  • 标签:

资源简介

设计一个语法制导翻译器,将WHILE语句翻译成四元式。要求:先确定一个定义WHILE语句的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个正确的WHILE语句,程序将其转换成四元式输出

资源截图

代码片段和文件信息

#include
#include 
#include
#include 
#include
#include
#include “conio.h“
using namespace std;
ofstream coutf(“cifa.txt“ios::out);//结果输出至文件cifa.txt
ofstream couty(“yufa.txt“ios::out);//结果输出至文件yufa.txt
ofstream couts(“obj.txt“ios::out);//结果输出至文件obj.txt
char shuru[100]tmp;
char sr[100];
char b[10]op[10]rop[10];
char a[10];
int q=0;

struct Table{
    char act_0[10];
    int act_1[10];
    int go[4];
}action[18];

struct  sys{
char f;
char op1;
char op2;
char result;
}equ[10];

void Init(){
    /*---------------       ACTION      -----------------------*/
    action[0].act_0[0]=‘s‘;       action[0].act_1[0]=2;
    action[1].act_0[9]=‘Z‘;      
    action[2].act_0[1]=‘s‘;       action[2].act_1[1]=3;
    action[3].act_0[5]=‘s‘;       action[3].act_1[5]=5;
    action[4].act_0[2]=‘s‘;       action[4].act_1[2]=6;
    action[5].act_0[2]=‘r‘;       action[5].act_1[2]=7;
    action[5].act_0[7]=‘s‘;       action[5].act_1[7]=7;
    action[6].act_0[3]=‘s‘;       action[6].act_1[3]=9;
    action[7].act_0[5]=‘s‘;       action[7].act_1[5]=8;
    action[8].act_0[2]=‘r‘;       action[8].act_1[2]=6; 
    action[9].act_0[5]=‘s‘;       action[9].act_1[5]=14;
    action[10].act_0[4]=‘r‘;      action[10].act_1[4]=3;
    action[10].act_0[5]=‘s‘;      action[10].act_1[5]=14;
    action[11].act_0[4]=‘s‘;      action[11].act_1[4]=12;
action[12].act_0[9]=‘r‘;      action[12].act_1[9]=1;
    action[13].act_0[4]=‘r‘;      action[13].act_1[4]=2;
    action[14].act_0[8]=‘s‘;      action[14].act_1[8]=17;
    action[14].act_0[6]=‘s‘;      action[14].act_1[6]=15;
    action[15].act_0[5]=‘s‘;      action[15].act_1[5]=14;
action[16].act_0[4]=‘r‘;     action[16].act_1[4]=4;
action[16].act_0[5]=‘r‘;     action[16].act_1[5]=4;
action[17].act_0[4]=‘r‘;     action[17].act_1[4]=5;
action[17].act_0[5]=‘r‘;     action[17].act_1[5]=5;

    /*--------------------     GOTO      -------------------------*/
    action[0].go[0]=1;
    action[3].go[2]=4;;
    action[9].go[1]=11;
    action[9].go[3]=10;
    action[10].go[1]=13;
    action[10].go[3]=10;
    action[15].go[3]=16;
    
}

void cifa()
{
int i=0j=0k=0m=0;
    for(q=1;q    {
     tmp=sr[q];
          if(tmp>=‘0‘&&tmp<=‘9‘||tmp>=‘a‘&&tmp<=‘z‘||tmp>=‘A‘&&tmp<=‘Z‘)
       a[i++]=tmp;
     else if(tmp==‘+‘||tmp==‘-‘||tmp==‘/‘||tmp==‘*‘)
         op[j++]=tmp;
      else if(tmp==‘>‘||tmp==‘<‘)
                 rop[k++]=tmp;
            else if(tmp==‘(‘||tmp==‘)‘||tmp==‘{‘||tmp==‘}‘||tmp==‘;‘)
                     b[m++]=tmp;                  
    }
    cout<<“词法分析完成结果输出到文件cifa.txt“<    coutf<<“词法分析结果:“<    coutf<<“关键字:“<<“w“<    coutf<<“变量名:“;
        for(i=0;i    { 
        coutf<    }
     coutf<     coutf<<“表达式运算符:“;
    for(i=0;i    { 
        coutf<    }
    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       9925  2009-06-21 15:22  黄金\文档\WHILE循环语句的翻译程序设计(LR方法、输出四元式).txt

     文件     520192  2009-06-23 10:19  黄金\文档\课设报告.doc

     目录          0  2009-06-21 22:35  黄金\文档

     文件       9925  2009-06-21 22:33  黄金\源程序及输出结果\while(LR).cpp

     文件         17  2009-06-21 22:34  黄金\源程序及输出结果\input.txt

     文件         59  2009-06-21 22:34  黄金\源程序及输出结果\obj.txt

     文件       1093  2009-06-21 22:34  黄金\源程序及输出结果\yufa.txt

     文件        101  2009-06-21 22:34  黄金\源程序及输出结果\cifa.txt

     目录          0  2009-06-21 22:35  黄金\源程序及输出结果

     目录          0  2009-06-21 22:30  黄金

----------- ---------  ---------- -----  ----

               541312                    10


评论

共有 条评论

相关资源