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

http://gnuwin32.sourceforge.net/packages/bison.htm,如果这两个链接不好使了就自己搜吧。

这两个链接里面下载那两个Setup文件就好了。然后把他们安装了。

主要需要 lib文件夹下的 libfl.a 和 liby.a 这两个库。

.从 http://sourceforge.net/projects/winflexbison/ 下载已经编译好的压缩文件 win_flex_bison-2.5.1.zip(不到700kb)

.把2中的路径添加到环境变量

.编写两个文件,实现简单的计算器功能。

fb1-5.l代码:

  1. /* Companionsource code for "flex & bison", published by O'Reilly
  2. * Media, ISBN 978-0-596-15597-1
  3. * Copyright (c) 2009, Taughannock Networks.All rights reserved.
  4. * See the README file for license conditionsand contact info.
  5. * $Header: /home/johnl/flnb/code/RCS/fb1-5.l,v2.1 2009/11/08 02:53:18 johnl Exp $
  6. */
  7.  
  8. /* recognizetokens for the calculator and print them out */
  9.  
  10. %{
  11.  
  12. # include"fb1-5.tab.h"
  13.  
  14. %}
  15.  
  16. %%
  17.  
  18. "+" { return ADD; }
  19. "-" { return SUB; }
  20. "*" { return MUL; }
  21. "/" { return DIV; }
  22. "|" { return ABS; }
  23. "(" { return OP; }
  24. ")" { return CP; }
  25.  
  26. [0-9]+ { yylval = atoi(yytext); return NUMBER; }
  27.  
  28. \n { return EOL; }
  29. "//".*
  30. [ \t] { /* ignore white space */ }
  31. . { yyerror("Mystery character%c\n", *yytext); }
  32.  
  33. %%

  

fb1-5.y代码:

  1. /* Companionsource code for "flex & bison", published by O'Reilly
  2. * Media, ISBN 978-0-596-15597-1
  3. * Copyright (c) 2009, Taughannock Networks.All rights reserved.
  4. * See the README file for license conditionsand contact info.
  5. * $Header: /home/johnl/flnb/code/RCS/fb1-5.y,v2.1 2009/11/08 02:53:18 johnl Exp $
  6. */
  7.  
  8. /* simplestversion of calculator */
  9.  
  10. %{
  11.  
  12. # include <stdio.h>
  13.  
  14. %}
  15.  
  16. /* declare tokens*/
  17. %token NUMBER
  18. %token ADD SUB MUL DIV ABS
  19. %token OP CP
  20. %token EOL
  21.  
  22. %%
  23.  
  24. calclist: /*nothing */
  25. | calclist exp EOL { printf("= %d\n>", $2); }
  26. | calclist EOL { printf("> "); }/* blank line or a comment */
  27. ;
  28.  
  29. exp: factor
  30. | exp ADD exp { $$ = $1 + $3; }
  31. | exp SUB factor { $$ = $1 - $3; }
  32. | exp ABS factor { $$ = $1 | $3; }
  33. ;
  34.  
  35. factor: term
  36. | factor MUL term { $$ = $1 * $3; }
  37. | factor DIV term { $$ = $1 / $3; }
  38. ;
  39.  
  40. term: NUMBER
  41. | ABS term { $$ = $2 >= 0? $2 : - $2; }
  42. | OP exp CP { $$ = $2; }
  43. ;
  44.  
  45. %%
  46.  
  47. main()
  48. {
  49. printf("> ");
  50. yyparse();
  51. }
  52.  
  53. yyerror(char *s)
  54. {
  55. fprintf(stderr, "error: %s\n", s);
  56. }

.编译

cmd控制台运行以下命令

win_bison -d fb1-5.y

生成 fb1-5.tab.h 和fb1-5.tab.c 文件

win_flex --nounistdfb1-5.l win_flex --wincompat fb1-5.l

生成 lex.yy.c 文件。--nounistd 和 --wincompat 选项使生成的 lex.yy.c 不依赖<unistd.h> 可以用 VC 编译,否则就只能用 gcc 编译了。

.vs2008 新建一个vc++ 的空项目,把5中生成的fb1-5.tab.h、fb1-5.tab.c、lex.yy.c三个文件添加到项目。

编译报错:

原因是需要libfl.a这个库,需在项目中添加:

 7.效果演示:

