• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-07-17
  • 语言: 其他
  • 标签: 课程设计  

资源简介

WHILE循环语句的翻译程序设计,可更改为四元式的程序。要求是 WHILE循环语句的翻译程序设计(LR方法、输出三地址码)

资源截图

代码片段和文件信息

// WHILE循环语句的翻译程序设计(LR方法、输出三地址码)
#include  //字符串处理
#include   //参数化输入/输出
#include //数据流输入/输出
#include    //文件输入/输出
#include  //字符处理
#include   //STL 堆栈容器    
#include “conio.h“ //控制台进行数据输入和数据输出


using namespace std;

ofstream coutf(“LR(0).txt“ ios::out);
ofstream couty(“yufa.txt“ ios::out);
char shuru[100] tmp;
char sr[100];
char jiefu[10] caozuofu[10] panduanfu[10];
char word[10];
int q = 0;

struct Table   //存储LR(0)分析表
{
char act_0[10];
int act_1[10];
int go[4];
}action[18];

struct  sanyuanshi   //三地址码结构体
{
char f;
char op1;
char op2;
char result;

}sandizhi[10];

void Init() {
cout << “产生式集合:“ << endl;
cout << “(1)S->while(B){E}“ << endl;
cout << “(2)E->AE“ << endl;
cout << “(3)E->A“ << endl;
cout << “(4)A->i op A “ << endl;
cout << “(5)A->i;“ << endl;
cout << “(6)B->i rop i“ << endl;
cout << “(7)B->i“ << endl;

//---------------       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 cifafenxi()
{
int i = 0 j = 0 k = 0 m = 0;
for (q = 5; q < strlen(sr); q++)
{
tmp = sr[q];
if (tmp >= ‘0‘&&tmp <= ‘9‘ || tmp >= ‘a‘&&tmp <= ‘z‘ || tmp >= ‘A‘&&tmp <= ‘Z‘)
word[i++] = tmp;
else if (tmp == ‘+‘ || tmp == ‘-‘ || tmp == ‘/‘ || tmp == ‘*‘)
caozuofu[j++] = tmp;
else if (tmp == ‘>‘ || tmp == ‘<‘)
panduanfu[k++] = tmp;
else if (tmp == ‘(‘ || tmp == ‘)‘ || tmp == ‘{‘ || tmp 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件           0  2020-01-05 21:39  WHILE循环语句的翻译程序设计\LR(0).txt
     文件       11975  2020-01-05 21:39  WHILE循环语句的翻译程序设计\main.cpp
     文件           0  2020-01-05 21:39  WHILE循环语句的翻译程序设计\yufa.txt
     目录           0  2020-03-25 08:21  WHILE循环语句的翻译程序设计\

评论

共有 条评论