编译原理课程设计代码 赋值语句的递归下降翻译程序设计


编译原理课程设计代码 赋值语句的递归下降翻译程序设计编译原理课程设计代码 赋值语句的递归下降翻译程序设计编译原理课程设计代码 赋值语句的递归下降翻译程序设计
资源截图
代码片段和文件信息
#include 
#include 
#include 
#include 
using namespace std;
char prog[80]token[8];
char ch;
int synpq=0k=0kk=0mnsum;
char temp[5];
string rwtab[6]={“begin““if““then““while““do““end“};
void scaner();
string expression();
string factor();
string lrparser();
string statement();
string term();
string yucu();
int str2int( string str);
string int2str( int num);

string newtemp()
{
sprintf(temp“T%d“++k);
return (string)temp;
}

int main(int argcchar ** argv)
{
if(argc<3)
{
cout<<“ 本软件在dos环境下使用!
 使用方法:tzcompile 源文件名 中间代码文件名
“< exit(1);
}
p=0;
q=0k=0kk=0;
string result=““;
ifstream fin(argv[1]);
ofstream fout(argv[2]);
q=0;
cout< cout<<“开始读取文件“< do
{
 ch=fin.get();
 prog[p++]=ch;
}while(ch!=‘#‘);
cout<<“文件的内容为:“< cout< p=0;
q=0;
result=lrparser();
cout<<“文件的逆波兰式为:
“< fout< fin.close();
fout.close();
cout<<“press any key to continue...“;
cin.get();
}
void scaner()
{
for(n=0;n<8;n++) token[n]=NULL;
ch=prog[p++];
while(ch==‘ ‘ || ch==‘
‘|| ch==‘ ‘)ch=prog[p++];
if((ch>=‘A‘ && ch<=‘Z‘) || (ch>=‘a‘ && ch<=‘z‘))//ch 是字母字符
{
m=0;
do
{
token[m++]=ch;/*ch->token;*/
ch=prog[p++];
}while((ch>=‘A‘ && ch<=‘Z‘) || (ch>=‘a‘ && ch<=‘z‘) || (ch>=‘0‘ && ch<=‘9‘));/*ch为字母字符或数字字符*/
token[m++]=‘‘;
p--;//回退一个字符;
syn=10;
for(n=0;n<6;n++)
if(token==rwtab[n])
{
syn=n+1;
break;
}
}
else
{
if(ch>=‘0‘ && ch<=‘9‘/*ch是数字字符*/)
{
sum=0;
m=0;
while(ch>=‘0‘ && ch<=‘9‘/*ch是数字字符*/)
{
sum=sum*10+ch-‘0‘;

ch=prog[p++];
}

p--;//回退一个字符;
syn=11;
}
else
{
switch(ch)
{
case ‘<‘:
m=0;
token[m++]=ch;
ch=prog[p++];
if(ch==‘>‘)
{
syn=21;
token[m++]=ch;
}
else if(ch==‘=‘)
{
syn=22;
token[m++]=ch;
}
else
{
syn=20;
p--;//回退一个字符
}
break;
case ‘>‘:
m=0;
token[m++]=ch;//ch->token;
ch=prog[p++];
if(ch==‘=‘)
{
syn=24;//将>=的种别码->syn;
token[m++]=ch;//ch->token;
}
else
{
syn=23;//将>的种别码->syn;
p--;//回退一个字符
}
break;
case ‘:‘:
    m=0;
token[m++]=ch;//ch->token;
//cout<<“when read :ch=  “< ch=prog[p++];
if(ch==‘=‘)
{
token[m++]=ch;
//cout<<“when read =token=  “< syn=18;//将:=的种别码->syn;

}
else
{
syn=17;//将>的种别码->syn;
p--;//回退一个字符
}
break;
case ‘+‘:

syn=13;
token[0]=ch;
break;
case ‘-‘:
syn=14;
token[0]=ch;
break;
case ‘*‘:
syn=15;
token[0]=ch;
break;
case ‘/‘:
syn=16;
token[0]=ch;
break;
case ‘=‘:
syn=25;
token[0]=ch;
break;
case ‘;‘:
syn=26;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         54  2009-06-19 01:55  代码-飞 est
un.bat

     文件     573440  2009-06-19 01:38  代码-飞 est zcompile.exe

     文件     593920  2009-06-19 01:15  代码-飞 est zvm.exe

     文件         73  2009-06-19 12:11  代码-飞 estout.txt

     文件          0  2009-06-19 12:12  代码-飞 est
esult.txt

     文件         76  2009-06-19 01:45  代码-飞 estcode2.txt

     文件         36  2009-06-19 01:46  代码-飞 estcode0.txt

     文件         65  2009-06-19 02:00  代码-飞 estcode3.txt

     文件         40  2009-06-19 01:46  代码-飞 estcode1.txt

     文件       3428  2009-06-19 01:15  代码-飞 zvm.cpp

     文件       6055  2009-06-19 01:38  代码-飞 zcompile.cpp

----------- ---------  ---------- -----  ----

              1177187                    11


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)