zoukankan      html  css  js  c++  java
  • 语法分析(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 '
    ';
    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
    ", 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
    [风@ ~] $ 

    大概就是这样...

  • 相关阅读:
    github 代理加速
    centos系统语言设置为中文
    红帽 / CentOS安装Jenkins
    查看api有没有更新到位
    永久关闭Windows10或Windows11的系统自动更新
    api传文件连接超时
    docker日常使用
    开发者工具批量替换
    Linux常用工具安装
    office密钥
  • 原文地址:https://www.cnblogs.com/nzhl/p/5535474.html
Copyright © 2011-2022 走看看