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

资源简介

完整的编译原理语法分析器的全套,还有实验报告。。。

资源截图

代码片段和文件信息

//提供一个编译原理的语义分析程序  你可以直接复制 用TC进行调试
#include “stdio.h“
#include “string.h“
#include  
#include 
#include “stdlib.h“

char prog[100]token[8]ch;
char *rwtab[6]={“begin““if““then““while““do““end“};
int synpmnsumq;
int kk;
//四元式表的结构如下:
struct 
{
char result1[8];
char ag11[8];
char op1[8];
char ag21[8];
}quad[20];


char *factor();
char *expression();
int yucu();
char *term();
int statement();
int lrparser();
char *newtemp();
void scaner();
void emit(char *resultchar *ag1char *opchar *ag2);


void main()

FILE *fp1*fp2;

if((fp1=fopen(“输入.txt““rt“))==NULL) 

printf(“Cannot open 输入.txt\n“); 
getch(); 
exit(1); 

if((fp2=fopen(“输出.txt““wt+“))==NULL) 

printf(“Cannot create 输出.txt FILE.strike any key exit“); 
getch(); 
exit(1); 


int j;
q=p=kk=0;
p=0;
//printf(“Please Input a String(end with ‘#‘):\n“);
while(ch!=‘#‘)
{
        ch = fgetc(fp1);
if(ch == EOF)
{
printf(“文件为空,请检查后再尝试!“);
return ;
}

prog[p++]=ch;
}
if(prog[p]==‘#‘)
{
printf(“输入的待分析的串不是以‘#‘结尾请修改之后再尝试!\n“);
return;
}
p=0;
    char buffer1[200] = {0};
sprintf(buffer1“词法分析结果如下:\n“);
fputs(buffer1fp2);
//printf(“词法分析结果如下:\n“);
    do
{
scaner();
switch(syn)
{
case 11:
//printf(“(%d%d)\n“synsum);
            sprintf(buffer1“(%d %d) \n“synsum);
    fputs(buffer1fp2);
break;
default:
//printf(“(%d%s)\n“syntoken);
sprintf(buffer1“(%d %s)\n“syntoken);
    fputs(buffer1fp2);
break;
}
}while(syn!=0);
printf(“\n“);
    
p=0;
char  buffer[200]={0};
sprintf(buffer“语法分析结果如下:(以四元式形式输出)\n“);
fputs(bufferfp2);
     //printf(“语法分析结果如下:(以四元式形式输出)\n“);
scaner();//扫描函数
lrparser();
if(q>19)
printf(“ to long sentense!\n“);
else 
{

       
for (j=0;j {
//printf(“( %s %s %s %s) \n\n“quad[j].op1quad[j].ag11quad[j].ag21quad[j].result1);
sprintf(buffer“( %s %s %s %s) \n\n“quad[j].op1quad[j].ag11quad[j].ag21quad[j].result1);
    fputs(bufferfp2);
}
}
printf(“已把相应的词法和语法的结果保存到相应的文件中,请查阅!\n“);
fclose(fp1);
fclose(fp2);
}
int lrparser()
{
int schain=0;
kk=0;
if (syn==1) //得到begin

scaner();//扫描下个字符
schain=yucu();
if(syn==6)//得到end

scaner();//扫描下个字符
if((syn==0)&&(kk==0))  //得到#
printf(“Success!\n“);
}
else 
{
if(kk!=1)
printf(“short of ‘end‘ !\n“);
kk=1;
getch();
exit(0);
}
}
else 

printf(“short of ‘begin‘ !\n“);
kk=1;
getch();
exit(0);
}
return (schain);
}
int yucu()

int schain=0;
schain=statement();
while(syn==26)

scaner();
schain=statement();
}
return (schain);
}
int statement()

char tt[8]eplace[8];
int schain=0;
if (syn==10)
{
strcpy(tttoken); //tt中保存的是第一个字符
scaner();
if(syn==18)    //检测到=号
{
scaner();
strcpy(eplaceexpression());
emit(tt

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

     文件       6695  2008-06-18 12:04  编译原理课程设计\语法分析.cpp

     文件    1394176  2008-06-19 17:31  编译原理课程设计\课程设计.doc

     文件      41984  2008-06-19 10:55  编译原理课程设计\语法分析.ncb

     文件        718  2008-06-19 10:37  编译原理课程设计\语法分析.plg

     文件         37  2008-06-19 10:26  编译原理课程设计\输入.txt

     文件        328  2008-06-19 10:36  编译原理课程设计\输出.txt

     文件       3427  2008-06-19 10:23  编译原理课程设计\语法分析.dsp

     文件      27648  2008-06-19 11:36  编译原理课程设计\编译任务书.doc

     文件      25600  2008-06-19 10:41  编译原理课程设计\封面.doc

     文件      48640  2008-06-19 10:55  编译原理课程设计\语法分析.opt

     文件        541  2008-06-19 10:55  编译原理课程设计\语法分析.dsw

     文件      41984  2008-06-19 10:37  编译原理课程设计\Debug\vc60.idb

     文件      53248  2008-06-19 10:24  编译原理课程设计\Debug\vc60.pdb

     文件     196680  2008-06-19 10:37  编译原理课程设计\Debug\语法分析.exe

     文件     205004  2008-06-19 10:37  编译原理课程设计\Debug\语法分析.ilk

     文件     484352  2008-06-19 10:24  编译原理课程设计\Debug\语法分析.pdb

     文件     238324  2008-06-19 10:24  编译原理课程设计\Debug\语法分析.pch

     文件      23104  2008-06-19 10:37  编译原理课程设计\Debug\语法分析.obj

     目录          0  2008-06-22 10:16  编译原理课程设计\Debug

     目录          0  2008-06-22 10:16  编译原理课程设计

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

              2792490                    20


评论

共有 条评论