VS2017中使用flex+bison

本文參考了https://blog.csdn.net/tankloverainbow/article/details/86653044

1.下載地址
https://jaist.dl.sourceforge.net/project/winflexbison/win_flex_bison-latest.zip
然後解壓
2.在vs中新建一個控制檯項目
3.向工程中添加win-flex_bison軟件中的targets文件,具體步驟爲
a. 右鍵單擊工程 -> 在彈出的菜單中選擇“生成依賴項” -> “生成自定義”
b. 在彈出的窗口下側選擇“查找現有的(F)...”,
然後進入剛纔已經下好的win flex-bison文件夾下,
並依次進入\win_flex_bison-latest\custom_build_rules\文件夾中,
選擇“win_flex_bison_custom_build.targets”文件。
c. 在當前對話框中出現了“in_flex_bison_custom_build.targets”文件選項,
選中該文件並點“確定”
4: 向工程中添加win_bison.exe和win_flex.exe文件所在的路徑
具體步驟爲:
(a)右鍵單擊工程-> 在彈出的菜單中選擇“屬性” -> VC++目錄->可執行文件目錄
(b)左鍵單擊“可執行文件目錄”後面的白色區域,會出現下拉菜單的提示符,
選擇該提示符後出現下拉菜單,選中“<編輯...>”後便會出現步驟3的對話框
(c)左鍵雙擊白色區域就能添加win_bison.exe和win_flex.exe文件所在的路徑了,
這兩個文件保存在win_flex_bison-latest軟件的第一級目錄下。

5.編譯和運行lex文件
向工程中添加demo.l文件(貌似文件擴展名必須爲.l)
內容如下:

%%
.|\n       ECHO;
%%
int yywrap(void)
{  
  return 1;    //如果返回0則表示要處理下一個輸入流,返回1表示結束.
} 
int main(int argc, char** argv)
{
	freopen("1.txt","r",stdin);
    yylex();
    return 0;
}

按ctrl+alt+f7 重新完整編譯,
此時項目目錄下會自動多一個demo.flex.cpp文件,
把它也添加到項目中.

6.
項目右鍵->屬性->C/C++->預處理器->
預定義宏,添加
;_CRT_SECURE_NO_WARNINGS  (分號和前面的項分開).
然後項目右鍵->屬性->連接器->系統->子系統->控制檯.
然後再按ctrl+alt+f7重新編譯
7.在項目目錄下準備一個1.txt文件
內容隨意,然後ctrl+f5編譯和運行,
會發現屏幕輸出1.txt的內容
.說明配置和運行成功.
 

7.如果想實驗flex+bison配合使用,可以試試下面的例子.
目的是求出每行兩個數字的和.
則可以編寫如下兩個文件,
demo.l內容爲:
 

%{
#include<stdlib.h>	
#include "demo.tab.h"
%}

%%
[1-9][0-9]* {
	yylval.ival=atoi(yytext);
	return NUM;
}

"+" {return '+';}
.|\n ;


%%
int yyerror(const char * format,...){
	printf("some error\n");
	return 1;
}

int yywrap(void)
{  
  return 1;  
} 

demo.y的內容爲

%{
#include<stdio.h>
extern int yylex();
extern int yyerror(const char * format,...);


%}

%union{
	int ival;
}

%token<ival> NUM

%%
terms: term
	|terms term
	;

term: NUM  NUM{
	printf("%d+%d=%d\n",$1,$2,$1+$2);
};

%%
int main(int argc, char* argv[])
{
	freopen("1.txt","r",stdin);
    yyparse();
    return 0;
}

重新編譯之後,項目目錄下會多出3個文件
demo.flex.cpp  
demo.tab.cpp
demo.tab.h

加入到項目中,
然後重新編譯和運行.
把1.txt的內容修改爲
10  12
20  22

會發現輸出
10+12=22
20+22=42

運行通過

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章