DO-WHILE循环语句的翻译程序设计(简单优先法、输出四元式)(2)

2020-04-16 13:03

while(str[i]!='\\0')i++; return i; }

int index(char ch,char str[]){ int i=0; while(str[i]!='\\0'){ if(ch!=str[i])i++; else break;} if(str[i]=='\\0')return -1; return i; }

void err(int n){ if(n==1)cout<<\字符不匹配\ else if(n==2)cout<<\字符没有出现在产生式中\ else if(n==3)cout<<\没有找到合适的¨选产式\ else cout<<\该句子是文法语言的句子\}

void print(){ cout<<\ if(count<10)cout<<'0'; cout<

void semantic(){ if(VT[opr]=='='){arr[d][0]='=';arr[d][1]=arr_i[opd];arr[d][2]=id;arr[d][3]='--';id++;} else if(opr==-2){arr[d][0]='=';arr[d][1]=id-1;arr[d][2]=arr_i[opd];arr[d][3]='--';} else {arr[d][0]=VT[opr];arr[d][1]=arr_i[opd];arr[d][2]=id; if(VT[opr]!='<'&&VT[opr]!='>')arr[d][3]=id-1;else arr[d][3]=id+1;id++;} d++; }

void syntax(){//语法分析 int n; count++; print(); X=stack[sp]; a=queue[front]; if(X=='#'&&a=='#')f=4;

if(X<'A'||X>'Z'){ if(X==a){ sp--; front++; if(a!='i'){ if(a!='d'&&a!='w'&&a!=';'&&a!='#'){opr=index(a,VT);semantic();} else if(a==';'||a=='w'||a=='#'){opr=-2;semantic();} cout<<'\\t'<<'\\''<

i=len(p[n])-1;i>=0;i--){stack[++sp]=p[n][i];cout<

void lexical(){ //词法分析 int i,j,d; char ch; j=d=0; for(i=0;var[i]!='#';i++){ ch=var[i]; if(ch=='d'&&var[i+1]=='o'){cout<<\

} else if(ch=='w'){ch=var[i+1]; if(ch=='h'){ch=var[i+2]; if(ch=='i'){ch=var[i+3]; if(ch=='l'){ch=var[i+4]; if(ch=='e'){ch=var[i+5];}}}} cout<<\ } else if(index(ch,VT)<=0){ if(ch!='{'&&ch!='}'&&ch!='('&&ch!=')'){cout<0){cout<

int main(){ int i=0,j=0;int len,length;char temp; char S='K'; sp=front=0; stack[0]='#'; sp++; stack[1]='K'; cout<<\ ****************************\ cout<<\ * DO-WHILE循环语句 *\ cout<<\ * (简单优先法输出四元式) *\ cout<<\ ****************************\ ifstream table; table.open(\ if(!table) { cout<<\ } table.seekg(0,ios::end); length = table.tellg(); table.seekg(0,ios::beg); while(length!=table.tellg()) { table.read((char*)&temp,1); var[i]=temp;

i++;

if(var[i]==' ')i--; if(var[i]=='#')break;

}

table.close(); len=i;

var[i]='\\0';

cout<<\词法分析\lexical();

char fuzhi[20];int flag1,fuzhilen;int s=0; for(i=0;i

fuzhilen=flag1-2; for(i=3;i

fuzhi[s]='#';

char shuru;char zh[100];int kaishi=0; zh[0]='d';

for(kaishi=1;kaishi

zh[kaishi++]=';'; zh[kaishi++]='W';

for(i=flag1+8;i

zh[kaishi++]='#'; zhlen=kaishi;

cout<<\输出四元式\

cout<<\ translatefuzhi(fuzhi); cout<<\\ cout<<\ goto T0\ return 0;}

三、测试结果:

词法分析部分:

输出四元式:

四、课程小结:

这次编译原理课程设计的题目是用简单优先分析法进行DO-WHILE循环语句的语法分析,并输出四元式.设计的特点是利用定义每个终极符和非终极符之间优先关系,来进行符号的


DO-WHILE循环语句的翻译程序设计(简单优先法、输出四元式)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《C语言程序设计》课程设计任务书2011

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: