最近从事一个系统仿真软件的开发,里面定义了自己的描述性语言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")"\n" { return HI; }
("tchau"|"bye")"\n" { return BYE; }
. { yyerror(); }
%%

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

int yywrap(void)
{
return 0;
}

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

hello.y

%token HI BYE
%%

program:
hi bye
;

hi:
HI { printf("Hello World\n"); }
;
bye:
BYE { printf("Bye World\n"); 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:\FlexBison\hello>hello.exe
hi
Hello World
bye
Bye World

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

编译器工具 Flex Bison for Windows 简单入门例子的更多相关文章

  1. Windows简单入门-送给第一次使用电脑的朋友

    序言 写本篇文章前.不得不说我已经好久没有写博客了,快接近3个月了 吧,本来去年说參加今年的博客之星的,结果这都立即结束了:不得不说对自己有些嘲讽. 本篇文章是纯小白文章.之所以写这个是由于前段时间妹 ...

  2. poi整合springboot超简单入门例子

    1.导入依赖 2.application.properties只需要数据库连接信息就可以 3.目录结构 有个没用的service,请忽略 4.Controller,因为入门列子,所以简单的导出 导入读 ...

  3. 基于vue-cli、elementUI的Vue简单入门例子

    vue-cli.elementUI的安装教程请看: https://www.cnblogs.com/joe235/p/12013818.html 把HelloWorld.vue文件修改为: <t ...

  4. [flex & bison]编译器杂谈

    flex与bison是编译器设计工具.这里的编译器为广义,其中包括一般的编译器.脚本解析器等,需要进行语言结构解析来得出意义的程序. 当我们需要用一个语言来设计一款编译器时,需要考虑太多设计重心外的东 ...

  5. [转]VS2015 Git 源码管理工具简单入门

    VS2015 Git 源码管理工具简单入门   1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本 ...

  6. Windows下 flex + bison 小例子

    .下载flex和bison,网址是http://gnuwin32.sourceforge.net/packages/flex.htm 和http://gnuwin32.sourceforge.net/ ...

  7. [推荐] 网络侦查工具 NMAP 简单入门

    [推荐] 网络侦查工具 NMAP 简单入门 # 前言 作为一只运维开发,总是避不开要和网络打交道的.尤其是当自身能力到达瓶颈,开始从事云计算以求突破.会有搭建多台虚拟机的需要,这时候如果在手工的查询 ...

  8. OpenCASCADE Expression Interpreter by Flex & Bison

    OpenCASCADE Expression Interpreter by Flex & Bison eryar@163.com Abstract. OpenCASCADE provide d ...

  9. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

随机推荐

  1. Network服务器

    1.授权服务器与非授权服务器:大多数网游都是授权服务器,用户无法修改数据.

  2. excel 导入 sqlserver 字符串被截取为255长度解决方案

    excel表格导入sqlserver数据表中 内容被截取为255长度的字符串. 注意:excel是通过前8行(表头的首行除外)的数据类型来判断导入数据的数据格式的,例如前8行出现整数型,那么默认就用整 ...

  3. 邮件中继成畅邮标配 U-Mail为何领先

    中国力推“一带一路”战略,为首成立“亚投行”,越来越多的中国企业酝酿走出去.在企业间的商务往来中,电子邮件将扮演着重要角色,但是因为要跨洋 过海,各国互联网环境和法律法规有所区别,面临着种种变数,对方 ...

  4. 图解直方图均衡化及其Python实现

    在理解直方图均衡化的过程中,参考了一些书籍和博客,让人困惑的是,笔者对于直方图的理解还是停留在表面,并没有深入理解其内涵.因此,本文拟结合图片对直方图的概念进行阐述,并给出其Python实现,最后对她 ...

  5. 我的VPN推荐经历

    先说说我为什么会走上VPN推荐之路的. 忘记了什么原因需要上某一国外的网站,但是这个网站在国内被禁止访问,于是我想到了VPN,我在网上搜索VPN,找到了几个VPN推荐的博客,然后我根据博客的推荐到了某 ...

  6. 在Android中使用Java 8的lambda表达式

    作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...

  7. jQuery学习笔记(一)

    1.什么是jQuery? jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多"的JavaScript库. 2.为什么要使用jQuery? 目 ...

  8. TimeQuest学习

    1.物理时钟特性:clock skew(时钟差),jitter(拉动),clock latency(时钟潜伏),这些物理时钟特性又称为uncertainl--非定性,或非理想性. clock skew ...

  9. VS2015 +EF6 连接MYSQL数据库生成实体

      VS2015 +EF6 连接MYSQL数据库生成实体   已安装软件:VS2015                       XAMPP Control Panel(Mysql服务器)      ...

  10. JavaWeb 学习005-4个页面,5条sql语句(添加、查看、修改、删除)

    今天完成了的事: = 1.班级模块,list页面的添加班级信息操作,中文乱码问题 尚待解决 这俩天做得工作是: 首先搭建好main页面:是由top.left.right三个部分构成的,拼接到一起. 流 ...