zoukankan      html  css  js  c++  java
  • SQLite Lemon 语法分析器学习与使用

    本文是浙江大学出版社的《LEMON语法分析生成器(LALR 1类型)源代码情景分析》学习笔记。

    用到的Windows下的编译器介绍MinGW(http://www.mingw.org/):
    一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。

    Lemon是SQLite作者开发的用于SQLite数据库语法分析的分析器,线程安全可重入,源码可以从SQLite官网完整的代码包获取。

    编译出来Windows下的可执行程序lemon.exe:

    按部就班,码代出语法代码2_1.y:

    %include {
    #include<stdio.h>
    #include<stdlib.h>
    #include<assert.h>
    #include "2_1.h"
    }
    
    %token_type { int }
    %left PLUS MINUS.
    %left DIVIDE TIMES.
    
    %syntax_error {
      printf("Syntax error!
    ");
      exit(1);
    }
    
    program ::= expr(A). { printf("Result = %d
    ",A);}
    
    expr(A) ::= expr(B) MINUS  expr(C). {A = B - C;}
    expr(A) ::= expr(B) PLUS   expr(C). {A = B + C;}
    expr(A) ::= expr(B) TIMES  expr(C). {A = B * C;}
    expr(A) ::= expr(B) DIVIDE expr(C). {
      if(C != 0) {
        A = B / C;
      } else {
        printf("Divide by zero!
    ");
      }
    }
    
    expr(A) ::= INTEGER(B). { A = B;}
    
    %code {
        int main() {
          void* pParser = ParseAlloc(malloc);
          Parse(pParser, INTEGER, 1);
          Parse(pParser, PLUS   , 0);
          Parse(pParser, INTEGER, 2);
          Parse(pParser, 0, 0);
          ParseFree(pParser, free);
        }
    }

    用语法分析器生成C代码2_1.c, 2_1.h, 2_1.out:

    把C代码编译成可执行程序并执行:

    OK!史上最简陋的计算器诞生了!

    备注:aHR0cCUzQS8vd3d3LmNuYmxvZ3MuY29tL3poaGQv

  • 相关阅读:
    计算机网络第五版答案 谢希仁
    AJAX代码示例(不使用AJAX控件)
    软件工程期末资料
    各类编程语言视频教程(300G)
    AJAX无刷新分页练习
    C#使用IrisSkin2.dll美化WinForm程序界面
    asp.net判断浏览器版本代码
    C#中国身份证验证
    在IIS中使用SSL配置HTTPS网站(转)
    silverLight导出报表
  • 原文地址:https://www.cnblogs.com/zhhd/p/5414447.html
Copyright © 2011-2022 走看看