好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

c1词法分析实验报告.docx

8页
  • 卖家[上传人]:ss****gk
  • 文档编号:232891282
  • 上传时间:2021-12-31
  • 文档格式:DOCX
  • 文档大小:101.20KB
  • / 8 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 成绩姓名学号实验报告实验题目:词法分析课程名称:编译原理主讲教师:_班级:实验日期: 提交日期: 一、 实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解二、 实验内容实验需要编写主函数,语法扫描程序以及从输入缓冲区读取一个字符到ch函数、去掉空 白符号函数、拼接函数、判断是否是字母函数、判断是否数字函数、检索关键字表格函数、 回退一个字符函数识别语言的状态转换图为:1. 主函数输入以“#”结束,先将输入字符存入input,然后检查字符,当字符为空格“\n”时 候不能调用scaner,其他字符才调用scaner函数逐个输出由种别码、单词符号组成的二 元组所构成的序列uoid main()typenun<1000)printFCC^d, %s)\n", onevjord->tppenum, oneword->word);ouer=oneword->typenum;//打印种别码和单词自身的值>printf ("\npress tt to exit:");//按*岀程序 scanFC^I^ttJs", input);>2. 语法扫描函数scaner函数的作用是处理字符,给每一个字符分配相应的种别码。

      其中有的字符有两位, 则要考虑接下来的字符,并分配种别码WORD* scaner()typenum=10; myword->word="";p_token=0;m_getch();getbc();iF(letter()){while(letter() || digit()){ concat(); m_getch();>retract();myword->typenun=reserue();myword->word=token; return(myword);>else if(digit()){ while(digit()){ concat(); m_getch();>retract();myword->typenun=11;myword->word=token; return(myword);else switch(ch){ case, = ,: n_getch();iF(ch二・=・){ nyword->typenun=21; nyword->word=,,=="; return(nyword);> retract(); nyword->typenun=25; my ;return(myword); break;+ ・:myword->typenum=13;return(nyword); break;case- : myword->typenuin=14; return(myword); break;case: myword->typenum=15; myword->word=・ v; return(myword); break;case/: nyword->typenun=16; my 讪 ;return(nyword);case(: nyword->typenun=27;return(myword); break;case): myword->typenun=28; nyword->word=")"; return(myword); break;case:1: n_getch();iF(ch匸Hmyvjord->typenun=18; my; return(myword);}retract(); nyword->typenum=17; myword->word=" :B,; return(myword);break;case;: myword->typenun=26; myword->word="; return(nyword);break;case^: n_getch();myword->typenun=24; myword->word=,,>="; return(nyword);> retract(); nyword->typenun=23; myword->word=">"; return(myword); break;case<: n_getch();iF(ch二・=・){ myword->typenum=22; my word-〉; return(myword);}retract(); nyword->typenun=20; myword->word=,,<"; return(nyword); break;case\0: nyword->typenun=1000; myword->word=,,ouer"; return(myword); break;default: myword->typenun=-1;return(myword);3. 从输入缓冲区读取一个字符到ch中将输入换缓冲区指针所指的内容读取到ch中,并将指针指向下一位。

      〃从输入缓神区谟取二个字符剖Ch中char n_getch(){ ch=input[p_input]; p_input=p_input+1; return(ch);>4. 去掉空白符号函数如果读取的是空格或者是digit的话,指针指向下一位〃去掉空白符号uoid getbc(){ while(ch==・ || ch==10){ ch=input[p_input]; p_input=p_input+1;}>5. 拼接单词函数〃拼接单词uoid concat(){ token[p_token]=ch; p_token=p_token+1; token[p_token]=\0;>6. 判断是否字母〃判断是否字母int letter(){iF(ch>=a,&&ch<=,z, || ch>=,fi,&&ch<=,Z,) return 1;else return 0;>7. 判断是否数字函数〃判断是否字母int letter()=,a,&&ch<=,z, || ch>=*A,&&ch<=,Z,) return 1;else return 0;&检索关键字表格〃检索关键字int reserue() return 10;>9.回退一个字符函数〃回退一个字符 uoid retract(){ p_input=p_input-1;>结果 三、实验思考与总结(详细说明自己的体会)这次的实验因为书上给出了详细的算法思想,以及给出了程序框架,所以我能较为轻松 地将程序写好。

      但是在写主函数的时候有一个循环写错了,导致我的程序出现如下图的错误 结果:不过好在循环体不大,可以很容易检查出错误,于是我将程序改好就可以正确运行了 最大的收获就是起步的时候我不知道应该怎样把自动机转换成程序,后来开始写程序的 时候慢慢地能够将思想转换成代码加以实现,能够将自己所学的思想或理论用程序表达出来 是一件很有成就感的事。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.