一、 实验内容

  1. 实现Bison与Flex的交互
  2. 编码实现Bison实验

二、 实验过程

Bison与Flex的交互

  1. 在docker环境中进入cale所在文件目录

img

  1. 根据指令运行代码,实现运算功能

img

*编码实现Bison实验*

编写实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
syntax.y

1. %{
2. #include"lex.yy.c"
3. ***\*int\**** result=1;
4. ***\*void\**** yyerror(***\*const\**** ***\*char\**** *s){result = 0;}
5. %}
6. %token LP RP LB RB LC RC
7. %%
8. String: %empty
9. | String RestOfString
10. ;
11. RestOfString: LP String RP
12. | LB String RB
13. | LC String RC
14. | String String
15. ;
16. %%
17.

**18.** ***\*int\**** validParentheses(***\*char\**** *expr){

19. yy_scan_string(expr);
20. yyparse();
21. ***\*return\**** result;
22. }

运行指令,实现成功

img

三、 遇到困难和解决办法

  1. 编写代码是return值一直受%empty 影响,如果想要通过String String{$$= $1 && $2}实现会返回错误结果。应该更改其他实现方法。