首页 > 其他 > 详细

读龙书学编译原理 语法分析(15)...

时间:2016-05-27 18:18:26      阅读:281      评论:0      收藏:0      [点我收藏+]

到这里词法分析模块就接近尾声了, 下面对词法分析模块进行总结 :

技术分享

递归下降本质上也算是自顶向下的分析算法, 适合手工编码, 它相对来说更加灵活, 能够对于特定的DSL进行更加灵活的处理优化, 但是相对来说比较慢.而自动生成器则恰好相反, 接下来是一个LR(1)语法生成器的实例 -- YACC.

首先这是yacc所需的源文件的结构, 通过输入这个文件yacc能为我们生成实际的语法分析器的代码...

技术分享

 

由图中可以看出该文件分为三个部分, 下面是实例代码 :

 1 %{
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4     int yylex();
 5     void yyerror(char* err);
 6 %}
 7 
 8 %left +
 9 
10 %%
11 
12 lines: line
13      | line lines ;
14 
15 line: exp \n;
16 exp: n
17    | exp + exp ;
18 
19 n: 1
20  | 2
21  | 3
22  | 4
23  | 5
24  | 6
25  | 7
26  | 8
27  | 9
28  | 0 ;
29 
30 %%
31 
32 int yylex(){
33     return getchar();
34 }
35 
36 void yyerror(char* err){
37     printf("%s\n", err);
38 }
39 
40 int main (int argc, char* argv[]){
41     yyparse();
42     return 0;
43 }

这是输出结构 :

[风@ ~] $ bison test.y
[风@ ~] $ gcc test.tab.c
[风@ ~] $ ./a.out
2+3+4
3+4
2
+
syntax error
[风@ ~] $ 

 

大概就是这样...

读龙书学编译原理 语法分析(15)...

原文:http://www.cnblogs.com/nzhl/p/5535474.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!