布尔表达式的翻译程序设计 下载本文

{ char *fplace; fplace=new char[8];

if ((strcmp(token,\ { strcpy(fplace,token); scaner();

}

if(strcmp(token,\

{strcpy(fplace,newtemp());qemit(fplace,\ if(strcmp(token,\ {

scaner();

strcpy(fplace,expression()); if (syn==28){return fplace;}

}

if(strcmp(token,\ { char *fplace1=new char[8]; scaner();

if (strcmp(token,\ strcpy(fplace1,expression()); else strcpy(fplace1,token);

strcpy(fplace,newtemp());qemit(fplace,\ if (syn==28){return fplace;}

}

// else{error(4);} return fplace;

}

17

void main() { interpreter in;

cout<<\请输入源代码:\ in.read(); in.run();

cout<<\推导过程为:\ for(int i=0;i

cout<<\分析的单词为:\ for (i=0;i

wr[i].print();

cout<

cout<<\四元式为:\

in.reset();

// cout<<\ in.run1();

for(i=0;i

q[i].print();

cout<<\逆波兰式为:\ bolan();

for(i=head;i

}

6.2全局变量设计

int tear=51;//逆波兰式尾部

18

int head=50;//逆波兰是首部 int numberoftemp=0;//临时变量个数 int numberofquad=0;//四元式个数

6.3递归下降得到推导过程

根据递归下降的思想,对于文法中的每个非终结符编写一个函数,每个函数的

功能是识别由该非终结符所表示的语法成分。由于描述语言的文法常常是递归定义的,因此相应的这组函数必然以相互递归的方式进行调用。该过程的基本思想为每执行一个非终结符对应的函数就根据读入的单词符号来写入该非终结符对应的推出式。

该功能的入口函数run1的流程图如下:

开始 scaner() B() end

非终结符B对应的函数B()

该函数首先要写入B=>TB’,然后执行T()与B1() 流程图为

19

非终结符T对应的函数T()

该函数首先要写入T=>FT’,然后执行F()与T1() 流程图为:

非终结符B’对应的函数B1()

在该函数中如果读入的下一个单词是“and”则写入B’=>and T B’.否则,要写入B’推出了空串。

20