..
编译原理实验报告
实验名称: 分析调试语义分析程序
TEST抽象机模拟器完整程序
保证能用!!!!!
一、实验目的
通过分析调试TEST语言的语义分析和中间代码生成程序,加深对语法制导翻译思想的理解,掌握将语法分析所识别的语法畴变换为中间代码的语义翻译方法。
二、实验设计
程序流程图
w
..
Statement_list()开始es=0读入一个符号es=0token=}Y{YNes=1Tooken=ifToken=ifNYIf_stat()Token=whileYwhile_stat()es=0NNToken=forNYfor_stat()declaration_list()Yes=0NNToken=readNYread_stat()NStatement_list()Token=writeNYwrite_stat()YYes=0NToken={NYCompound_state()}YNes=2Token=ID|NUM|(Yexpression_stat()N返回token=}YReturn(es) 语法分析 w
..
开始Es=0词法分析Es>0NY输出词法分析失败输出词法分析成功语法分析Es=0N输出语法分析错误Y输出语法分析成功结束 程序代码: Main.cpp #include
..
extern int TESTScan(FILE *fin,FILE *fout);
FILE *fin,*fout; //用于指定输入输出文件的指针
int main() {
if(es > 0)
printf(\词法分析有错,编译停止!共有%d个错误!\\n\if( (fin = fopen(szFinName,\{ }
if( (fout = fopen(szFoutName,\{ }
int es = TESTScan(fin,fout); fclose(fin); fclose(fout);
printf(\创建词法分析输出文件出错!\\n\return 0;
printf(\打开词法分析输入文件出错!\\n\return 0;
printf(\请输入词法分析输出文件名(包括路径):\scanf(\
printf(\请输入源程序文件名(包括路径):\scanf(\char szFinName[300]; char szFoutName[300];
else if(es == 0) {
printf(\词法分析成功!\\n\int es
=
0;
w
..
}
es = TESTparse(szFoutName); //调语法分析
if(es== true) printf(\语法分析成功!\\n\else printf(\语法分析错误!\\n\
} else
printf(\词法分析出现未知错误!\\n\
Parse.cpp
#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();
w