TEST语言 -语法分析,词法分析实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理实验报告

实验名称:分析调试语义分析程序

TEST抽象机模拟器完整程序

保证能用!!!!!

一、实验目的

通过分析调试TEST语言的语义分析和中间代码生成程序,加深对语法制导翻译思想的理解,掌握将语法分析所识别的语法范畴变换为中间代码的语义翻译方法。

二、实验设计

程序流程图

extern int TESTScan(FILE *fin,FILE *fout);

FILE *fin,*fout; //用于指定输入输出文件的指针

int main()

{

char szFinName[300];

char szFoutName[300];

printf("请输入源程序文件名(包括路径):");

scanf("%s",szFinName);

printf("请输入词法分析输出文件名(包括路径):");

scanf("%s",szFoutName);

if( (fin = fopen(szFinName,"r")) == NULL)

{

printf("\n打开词法分析输入文件出错!\n");

return 0;

}

if( (fout = fopen(szFoutName,"w")) == NULL)

{

printf("\n创建词法分析输出文件出错!\n");

return 0;

}

int es = TESTScan(fin,fout);

fclose(fin);

fclose(fout);

if(es > 0)

printf("词法分析有错,编译停止!共有%d个错误!\n",es);

else if(es == 0)

{

printf("词法分析成功!\n");

int es = 0;

es = TESTparse(szFoutName); //调语法分析

if(es== true) printf("语法分析成功!\n");

else printf("语法分析错误!\n");

}

else

printf("词法分析出现未知错误!\n");

}

Parse.cpp

#include

#include

#include

#include

#include

// function

bool TESTparse();

bool compound_Stat();

bool program();

bool statement();

bool expression_stat();

bool expression();

bool bool_expr();

bool additive_expr();

bool term();

bool factor();

bool if_stat();

bool while_stat();

bool for_stat();

bool write_stat();

bool read_stat();

bool declaration_stat();

bool declaration_list();

bool statement_list();

bool compound_stat();

char token[20],token1[40]; //token保存单词符号,token1保存单词值FILE *fp; //用于指向输入文件的指针

int EsLine = 0;

typedef struct

{

int es;

int line;

}EsInf;

std::vector StackEs;

//语法分析程序

void ProcessError(int es)

{

EsInf temp;

temp.es = es;

temp.line = EsLine;

StackEs.push_back(temp);

}

bool ReadFile(char *tok, char *tok1)

{

if(feof(fp))

return false;

fscanf(fp,"%s\t%s\n",tok,tok1);

printf("%s\t%s\n",tok,tok1);

EsLine++;

return true;

}

bool TESTparse(char *pFileName)

{

bool es = true;

if((fp=fopen(pFileName,"r"))==NULL)

{

printf("\n打开%s错误!\n",pFileName);

return false;

}

else

program();

if(!feof(fp))

ProcessError(9);

fclose(fp);

printf("=====语法分析结果!=====\n");

if(StackEs.size() == 0)

{

printf("语法分析成功!\n");

return true;

}

else

{

int i;

for(i = 0; i < StackEs.size(); i++)

{

printf("在第%d行",StackEs[i].line);

switch(StackEs[i].es)

{

相关文档
最新文档