资源简介

编译原理的综合性实验,有详细实验报告以及完整代码

资源截图

代码片段和文件信息

#include
#include
#include
#include

#define KeyWordNum 13//关键字的个数
#define maxvartablep 500//符号表的最大行数
char *KeyWord[KeyWordNum]={“ ““program““var““procedure““begin““end““if“
                       “then““else““while““do““integer““real“};//12个关键词,其中第个设置为空是为了第二个的syn从开始
int line;//记录程序的行数
int error_count;//错误编号
int syn;//种别码
int var_count;//变量的数目
char token[20]temp1[10]temp2[10]temp3op1[10]op2[10];//一些单词码,临时数组,操作数
char place1[10]place2[10];//变量和常量的临时单元
char strTempID[10];//新的临时变量单元
int flag;//错误标记
int vartablep=0;//符号表的总行数    datap=0
int nNXQnT;//四元式的个数和临时变量的个数
int i;//常用变量
FILE *fin*fout*fp;//文件指针

struct{
char name[8];
int address;
}vartable[maxvartablep];//符号表,用来记录变量
struct
{
char op[10];
char argv1[10];
char argv2[10];
char result[10];
}pQuad[maxvartablep];//四元式
//QUATERNION *pQuad;
//函数的定义
void init();//初始化
void P_declear();
void P_begin();
char* S_let();
void P_analize();
void S_if();
void S_while();
void P_begin();
void enter(char *name);
void lookup(char *name);
void Scaner();
void parser();
void printQuaternion();

void main()
{  
printf(“请按任意键来运行简单的编译器,谢谢“);
    getchar();  
system(“cls“);  // 清屏函数
init();//初始化
Scaner();//词法扫描,把结果写入Scaner.txt文件中
parser();//语法和语义分析程序
printf(“\n-----------------------------------------\n“);
printf(“程序编译完毕,结果以四元式输出如下\n\n“);
printQuaternion();//显示输出所有的四元式
printf(“\n-----------------------------------------\n“);
}      

void init()//初始化
{
line=1;
error_count=0;
}
void error(int n)//出错处理
{
flag=1;
error_count++;
switch(n)
{
case 1: printf(“Error %d 格式出错缺少‘program‘ 错于第%d行\n“error_countline);
break;
    case 2: printf(“Error %d 格式出错缺少程序名错于第%d行\n“error_countline);
break;
    case 3: printf(“Error %d 格式出错缺少; 错于第%d行\n“error_countline);
break;
    case 4: printf(“Error %d 格式出错缺少var 错于第%d行\n“error_countline);
break;
    case 5: printf(“Error %d 未写任何语句错于第%d行!\n“error_countline);
break;
    case 6: printf(“Error %d 程序结束缺少. 错于第%d行!\n“error_countline);
break;
case 7: printf(“Error %d 说明语句出错! 错于第%d行\n“error_countline);
break;
case 8: printf(“Error %d 不存在匹配的end 错于第%d行!\n“error_countline);
break;
case 9: printf(“Error %d 语句出错错于第%d行!\n“error_countline);
break;
case 10:printf(“Error %d 赋值语句出错错于第%d行!\n“error_countline);
break;
case 11: printf(“Error %d 非法标识符错于第%d行!\n“error_countline);
break;
case 12: printf(“Error %d 没有匹配的注释符‘*/‘ 错于第%d行!\n“error_countline);
break;
case 13: printf(“Error %d 非正常结束错于第%d行!\n“error_countline);
break;
case 14: printf(“Error %d 非法字符错于第%d行!\n“error_countline);
break;
case 15: printf(“Error %d if语句出错错于第%d行!\n“error_countline);
break;
case 16: printf(“Error %d while语句出错错于第%d行!\n“error_countline);
break;
case 17: printf(“Error %d 符号表溢出错于第%d行!\n“error_countline);
break;
case 18: printf(“Error %d 变量重复定义错于第%d行!\n“error_countline);
brea

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

     文件      33792  2010-05-31 13:35  综合实验\Debug\vc60.idb

     文件      45056  2010-05-31 13:35  综合实验\Debug\vc60.pdb

     文件     217178  2010-05-31 13:35  综合实验\Debug\综合实验.exe

     文件     230688  2010-05-31 13:35  综合实验\Debug\综合实验.ilk

     文件      53391  2010-05-31 13:35  综合实验\Debug\综合实验.obj

     文件     226120  2010-05-31 13:35  综合实验\Debug\综合实验.pch

     文件     443392  2010-05-31 13:35  综合实验\Debug\综合实验.pdb

     文件        408  2008-12-31 15:37  综合实验\fin.txt

     文件        970  2010-05-31 13:35  综合实验\Scaner.txt

     文件        277  2008-12-31 16:11  综合实验\种别码.txt

     文件      21484  2010-05-31 13:29  综合实验\综合实验.cpp

     文件       3427  2010-05-31 13:29  综合实验\综合实验.dsp

     文件        524  2010-05-31 13:32  综合实验\综合实验.dsw

     文件      33792  2010-05-31 13:35  综合实验\综合实验.ncb

     文件      48640  2010-05-31 13:35  综合实验\综合实验.opt

     文件       1172  2010-05-31 13:35  综合实验\综合实验.plg

     文件    1144023  2010-05-31 13:44  综合实验\编译原理实验报告.doc

     目录          0  2010-05-31 13:35  综合实验\Debug

     目录          0  2010-05-31 13:44  综合实验

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

              2504334                    19


评论

共有 条评论