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
运行通过
VS2017中使用flex+bison相关推荐
- 使用Flex Bison 和LLVM编写自己的编译器[zz]
1.介绍 我总是对编译器和语言非常感兴趣,但是兴趣并不会让你走的更远.大量的编译器的设计概念可以搞的任何一个程序员迷失在这些概念之中.不用说,我也曾 今尝试过,但是并没有取得太大的成功,我以前的尝试都 ...
- 基于flex/bison工具生成sysY2022文法的词法/语法分析器
基于flex/bison工具生成sysY2022文法的词法/语法分析器 本文内容学习借鉴了往届参赛的优秀校友学长学姐的开源作品代码,仅用于学习目的,现分享给大家,如有侵权请联系我删除.我使用的开发环境 ...
- flex bison 基础概述
1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺. 2. 本文目标 . 简单介绍 flex 和 bison 的基础使用方法 . 简要分析 flex, bison ...
- Flex Bison 开始
Flex 与 Bison 是为编译器和解释器的编程人员特别设计的工具: Flex 用于词法分析(lexical analysis,或称 scanning),把输入分割成一个个有意义的词块,称为记号(t ...
- VS2017中C++无法将参数1从const char [8] 转换为char[]
VS2017中开发遇到的问题: 看到网上有两种解决办法: 1.结构体中定义的 char * 前面加上 "const": 原因应该是函数的实参与形参类型不匹配, 字符串在内存中是一个 ...
- 基于BootStrap 4.x 中的Flex 实现各种布局
各种布局,总有一款适合你 基于bootstrap 4.x 中的flex 布局 1.左右结构(左窄右宽) <div class="d-flex flex-row" style= ...
- 使用VS2017编译sqlite和在VS2017中配置使用sqlite的简单例子演示
转自:http://blog.csdn.net/hyxiaohaiyang/article/details/7382551 知识补充: sqlite3.dll动态链接库,它允许程序共享执行特殊任务所必 ...
- ArcGIS Flex API 中的 Flex 技术(一)--事件
作者:Flyingis 本文严禁用于商业目的,如需转载请注明作者及原文链接,其他疑问请联系:dev.vip#gmail.com 在ArcGIS Flex API中探索Flex使用是一种不错的学习方法, ...
- flex producer java_在 Logic Pro 中选取 Flex 与跟随设置
在 Logic Pro 中选取 Flex 与跟随设置 在启用了 Flex 的音轨上,"Flex 与跟随"弹出式菜单会替换片段检查器中音频片段的"Flex"复选框 ...
最新文章
- Asp.net基础概念之 HttpModule
- 使用diskpart命令进行扩充硬盘空间操作说明
- tuxedo相关概念
- Bellman_Ford算法
- 七十九、深度和广度优先搜索算法
- 音频开发中常见的四个错误
- [Linux]信号量
- mysql dns反向解析_DNS练习之反向解析(示例代码)
- Hadoop 的核心(2)—— MapReduce YARN
- 支持百万级TPS,Kafka是怎么做到的?
- 42. Understand the two meanings of typename.
- 手机科学计算机功能,一个小秘密:手机自带APP - 计算器 的科学计算模式
- 关于段地址和偏移地址的理解
- 微信文件夹的dat文件怎么打开_微信文件夹里的照片文件是DAT格式怎么才能打开?...
- NodeJS开发简易图书管理系统
- 宠物小精灵之收服 01背包 POJ4102
- 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
- 【KG】构建《红楼梦》知识图谱
- python处理字体(动态字体库)
- VDA19颗粒清洁度测试方法及要素