编译原理 实验2《递归下降分析法》

举报
用户已注销 发表于 2021/11/19 03:10:22 2021/11/19
【摘要】 一,实验内容 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E- TG (2)G- +TG|—TG (3)G- ε (4)T- FS (5)S- *FS|/FS (6)S- ε (7)F- (E) (8)F- i 输出的格式如下: (1)递归下降分析程序,编制人:姓名,学号,班级 (2)输入一以...

一,实验内容

对下列文法,用递归下降分析法对任意输入的符号串进行分析:

(1)E- TG

(2)G- +TG|—TG

(3)G- ε

(4)T- FS

(5)S- *FS|/FS

(6)S- ε

(7)F- (E)

(8)F- i

输出的格式如下:

(1)递归下降分析程序,编制人:姓名,学号,班级

(2)输入一以#结束的符号串(包括+—*/()i#):在此位置输入符号串例如:i+i*i#

(3)输出结果:i+i*i#为合法符号串

备注:输入一符号串如i+i*#,要求输出为“非法的符号串”。

注意:

  1. 表达式中允许使用运算符(+-*/)、分割符(括号)、字符I,结束符#;
  2. 如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好)。

 

二,实验方法和步骤

1,消除左递归

给出的文法没有左递归,不需要再变

2,提取公共左因子

给出的文法没有公共左因子,这一步也略掉了

3,代码


  
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. char line[100];
  5. int i = 0;
  6. bool E(); //声明5个函数
  7. bool T();
  8. bool G();
  9. bool F();
  10. bool S();
  11. 定义5个函数
  12. bool E()
  13. {
  14. if (T() && G())return true;
  15. else return false;
  16. }
  17. bool T()
  18. {
  19. if (F() && S())return true;
  20. else return false;
  21. }
  22. bool G()
  23. {
  24. if (line[i] == '+' || line[i] == '-')
  25. {
  26. i++;
  27. if (T() && G())return true;
  28. else return false;
  29. }
  30. else return true;
  31. }
  32. bool S()
  33. {
  34. if (line[i] == '*' || line[i] == '/')
  35. {
  36. i++;
  37. if (F() && S())return true;
  38. else return false;
  39. }
  40. else return true;
  41. }
  42. bool F()
  43. {
  44. if (line[i] == 'i')
  45. {
  46. i++;
  47. return true;
  48. }
  49. if (line[i] == '(')
  50. {
  51. i++;
  52. if (E() && line[i] == ')')
  53. {
  54. i++;
  55. return true;
  56. }
  57. }
  58. return false;
  59. }
  60. int main()
  61. {
  62. cin.getline(line, 20);
  63. if (E() && line[i] == '#')cout << "yes";
  64. else cout << "no";
  65. system("pause>nul");
  66. return 0;
  67. }

 

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/104126191

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。