• 词法分析器报告


    实验一、词法分析实验

    专业 商业软件工程   姓名 陈子翔 学号 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 , # ");

    运行结果及分析

     

    四、        实验总结

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

  • 相关阅读:
    Serverless 工程实践 | Serverless 应用开发观念的转变
    如何高效学习 Kubernetes 知识图谱?
    互动赠新书|当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
    5 款阿里常用代码检测工具,免费用!
    AI与传统编译器
    OpenArkCompiler方舟编译
    传统编译原理
    LLVM基础技术图例
    双极型与低频大功率晶体管
    TVM,Relay,Pass
  • 原文地址:https://www.cnblogs.com/BOXczx/p/5955869.html
Copyright © 2020-2023  润新知