• 大小: 1.16MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-16
  • 语言: 其他
  • 标签:

资源简介

程序实现了if-then语句的翻译程序,生成词法分析结果,语法分析过程和中间代码生成,但是对于if-then语句的输入限制有些多,还有以前上传了一个同样的资源但是有些问题,改之后重新上传

资源截图

代码片段和文件信息

#include 
#include
#include 
#include 
#include 
#include 
#include 
#include
#include 
#define MAXSIZE 50
using namespace std;

ifstream InFile(“if语句.txt“ios::in);
ofstream OutFileCF(“词法分析结果.txt“ios::out);
ofstream OutFileYF(“语法分析过程.txt“ios::out);

stackanalysbackup;
char cbuffer;
char *key[7]={“if““else““then““int““void““char““bool“};//关键字 1                                               
char *border[6]={ ““  “#“  “{“  “}“  “(“  “)“ };//分界符 2
char *arithmetic[8]={“+“  “-“  “*“  “/“  “++“  “--““=“ “==“};//运算符 3    
char *relation[5]={“<“  “<=“  “>“  “>=“  “!=“};//关系运算符6  
queueque;

int sum=1;/////四元式序列的开始地址
int s=0;/////////保存sum的值,用于回填地址
char z=0;
int flag=-1;//////用于判断是否为第一次出栈
int FLAG=0;////判断指针是否需要后移,0后移,-0无需后移
int FLAG0=0;
int t=0;////////作为赋值语句四元式的下标
int n=0;//////////作为逻辑表达式四元式的下标
int m=48;///////作为中间变量的下标0的ASCII码  
stack opndoptrtempopnd0optr0temp0;//生成中间代码时用到的栈 

struct Word{//保存词法分析结果
char value[20];
int type;
Word *next;
};
struct SEQ{//保存四元式
char str[40];
int address;
};
Word *Head=new Word;
Word *cur=Head;//用于语法分析过程中输出剩余输入串
SEQ sequence[MAXSIZE];
SEQ logic[MAXSIZE];

void display(Word *head)
{
Word *p=head->next;
while(p)
{
OutFileCF<value<<“\t\t\t“<type< p=p->next;
}
}   

int search(char searchchar[]int wordtype)
{  
int i=0;
switch (wordtype)
{
case 1:

for (i=0;i<=6;i++)         //关键字
if (strcmp(key[i]searchchar)==0)
{
Word *p=Head;
while(p->next)p=p->next;
Word *q=new Word;
q->next=NULL;
strcpy(q->valuesearchchar);
q->type=1;
p->next=q;
if(i==0)que.push(‘f‘);
if(i==2)que.push(‘t‘);
return 1;
}

break;
}
case 2:
{
for(i=0;i<=5;i++)    //分界符
{
if(strcmp(border[i]searchchar)==0)
{
Word *p=Head;
while(p->next)p=p->next;
Word *q=new Word;
q->next=NULL;
strcpy(q->valuesearchchar);
q->type=2;
p->next=q;
que.push(searchchar[0]);
return 2;
}

break;
}

case 3:
{
for (i=0;i<=7;i++)    //运算符
{
if (strcmp(arithmetic[i]searchchar)==0)
{ que.push(searchchar[0]);
return 3;
}
}
break;


case 4:
{   //常数
Word *p=Head;
Word *q=new Word;
q->next=NULL;
while(p->next)p=p->next;
strcpy(q->valuesearchchar);
q->type=4;
p->next=q;
que.push(‘i‘);
return 4;
}    
case 5://标识符
{
Word *p=Head;
Word *q=new Word;
q->next=NULL;
while(p->next)p=p->next;
strcpy(q->valuesearchchar);
q->type=5;
p->next=q;
que.push(‘i‘);
return 5;
}
case 6:
{
for(i=0;i<=4;i++)
{
if(strcmp(relation[i]searchchar)==0)
{  
Word *p=Head;
while(p->next)p=p->next;
Word *q=new Word;
q->ne

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

     文件     618548  2009-06-19 10:46  SUCCESS\Debug\fuzhi.exe

     文件     851924  2009-06-19 10:46  SUCCESS\Debug\fuzhi.ilk

     文件     409273  2009-06-19 10:46  SUCCESS\Debug\fuzhi.obj

     文件    3243148  2009-06-18 19:26  SUCCESS\Debug\fuzhi.pch

     文件    1180672  2009-06-19 10:46  SUCCESS\Debug\fuzhi.pdb

     文件     156672  2009-06-19 10:46  SUCCESS\Debug\vc60.idb

     文件     159744  2009-06-19 10:46  SUCCESS\Debug\vc60.pdb

     文件      16352  2009-06-19 11:35  SUCCESS\fuzhi.cpp

     文件       3389  2009-06-18 20:11  SUCCESS\fuzhi.dsp

     文件        518  2009-06-18 20:30  SUCCESS\fuzhi.dsw

     文件      58368  2009-06-19 10:47  SUCCESS\fuzhi.ncb

     文件      48640  2009-06-19 10:47  SUCCESS\fuzhi.opt

     文件        741  2009-06-19 10:46  SUCCESS\fuzhi.plg

     文件         24  2009-06-18 20:26  SUCCESS\if语句.txt

     文件        137  2009-06-19 10:47  SUCCESS\词法分析结果.txt

     文件       2207  2009-06-19 10:47  SUCCESS\语法分析过程.txt

     目录          0  2009-06-19 10:46  SUCCESS\Debug

     目录          0  2009-06-19 11:35  SUCCESS

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

              6750357                    18


评论

共有 条评论