首页源码bison(windows下bison的安装与入门)

bison(windows下bison的安装与入门)

编程之家2024-01-30168次浏览

一、如何在Windows下面使用bison

1、到Google搜索“bison

bison(windows下bison的安装与入门)

windows”,应该可以看到这个网站:

它是专门将GNU的工具移植到windows下的工程。

2、下载下面的内容:

执行程序:

需要的链接库:

bison(windows下bison的安装与入门)

3、我是这么安装的:

我在D盘下有一个d:\local的目录,它的目录结构如下

local

├─bin(存放可执行程序,这个目录在环境变量PATH上)

├─games

(哈哈)

bison(windows下bison的安装与入门)

├─include(我Dev-CPP的一些附加头文件目录)

├─lib(同上)

├─share

(存放GNU工具的共享文档)

└─tmp(临时文件)

安装的时候,将[bison-bin.zip\bin\]下的bison.exe和m4.exe文件存放到bin目录下

将[bison-bin.zip\share\]内容全部拷贝到share下面。

将[bison-dep.zip\bin\]下的两个动态链接库拷贝到bin目录下。我开始就是忘了这两个东西,然后命令行下执行程序的时候,也不见报错,就是没有任何的反应。还以为自己的问题出在那里

二、bison是什么意思

bison的意思:野牛

双语例句:

1、Thusonesimplefact,achangeinthenumberofbison.这样一个简单的事实,野牛数量的变化。

2、Bisonwastenolongerfellonthegroundtoimprovethesoil.野牛制造的废物也不再渗进泥土改善土壤了。

3、onewrongstepandthebisoncouldkillJeff.只要出一点错野牛就会杀死杰夫。

4、Thebisonwillnotstaylongamongthetrees.野牛不会在林中栖息过。

5、Thebisonformadefensivecirclearoundtheiryoung.野牛们以幼崽为中心组成防御性外围。

6、TheefficientminortemplateenginebasedonFLEXandBISONisdesigned.提出了一种基于FLEX和BISON的高效模板引擎的设计方法。

三、如何兼容bison2.3和bison3.0.4版本

假设有一个工程,采用autoconf来进行编译。对于不同版本的bison,弄清楚其差异化点,对于bison2.3和bison3.0.4来说明,主要在于代码段引用的方式不一样,bison2.3版本的句法文件MySampleParser.yy如下:

%{

#include<stdio.h>

#include<string>

#include<limits.h>

#include<ot/ common.h>

BEGIN_OT_NAMESPACE(DSP);

MySampleScanner类

END_OT_NAMESPACE(DSP);

...

%}

在的Makefile.am里面,需要添加:

AM_YFLAGS=-d

AM_LFLAGS=-olex.yy.c

noinst_LTLIBRARIES= libmysample_scanner.la

libmysample_scanner_la_SOURCES= MySampleParser.yy MySampleScanner.ll

CLEANFILES= MySampleParser.hh\

MySampleParser.cc\

stack.hh\

position.hh\

location.hh

值得注意的是,在MySampleParser.yy文件中,BEGIN_OT_NAMESPACE不会被C++编译器编译执行,所以使用automake解析的时候会出现找不到命名空间ot的情况,这个时候需要在MySampleScanner.ll文件的代码段中添加命名空间,如:

%{

命名空间

{

}

#include<string>

...

%}

当然MySampleScanner.h头文件一般不是自动生成,需要构造类MySampleScanner,且继承yyFlexLexer,但由于符号冲突的问题,需要在定义类MySampleScanner之前,对yyFlexLexer重新定义,像这样:

#ifndef __FLEX_LEXER_H

#define yyFlexLexer QueryFlexLexer

#include<FlexLexer.h>

#undef yyFlexLexer

#万一

但对于bison3.0.4版本来说,代码段的表达方式发生了变化,需要采用如下

%代码需要{

#include<stdio.h>

#include<string>

#include<limits.h>

#include<ot/ common.h>

BEGIN_OT_NAMESPACE(DSP);

MySampleScanner类

END_OT_NAMESPACE(DSP);

...

}

了解到区别之后,如果需要兼容,应该怎么办呢首先要获取到?野牛版本才能做下一步策略:

在的configure.ac里面(如果有M4的宏文件,也可以放置在M4文件中)添加:

dnl-------------------------------------------------------------------------

dnl检查野牛版本

dnl-------------------------------------------------------------------------

BISON_VERSION=$(bison--version| head-1| awk'{print$ 4}')

AC_SUBST(BISON_VERSION)

AC_SUBST(BISON_VERSION_3_FLAG)

AC_SUBST(BISON_VERSION_2_FLAG)

AC_MSG_CHECKING([野牛版])

AS_IF([test“$(echo”$ BISON_VERSION 3.0.4“| tr”“”\ n“| sort-rn| head-n 1)”==“$ BISON_VERSION”],

BISON_VERSION_3_FLAG=“define HAVE_BISON_VERSION_3”

BISON_VERSION_2_FLAG=“undef HAVE_BISON_VERSION_2”

],[

BISON_VERSION_3_FLAG=“undef HAVE_BISON_VERSION_3”

BISON_VERSION_2_FLAG=“define HAVE_BISON_VERSION_2”

])

AM_CONDITIONAL(ENABLE_BISON_VERSION_3,测试“$(echo”$ BISON_VERSION 3.0.4“| tr”“”\ n“| sort-rn| head-n 1)”==“$ BISON_VERSION”)

AC_MSG_RESULT([$ BISON_VERSION])

这里面定义了四个重要的变量:

BISON_VERSION是用来记录野牛的版本号;

BISON_VERSION_3_FLAG和 BISON_VERSION_2_FLAG是方便在 C/ C++的一些头文件中定义是版本 3还是版本 2,好做对应的处理;

ENABLE_BISON_VERSION_3的英文用来在的Makefile.am里面用于条件判定

那么的Makefile.am里面的条件判断可以写成如下所示:

AUTOMAKE_OPTIONS= foreign

dist_headers=$(通配符*.h*.hh)

AM_CPPFLAGS=-I$(top_srcdir)/ src\

$(NULL)

AM_LDFLAGS=$(NULL)

AM_YFLAGS=-d

AM_LFLAGS=-olex.yy.c

如果ENABLE_BISON_VERSION_3

noinst_LTLIBRARIES= libmysample_scanner.la libmysample.la

libmysample_scanner_la_SOURCES= MySampleParser.yy MySampleScanner.ll

libmysample_scanner_la_DEPENDENCIES= MySampleParser.yy

MySampleParser.yy:

sed的#%{#%代码需要{#'MySampleParser.yy.in> MySampleParser.yy

其他

noinst_LTLIBRARIES= libmysample.la

cc_files= MySampleParser.cc MySampleScanner.cc

万一

libmysample_la_SOURCES= XX.cpp$(cc_files)$(dist_headers)

如果ENABLE_BISON_VERSION_3

libmysample_la_LIBADD= libmysample_scanner.la

其他

libmysample_la_DEPENDENCIES= MySampleParser.hh

MySampleParser.hh:MySampleParser.yy libmysample_scanner.la

bison-o MySampleParser.cc MySampleParser.yy

万一

CLEANFILES= MySampleParser.hh\

MySampleParser.cc\

stack.hh\

position.hh\

location.hh

其中MySampleParser.yy.in写成状语从句:bison2.3版本的MySampleParser.yy一样即可。

通过此次调整,完美的解决了bison2.3和bison3.0.4在autoconf的编译的冲突问题,类似的冲突也可以采用此方式解决。

ev ssl(EV SSL证书是什么意思?)aws永久免费服务器(亚马逊aws永久免费服务器)