Windows下 flex + bison 小例子的更多相关文章

  1. windows下Eclipse操作MapReduce例子报错:Failed to set permissions of path: \tmp\hadoop-Jerome\mapred\staging\

    windows下Eclipse操作MapReduce例子报错: 14/05/18 22:05:29 WARN util.NativeCodeLoader: Unable to load native- ...

  2. windows下测试flask的例子tuorial报错flask KeyError: 'DATABASE'

    windows下测试flask的例子tuorial报错flask KeyError: 'DATABASE' flask KeyError: 'DATABASE' 提示是 变量 database错误 由 ...

  3. flex自适应小例子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. c# BackGroundWorker 多线程操作的小例子

    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...

  5. 当有多于64合乎逻辑的cpu时刻,Windows 下一个Oracle db 实例启动(startup)什么时候会hang(待定)

    Bug 9772171 - Database startup hangs on Windows when machine has more than 64 cores [ID 9772171.8] 该 ...

  6. windows下怎么给ubantu虚拟机全屏的处理

    ubantu版本时16.04 windows下窗口太小需要设置 相信很多人在装虚拟机的时候,遇到了窗口过小不能自适应的问题.我也是查了好多资料,都说安装Vmware Tools即可解决,还有说修改分辨 ...

  7. 【EXP】WINDOWS下如何导出

    有些时候需要在windows下通过远程来导出数据 那么windows下怎么导出呢 例子: exp hr/hr@192.168.1.222:1521/zhang file=d:backup.dmp lo ...

  8. 编译器工具 Flex Bison for Windows 简单入门例子

    最近从事一个系统仿真软件的开发,里面定义了自己的描述性语言MSL, MSL语言经FlexBison转换成C语言,然后用C编译器来编译并计算仿真. 现在领域驱动开发比较热门,有机会定义自己的语言对程序员 ...

  9. Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)

    在windows下设置字节对齐大小的方式,目前我了解有三种: 1. 在编译程序时候的编译选项  /Zp[n],如 cl /Zp4 表示对齐大小是4字节: 2. 预处理命令   #pragma pack ...

随机推荐

  1. [WARNING] mod_event_socket.c:2641 IP 172.18.1.112 Rejected by acl "loopback.auto"

    一.目标修改event_socket配置,使之能够建立远端ESL链接. 二.步骤 . vim ../autoload_configs/event_socket.conf.xml . 默认的监听地址配置 ...

  2. STM32 usb_mem.c和usb_sil.c文件的分析

    转:http://blog.csdn.net/u011318735/article/details/17424515 这两个c文件都还算是很简单的,先讲讲usb_mem.c这个文件.从文件名就能知道跟 ...

  3. GM11灰色模型

    作者:桂. 时间:2017-08-12  08:34:06 链接:http://www.cnblogs.com/xingshansi/p/7348714.html 前言 灰色模型(Gray model ...

  4. Oracle学习笔记之八(几条简明的优化SQL方法)

    1. 常规SQL语句优化 1.1 建议不用“*”来代替所有列名 SELECT语句中可以用“*“来列出某个表的所有列名,但是这样的写法对Oracle系统来说会存在解析的动态问题.Oracle系统会通过查 ...

  5. asp.net MVC学习的一些总结

    起初认为视图,控制器,模型它们是完全没有耦合的,真正用了一段时间MVC发现错了. 但通过抽象让他们完全没有耦合,也不是不可能. 1.奇怪的连接地址 用MVC之前,一直认为页面必然访问某个文件.用了MV ...

  6. C# FUNC 应用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Func ...

  7. JNI-获取Java对象的成员变量-GeInttField()

    例: 在Java中定义一个属性,然后用C语言将其设置成另外的值,并输出出来. Java代码: Person.java package com.yuneec.demo; public class Per ...

  8. 随记MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)

    时间差函数(TIMESTAMPDIFF.DATEDIFF) 需要用MySQL计算时间差,使用TIMESTAMPDIFF.DATEDIFF,记录一下实验结果 select datediff(now(), ...

  9. flask celery 使用方法

    一.安装 由于celery4.0不支持window,如果在window上安装celery4.0将会出现下面的错误flask_clery 你现在只能安装pip install celery==3.1 二 ...

  10. SQL语句的一些基本使用以及一些技巧

    #SELECT 列名1, 列名2, from 表明 #SELECT id,title,content,type from news 效率相对较高#SELECT * from news *代表所有字段, ...