-
大小: 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
评论
共有 条评论