资源简介
设计一个语法制导翻译器,将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
- 上一篇:白盒测试——基本路径测试法
- 下一篇:基于LabVIEW传感器实验平台的开发
评论
共有 条评论