bpaieAAA编译原理实验报告.docxVIP

  • 3
  • 0
  • 约4.22千字
  • 约 8页
  • 2021-02-05 发布于天津
  • 举报
[标准实验报告] 南昌航空大学实验报告 二00七年三月三日 课程名称:编译原理 实验名称: 词法分析 班级: 0406H-13 姓名: 毛红梅 同组人: } 指导教师评定: 签名: 一、 实验目的 通过设汁编制调试一个具体的词法分析程序,加深对词法分析原理的理 解。并掌握在对程序设讣语言源程序进行扫描过程中将苴分解为各类单词的 词法分析方法。 这里以开始左义的C语言子集的源程序作为词法分析程序的输入数据。 在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”左义 的源程序字符串时,将它翻译成固泄长度的单词内部表示,并查填适当的信 息表。经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有 等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识 符表,它们分别包含了源程序中的所有常数和所有标识符。 二、 实验要求 ( 程序能够从左到右一个字符一个字符地读入源程序,并对构成的源程序 的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。 并给出单词的值和属性。 三、实验步骤 下而简要分析一下词法分析程序的运行流程: 主函数main(): 打开要分析的C源程序,若不能正确打开,则报错。 先从源程序中读入一个字符ch,然后进行如下处理: 1、 ch是字符:转入关键字和标识符处理子函数: 2、 ch是数字:转入数字处理函数; 3、 ch是其他字符:转入其他字符处理子函数; 结束。 关键字和标识符处理子函数alphaprocess(char buffer): 1、 将buffer送入临时数组alphatp[O],再读入一个字符至buffer: 2、 判断buffer是否为字符或数字,若是,则alphatp[l]=buffer: 3、 重复1,2,直到2判断为假;在alphatp末尾添加、O: 4、 调用search()子函数,在关键字表中匹配alphatp,若匹配成功,则 返回序号: 5、 调用search,在标识符表中匹配alphatp,若匹配成功,则返回序号: 6、 在标识符表中添加alphatp,并返回序号; 四、参考源代码 程序 #in cludeo main() { printf (this is my first test turbor c ”); } #include #include #inelude #inelude #inelude #define NULLO FILE *fp; char ebuffer; char^keypFrDCT/BEGINrELSETENDTlFTTHENrVARTWHILE”}; char *border[6]=C;「:二/)”}; char 怜rithmetic⑷二W}; char *relation⑹二「丁=丁=罗、丁=丁“}; char *consts[20]; char *label[20]; int constnum=Ojabelnum=O; int search(char searchchar[],int wordtype) int i=0; switch (wordtype) { case l:for (i=0;i=7;i++) { if (strcmp(key[i]/searchchar)==O) return(i+l); }; case 2:{for (i=0;i=5;i++) { if (strcmp(border[i]/searchchar)==0) return(i+l); }; return(O); } case 3:{for (i=0;i=3;i++) if (strcmp(arithmetic[i]/searchchar)==O) { return(i+l); }; }; return(O); }; case 4:{for (i=0;i=5;i++) if (strcmp(relation[i]/searchchar)==0) { return(i+l); }; }; return(O); }; case 5:{for (i=O;i=constnum;l++) if (strcmp(consts[i],searchchar)==O) { return(i+l); }; } consts[i?l]=(char *)malloc(sizeof(searchchar)); strcpy(c on sts[i-l]zsearchchar); constnum++; retur n(i); }; case 6:{for (i=O;i=labelnum;i++) { if (strcmp(label[i]/searchchar)==O) { return(i+l); }; } label[i-l]=(char

文档评论(0)

1亿VIP精品文档

相关文档