• 大小: 527KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-07-08
  • 语言: C/C++
  • 标签: 递归下降  if  then  编译  

资源简介

编译原理实验,用C++实现的一个对if then条件语句的翻译过程,可以实现对简单布尔表达式和简单赋值语句的翻译,可以识别长串标识符。

资源截图

代码片段和文件信息

#include
#include
#include
#include“bianyi_h.h“
using namespace std;

void main()
{
lexi_analy();
cout<<“*******词法分析的结果为:*******“< print();
cout< print_grammar();//输出所用文法

Analyser();
cout<<“******语法分析的结果用三地址输出为:******“< printexpression();
system(“pause“);
}

bool init(char filename[255])
{
fin.open(filename);
if(fin.fail())
{
cout<<“文件打开出错!“< return false;
}
return true;
}
void lexi_analy()
{
cout<<“输入待编译文件名:“;
char fname[200];
cin>>fname;
if(!init(fname))   //文件打开初始化没成功
return;

char al[1000];
//int pos=0;
int i=0;
char ch;
int j=0;
fin.seekg(j);
fin.get(ch);
al[j]=ch;
while(al[j]!=‘#‘)

if(al[j]>=‘a‘ && al[j]<=‘z‘||al[j]>=‘A‘ && al[j]<=‘Z‘||al[j]==‘_‘)
{ //变量或关键字
int m=0;
char b[20];
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
while(ch!=‘ ‘&&ch!=‘\n‘&&(al[j]>=‘a‘ && al[j]<=‘z‘||al[j]>=‘A‘ && al[j]<=‘Z‘||al[j]==‘_‘||al[j]>=‘0‘&&al[j]<=‘9‘))
{
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
}
//j++;
b[m]=‘\0‘;
string b1=b;
if(b1==“if“)
{
Word_table[W_length].ch=“if“;
Word_table[W_length++].type=1;
}
else if(b1==“then“)
{
Word_table[W_length].ch=“then“;
Word_table[W_length++].type=2;
}
else
{//变量
Word_table[W_length].type=11;
Word_table[W_length++].ch=b;
}
}
else if(al[j]==‘(‘)
{
Word_table[W_length].ch=“(“;
Word_table[W_length++].type=3;
j++;
}
else if(al[j]==‘)‘)
{
Word_table[W_length].ch=“)“;
Word_table[W_length++].type=4;
j++;
}
else if(al[j]>=‘0‘&&al[j]<=‘9‘)            //判断数字
{
char b[20];
int m=0;
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;//再读入下一个字符
while(al[j]>=‘0‘&&al[j]<=‘9‘)
{
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
}
if(al[j]!=‘.‘)//如果当前读入的符号不为小数点,则常数读完毕
{
b[m++]=‘\0‘;
}
else//当前字符为小数点则继续向下读入
{
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
while(al[j]>=‘0‘&&al[j]<=‘9‘)
{
b[m++]=al[j++];
fin.seekg(j);
fin.get(ch);
al[j]=ch;
}
b[m]=‘\0‘;
}
Word_table[W_length].type=12;
Word_table[W_length++].ch=b;
}
else if(al[j]==‘+‘||al[j]==‘-‘||al[j]==‘*‘||al[j]==‘/‘)
{
Word_table[W_length].type=13;
Word_table[W_length++].ch=al[j];
j++;
}
else if(al[j]==‘>‘)
{
j++;
fin.seekg(j);
fin.get(ch);
if(ch==‘=‘)
{
al[j++]=ch;
Word_table[W_length].ch=“>=“;
Word_table[W_length++].type=6;
}
else
{
Word_table[W_length].ch=“>“;
Word_table[W_length++].type=9;
//j--;
}
}
else if(al[j]==‘<‘)
{
j++;
fin.seekg(j);
fin.get(ch);
if(ch==‘=‘)
{
al[j++]=ch;
Word_table[W_length].ch=“<=“;
Word_table[W_length++].type=

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

     文件      81920  2010-01-08 14:43  递归下降法\debug\递归下降法.exe

     文件     663376  2010-01-08 14:43  递归下降法\debug\递归下降法.ilk

     文件     576512  2010-01-08 14:43  递归下降法\debug\递归下降法.pdb

     文件       8384  2010-01-08 14:43  递归下降法\递归下降法\bianyicpp.cpp

     文件       1300  2010-01-08 00:10  递归下降法\递归下降法\bianyi_h.h

     文件     116194  2010-01-08 14:43  递归下降法\递归下降法\Debug\bianyicpp.obj

     文件       6674  2010-01-08 14:43  递归下降法\递归下降法\Debug\BuildLog.htm

     文件         63  2010-01-08 14:43  递归下降法\递归下降法\Debug\mt.dep

     文件     183296  2010-01-08 14:43  递归下降法\递归下降法\Debug\vc80.idb

     文件     208896  2010-01-08 14:43  递归下降法\递归下降法\Debug\vc80.pdb

     文件        403  2010-01-05 21:08  递归下降法\递归下降法\Debug\递归下降法.exe.embed.manifest

     文件        468  2010-01-05 21:08  递归下降法\递归下降法\Debug\递归下降法.exe.embed.manifest.res

     文件        385  2010-01-08 14:43  递归下降法\递归下降法\Debug\递归下降法.exe.intermediate.manifest

     文件        243  2010-01-10 17:13  递归下降法\递归下降法\result.txt

     文件         45  2010-01-08 14:45  递归下降法\递归下降法\sample.txt

     文件       4041  2010-01-06 17:05  递归下降法\递归下降法\递归下降法.vcproj

     文件       1407  2010-01-10 22:18  递归下降法\递归下降法\递归下降法.vcproj.hp-PC.hp.user

     文件    1428480  2010-01-10 22:18  递归下降法\递归下降法.ncb

     文件        910  2010-01-05 21:00  递归下降法\递归下降法.sln

    ..A..H.     25088  2010-01-10 22:18  递归下降法\递归下降法.suo

     目录          0  2010-01-08 14:43  递归下降法\递归下降法\Debug

     目录          0  2010-01-08 13:10  递归下降法\debug

     目录          0  2010-01-08 14:43  递归下降法\递归下降法

     目录          0  2010-01-08 14:30  递归下降法

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

              3308085                    24


评论

共有 条评论