编译原理-语法分析实验报告.docx

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理-语法分析实验报告

课程实验报告课程名称:编译原理(语法分析) 专业班级:信息安全1001班学号: U201014608 姓名:指导教师:骆婷报告日期: 2010/11/8 计算机科学与技术学院1、实验目的设计并编制一个语法分析程序,加深对语法分析程序中递归下降分析方法的理解;巩固对代码生成及报错处理等理论的认识;培养对完整系统独立分析和设计的能力;培养学生独立编程的能力;2、实验要求利用C语言编制递归下降分析程序,并对简单语言进行语法分析。2.1 待分析的简单语法的语法用扩充的BNF表示如下: 程序::=begin 语句串 end语句串::=语句{:语句}语句::= 赋值语句赋值语句::=ID := 表达式表达死::=项{+项|-项}项::=因子{*因子|/因子}因子::=ID | NUM | ( 表达式 )2.2语法分析程序的功能输入单词串,以”#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出”error”例如: 输入: begin a:=9;b:=0 end # 输出: success 输入: begin a=9 end # 输出:error3、词法分析程序的算法思想算法的基本任务是从字符串中表示的源程序中识别出具有独立意义的单词符号,并通过其基本文法,正确规约到开始符号。全局变量的设置在此程序中,需要设置两个个全局变量:关键字表retab[6]、当前识别的种别号syn。其中retab中元素为“begin”“if”“then”“while”“do”“end”,在程序会扫描出标识符时,首先查关键字表。如果能找到匹配的单词,则该单词为关键字,否则为一般标识符。syn用于每一步扫描中scanner 的返回值。在整个语法分析程序中均需要使用该全局变量。主程序main算法流程图YN扫描子程序scanner()的算法流程图字母数字运算符/界符其他符号N Ylrparser()的算法流程图NYN YNY语句串分析程序yucu()的算法流程图NYstatement语句分析算法流程图否是expression表达式分析算法流程图NYterm分析函数算法流程图NYfactor分析函数算法流程图YNYNYN Y4、实验结果输入begin a:=9; x:= 2*3 end # 结果如下输入begin a=9end # 结果如下5、实验感想及总结本次实验和第一实验一样,框架已经给出,算法已经用类C语言写出,我们需要做的是将第一个实验和第二个实验很好的结合起来。由于第一次实验中不是按照书中的框架写出的代码,因此在第二次实验时传递参数时出现了问题,最后不得不利用全局变量syn解决。通过两次编译原理的实验,更加理解了词法语法分析的过程,促进了对课程的进一步学习。6、源代码#include stdio.h#includestring.h#includectype.h#includestdlib.hchar GetChar(char *input,int *index,int length);intClearBlank(char *input,int (*index),int length);int reserve(char *s);void lrparser(char *input,intinputLength,int *index);void yucu(char *input,intinputLength,int *index);void factor(char *input,intinputLength,int *index);void statement(char *input,intinputLength,int *index);void expression(char *input,intinputLength,int *index);void term(char *input,intinputLength,int *index);char *retab[6]={begin,if,then,while,do,end};//关键字intsyn=0;intmyIsAlpha(char ch){if(islower(ch)==2 || isupper(ch)==1){ return 1; }else{return 0;}}void scaner(char *input,intinputLength,int *index){char s[256]=; //保存当前的字符char ch=GetChar(input,index,inputLength);intnowPosition=0;int j=0;if(myIsAlpha(ch)==1) //如果是字

文档评论(0)

tianma2015 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档