-
大小: 1.16MB文件類型: .rar金幣: 2下載: 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
評論
共有 條評論