zoukankan      html  css  js  c++  java
  • 编译器工具 Flex Bison for Windows 简单入门例子

    最近从事一个系统仿真软件的开发,里面定义了自己的描述性语言MSL, MSL语言经FlexBison转换成C语言,然后用C编译器来编译并计算仿真。

    现在领域驱动开发比较热门,有机会定义自己的语言对程序员来说是比较有成就感的,免不了要去学习编译原理和flex, bison, antlr等工具的使用,

    在控制仿真语言,数控编程,还有股票程序化交易系统,游戏脚本中都可以看到领域驱动开发的影子。

    借此机会,重新阅读了编译原理的教程,并学习一下自动控制原理(用于控制仿真),以前一直觉得大学里学的东西没有用,但是后来证明都用上了,

    比如说微积分,线性代数,数值分析,甚至大学物理,还有那个以前不知所云数学物理方法,我努力回忆这些老师的面容,但已渐渐模糊。

    有关Flex和Bison的资料可以在http://ishare.iask.sina.com.cn里面找到很多,也可以从其他博客找到例子,

    这里我从 http://sourceforge.net/projects/winflexbison/ 下载了 win_flex , win_bison 版本。

    然后解压到某个目录下,注意里面有个data目录也要一起解压。

    网上找了个博客参考一下:http://blog.csdn.net/pikaxuji/article/details/7678135

    hello.l

    %{
    #include <stdlib.h>
    #include "y.tab.h"
    %}
    %%
    ("hi"|"oi")" " { return HI; }
    ("tchau"|"bye")" " { return BYE; }
    . { yyerror(); }
    %%

    int main(void)
    {
    yyparse();
    return 0;
    }

    int yywrap(void)
    {
    return 0;
    }

    int yyerror(void)
    {
    printf("Error ");
    exit(1);
    }

    hello.y

    %token HI BYE
    %%

    program:
    hi bye
    ;

    hi:
    HI { printf("Hello World "); }
    ;
    bye:
    BYE { printf("Bye World "); exit(0); }
    ;

    经过尝试,我使用了以下命令生成代码:

    win_flex --nounistd hello.l
    win_bison -d -o y.tab.c hello.y

    执行后会生成lex.yy.c 和 y.tab.h y.tab.c

    用 visual studio 2008 创建一个新的Visual c++ empty project, 比如叫hello.vcproj, 然后把上面三个文件添加进去,直接编译成功。

    运行时候在控制台运行, 

    d:FlexBisonhello>hello.exe
    hi
    Hello World
    bye
    Bye World

    很简单吧。flex bison 工具后面有很多选项,满足不同需要,可以自己测试。

  • 相关阅读:
    vue 定义全局函数和变量
    大学感受
    NOIP2018 游记
    NOI2018 游记
    THUSC 2018 游记
    APIO2018 游记
    SXOI2018游记
    poorpool 的 考场 NOI Linux 配置
    关于 poorpool
    NOIP2017 游记
  • 原文地址:https://www.cnblogs.com/kuaishou/p/FlexBison.html
Copyright © 2011-2022 走看看