当前位置: 首页 > news >正文

词法分析器报告

实验一、词法分析实验

专业 商业软件工程   姓名 陈子翔 学号 201506110223

一、        实验目的

 

编制一个词法分析程序。

 

二、        实验内容和要求

 

输入:源程序字符串;输出:二元组(种别,单词本身)。

 

三、        实验方法、步骤及结果测试

 

源程序名:词法分析.c,词法分析.exe

原理分析及流程图

原理主要根据老师给的表格

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

主要程序段及其解释:

  1. 1.      int i;
  2. 2.      char s[100];/*定义一个数组用来存放输入的字符*/
  3. 3.      printf("请输入字符串:");
  4. 4.      scanf("%s",&s);
  5. 5.      for(i=0;i<100;i++)
  6. 6.      {
  7. 7.      if(s[i]=='b'&&s[i+1]=='e'&&s[i+2]=='g'&&s[i+3]=='i'&&s[i+4]=='n')/*通过一个个字符来识别是否为我们需要的单词字符*/
  8. 8.      printf("1 , begin\n");/*输出格式主要为种别码,单词字符*/
  9. 9.      else if(s[i]=='i'&&s[i+1]=='f')
  10. 10.  printf("2 , if\n");
  11. 11.  else if(s[i]=='t'&&s[i+1]=='h'&&s[i+2]=='e'&&s[i+3]=='n')
  12. 12.  printf("3 , then\n");
  13. 13.  else if(s[i]=='w'&&s[i+1]=='h'&&s[i+2]=='i'&&s[i+3]=='l'&&s[i+4]=='e')
  14. 14.  printf("4 , while\n");
  15. 15.  else if(s[i]=='d'&&s[i+1]=='o')
  16. 16.  printf("5 , do\n");
  17. 17.  else if(s[i]=='e'&&s[i+1]=='n'&&s[i+2]=='d')
  18. 18.  printf("6 , end\n");
  19. 19.  else if(s[i]=='l'&&s[i+1]=='('&&s[i+2]=='l'&&s[i+3]=='|'&&s[i+3]=='d'&&s[i+3]==')'&&s[i+4]=='*')
  20. 20.  printf("10 , l(l|d)*\n");
  21. 21.  else if(s[i]=='d'&&s[i+1]=='d'&&s[i+2]=='*')
  22. 22.  printf("11 , dd*\n");
  23. 23.  else if(s[i]=='-')
  24. 24.  printf("14 , -\n");
  25. 25.  else if(s[i]=='*')
  26. 26.  printf("15 , *\n");
  27. 27.  else if(s[i]=='/')
  28. 28.  printf("16 , /\n");
  29. 29.  else if(s[i]==':'&&s[i+1]!='=')
  30. 30.  printf("17 , :\n");
  31. 31.  else if(s[i]==':'&&s[i+1]=='=')
  32. 32.  printf("18 , :=\n");
  33. 33.  else if(s[i]=='<'&&s[i+1]!='='&&s[i+1]!='>')
  34. 34.  printf("20 , <\n");
  35. 35.  else if(s[i]=='<'&&s[i+1]=='=')
  36. 36.  printf("21 , <=\n");
  37. 37.  else if(s[i]=='<'&&s[i+1]=='>')
  38. 38.  printf("22 , <>\n");
  39. 39.  else if(s[i]=='>'&&s[i+1]!='=')
  40. 40.  printf("23 , >\n");
  41. 41.  else if(s[i]=='>'&&s[i+1]=='=')
  42. 42.  printf("24 , >=\n");
  43. 43.  else if(s[i]=='=')
  44. 44.  printf("25 , =\n");
  45. 45.  else if(s[i]==';')
  46. 46.  printf("26 , ;\n");
  47. 47.  else if(s[i]=='(')
  48. 48.  printf("27 , (\n");
  49. 49.  else if(s[i]==')')
  50. 50.  printf("28 , )\n");
  51. 51.  else if(s[i]=='#')
  52. 52.  printf("0 , #\n");

运行结果及分析

 

 

四、        实验总结

 

这一次的实验依然是没有很好的做完整,其中一个很大的问题是,我输入了字符串能够正常识别但总会多出(((;这四个字符,目前问题尚未得到很好的解决。这是我第一次接触词法分析,虽然不是很理解词法分析的作用,但希望日后能够用好它。

转载于:https://www.cnblogs.com/BOXczx/p/5955869.html

相关文章:

  • httpclient 认证方式访问http api/resutful api并获取json结果
  • 2015年Java开发岗位面试题归类
  • 文件包含漏洞总结
  • 使用Xshell登录AWS的EC2云服务器和开启EC2上允许root+密码方式登录
  • 一次意外的ORA-12520
  • Linux配置SSH公钥认证与Jenkins远程登录进行自动发布
  • 日期格式 CST
  • Android重写getResources规避用户调整系统字体大小影响Android屏幕适配
  • Java.io.DataInputStream.readInt()
  • 第八课:通道抠图1(毛绒玩具)
  • Spring框架总结
  • linux命令:w、who、whoami、last、lastb、lastlog、basename、mail、hostname
  • 适用于web开发者和设计者的28款必备chrome浏览器插件
  • Hacker(三)之黑客定位目标---IP
  • DES ECB 模式 JAVA PHP C# 实现 加密 解密 兼容
  • [case10]使用RSQL实现端到端的动态查询
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • AWS实战 - 利用IAM对S3做访问控制
  • Debian下无root权限使用Python访问Oracle
  • ECMAScript入门(七)--Module语法
  • JS笔记四:作用域、变量(函数)提升
  • Mybatis初体验
  • MySQL数据库运维之数据恢复
  • node和express搭建代理服务器(源码)
  • 安装python包到指定虚拟环境
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 欢迎参加第二届中国游戏开发者大会
  • 记录一下第一次使用npm
  • 聊聊flink的TableFactory
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 主流的CSS水平和垂直居中技术大全
  • 阿里云服务器如何修改远程端口?
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #数学建模# 线性规划问题的Matlab求解
  • (27)4.8 习题课
  • (BFS)hdoj2377-Bus Pass
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (转)c++ std::pair 与 std::make
  • .form文件_SSM框架文件上传篇
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core 版本不支持的问题
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [04]Web前端进阶—JS伪数组
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [51nod1610]路径计数