资源简介
编译原理赋值语句的翻译程序,带实验文档,程序分析源程序为C语言,输出到控制台,带出错提醒
代码片段和文件信息
#include
#include
#include
#include
#include
#define MAX 20
char temp[5]={‘1‘‘2‘‘3‘‘4‘‘5‘}; //用来作为四元式的临时变量
void move(char bchar *cint x) //从x处向前移动,并插入b;
{ int s;
c[x-2]=b;
for(s=x+1;s c[x-1]=c[s];
}
void change(char a[20]char ch[])
{
int top=-1;//栈指针,初始值为-1
int i=0n;
int j=0;
char sta[20];//符号栈
while(ch[i]!=‘#‘)
{
if(isalnum(ch[i]))//范围在A–Z a–z or 0–9
{
while(isalnum(ch[i]))
{a[j]=ch[i];
j++;
i++;
}//while
//a[j]=‘‘;
//j++;
} //if
else//如果是符号,+-*/()(:=)以=表示
{
switch(ch[i])
{ case ‘=‘:
case ‘+‘:
case ‘-‘: if(sta[top]==‘=‘||top==-1||sta[top]==‘(‘)
{ top++;
sta[top]=ch[i++];
}//if
else
{a[j]=sta[top];
j++;
top--;
}//else
break;
case ‘*‘:
case ‘/‘:if(sta[top]==‘*‘||sta[top]==‘/‘)
{a[j]=sta[top];//出栈
j++;
top--;
}//if
else
{
top++;
sta[top]=ch[i];//入栈
i++;
}//else
break ;
case ‘(‘: top++;
sta[top]=ch[i];
i++;break;
case ‘)‘: if(sta[top]==‘(‘)
{ top--;
i++;
}//if
else
{a[j]=sta[top];
top--;
j++;
}//else
break;
default: cout<<“ 你输入的有错误!“< ch[i]=‘#‘;
j=0;
break;
}//switch
}//else
}//while
while(top!=-1)//把sta中剩余的符号赋到a中
{
a[j]=sta[top];j++;
top--;
}//while
a[j]=‘#‘;
cout<<“四元式为: “< n=0;
j=0;
while(a[n]!=‘#‘)
{
if(!isalnum(a[n]))
{ if(a[n]==‘=‘)
cout< <<‘-‘<<‘‘< else {cout< < move(temp[j]an);
j++;
n=-1;}
}//if
n++;
}//while
}//change
void main()
{
static int i=0;
static int j=0;
char ch[MAX]s[MAX];
cout<<“请输入中缀表达式(以#作为结束符): “;
cin>>ch;
change(sch);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2571 2008-01-05 10:18 翻译程序\translation.cpp
文件 64512 2008-10-04 17:01 翻译程序\赋值语句翻译.doc
目录 0 2015-11-24 16:27 翻译程序\
评论
共有 条评论