码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-27 18:19:03      阅读:181      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!