词法分析器报告

实验一、词法分析实验

专业 商业软件工程   姓名 陈子翔 学号 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 ");/*输出格式主要为种别码,单词字符*/
  9. 9.      else if(s[i]=='i'&&s[i+1]=='f')
  10. 10.  printf("2 , if ");
  11. 11.  else if(s[i]=='t'&&s[i+1]=='h'&&s[i+2]=='e'&&s[i+3]=='n')
  12. 12.  printf("3 , then ");
  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 ");
  15. 15.  else if(s[i]=='d'&&s[i+1]=='o')
  16. 16.  printf("5 , do ");
  17. 17.  else if(s[i]=='e'&&s[i+1]=='n'&&s[i+2]=='d')
  18. 18.  printf("6 , end ");
  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)* ");
  21. 21.  else if(s[i]=='d'&&s[i+1]=='d'&&s[i+2]=='*')
  22. 22.  printf("11 , dd* ");
  23. 23.  else if(s[i]=='-')
  24. 24.  printf("14 , - ");
  25. 25.  else if(s[i]=='*')
  26. 26.  printf("15 , * ");
  27. 27.  else if(s[i]=='/')
  28. 28.  printf("16 , / ");
  29. 29.  else if(s[i]==':'&&s[i+1]!='=')
  30. 30.  printf("17 , : ");
  31. 31.  else if(s[i]==':'&&s[i+1]=='=')
  32. 32.  printf("18 , := ");
  33. 33.  else if(s[i]=='<'&&s[i+1]!='='&&s[i+1]!='>')
  34. 34.  printf("20 , < ");
  35. 35.  else if(s[i]=='<'&&s[i+1]=='=')
  36. 36.  printf("21 , <= ");
  37. 37.  else if(s[i]=='<'&&s[i+1]=='>')
  38. 38.  printf("22 , <> ");
  39. 39.  else if(s[i]=='>'&&s[i+1]!='=')
  40. 40.  printf("23 , > ");
  41. 41.  else if(s[i]=='>'&&s[i+1]=='=')
  42. 42.  printf("24 , >= ");
  43. 43.  else if(s[i]=='=')
  44. 44.  printf("25 , = ");
  45. 45.  else if(s[i]==';')
  46. 46.  printf("26 , ; ");
  47. 47.  else if(s[i]=='(')
  48. 48.  printf("27 , ( ");
  49. 49.  else if(s[i]==')')
  50. 50.  printf("28 , ) ");
  51. 51.  else if(s[i]=='#')
  52. 52.  printf("0 , # ");

运行结果及分析

 

四、        实验总结

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

原文地址:https://www.cnblogs.com/BOXczx/p/5955869.html