读龙书学编译原理 语法分析(15)...
Posted 内脏坏了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读龙书学编译原理 语法分析(15)...相关的知识,希望对你有一定的参考价值。
到这里词法分析模块就接近尾声了, 下面对词法分析模块进行总结 :
递归下降本质上也算是自顶向下的分析算法, 适合手工编码, 它相对来说更加灵活, 能够对于特定的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)...的主要内容,如果未能解决你的问题,请参考以下文章