实验一 词法分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验名称:词法分析器设计 专业:计算机科学与技术 姓名:李玉坤 学号:200911810 编 译 原 理 实 验 报 告 PAGE PAGE 1 词法分析器设计 一.实验要求 1、从源程序文件中读取有效字符和并将其转换成二元组机内表示形式输出。 2、掌握词法分析的实现方法。 二.实验内容 1、主程序设计要求: (1)主程序的说明部分为各种表格和变量安排空间(关键字和特殊符号表)。 (2)id 和ci 数组分别存放标识符和常数;还有一些为造表填表设置的变量。 (3)主程序的工作部分建议设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上送来的一个单词;调用词法分析过程;输出每个单词的内部码。 2、词法分析过程要求: 该过程取名为 lexical,它根据输入单词的第一个有效字符(有时还需读第二个字符),判断单词类,产生类号。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组 id 中,将常数存入数组中 ci 中,并记录其在表中的位置。 注:所有识别出的单词都用二元组表示。第一个表示单词的种类。关键字的 t=1;标识符的 t=2;常数 t=3;运算符 t=4;界符 t=5。第二个为该单词在各自表中的指针或内部码值(常数表和标识符表是在编译过程中建立起来的。其 i 值是根据它们在源程序中出现的顺序确定的)。 关键字和特殊符号表格如下: 单词代 码 1 2 3 4 5 6 7 8 9 10 名字 int char float void const if else do while scanf 单词代 码 11 12 13 14 15 16 17 18 19 20 名字 printf return main + – * / % = 单词代 码 21 22 23 24 25 26 27 28 29 30 名字 == != = = || ! 单词代 码 31 32 33 34 35 36 37 38 39 40 名字 ( ) { } ; , “ ‘ ++ -- 将词法分析程序设计成独立一遍扫描源程序的结构。其主流程图如下: 图1 词法分析程序流程图 三.程序设计思想及实现步骤 设计思想: 本程序使用MFC可视化程序设计实现,采用vs2010编译环境。 通过Eidt控件输入程序代码,点击按钮启动词法分析,将结果显示在CListBox控件中。 实现步骤: 1、为程序各变量设计存储形式,具体设计如下所示: CString m_strToken; 读入的程序代码 CString m_strCodes; 得到的一个单词或符号 char m_ch; 字符变量,存放最新读进的源程序字符 int m_nLocat; 查找时的位置 int m_nId; 标识符表位置 int m_nDigit; 常数表中的位置 CString WordSheet[WORD_LEN]; 关键字表 CString IdSheet[WORD_LEN]; 标识符表 CString DigitSheet[WORD_LEN]; 常数表 2、为程序设计各个过程,具体设计如下所示: void GetBC(void); 检查空格符,并将其舍弃 void Concat(void); 连接字符 BOOL IsLetter(void); 判断输入的是否为字符 BOOL IsDigit(void); 判断输入的是否为数字 int Reserve(void); 查找保留字表,返回在表中对应的位置 void Retract(void); 回退一个字符得到单词 int InsertId(void); 将单词插入标识符表 /int InsertConst(void) 将数字插入常数表 3、对各个过程进行实现; 4、调试运行并检验实验结果,结果如图1.1所示: 图 1.1 词法分析结果图 四.程序源码 1、各过程的实现: void CAnalysisWordsDlg::GetChar(void) { //得到下个输入字符 UpdateData(); m_ch = m_strCodes.GetAt(m_nLocat); m_nLocat++; } void CAnalysisWordsDlg::GetBC(void) { //检查空白符 if(m_ch == ) GetChar(); } // 连接字符 void CAnalysisWordsDlg::Concat(void) { m_strToken += m_ch; } //是否是字符 BOOL

文档评论(0)

139****2545 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档