Flex+Bison环境搭建
前言
其实只是为了参加比赛,编译原理什么的其实一点都没学,但是还是要硬着头皮上,没办法。不过既然要学了,好歹要记录一些东西下来,让大家看一看,不然万一最后没拿奖,啥也没有,岂不是很亏。
为什么用VS Code?
不是我想用VS Code,而是VS对于我来说实在是太大了。而且实际上用多了之后其实会发现万物基于命令行,所以最后我还是选择了VS Code,这个确实轻量的编辑器。不过很遗憾,网上并没有找到对应的教程之类的,这个是根据Code Blocks上使用Flex+Bison的教程改编的,可能还有不对的地方,还希望大家能够指出来。
准备工作
这边我的环境是Windows,对应的Linux系统的Flex和Bison环境很容易配置,这个建议直接百度。
首先我们给出下载网址: 点击下载.
下载好之后我们可以得到win_flex_bison-latest文件夹,这时候我们把这个文件夹加入到环境变量或者放到我们要用到的目录下面都可以。
当然这里我是放到了自己的目录下面(此处关系到后续 VS Code 配置问题,所以请务必注意)。
VS Code文件配置
首先我把我的配置Po出来给大家看一下
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
//Flex编译命令
{
"label": "flex Complier",
"command": "win_flex_bison-latest\\win_flex.exe",
"args": [
"-o",
"${fileBasenameNoExtension}.flex.cpp",
"--wincompat",
"${file}"
], // 编译命令参数
"problemMatcher": {
"owner": "l",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
//Bison编译命令
{
"label": "bison Complier",
"command": "win_flex_bison-latest\\win_bison.exe",
"args": [
"--output=${fileBasenameNoExtension}.tab.cpp",
"--defines=${fileBasenameNoExtension}.tab.h",
"${file}"
],
"problemMatcher": {
"owner": "y",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
可以看到"command": "win_flex_bison-latest\\win_bison.exe",
在上面这个里面两个command对应的目录问题,如果在【准备工作】里面选择的是配置环境变量的话,很显然就是直接一个win_bison.exe
和win_flex.exe
就解决了,但是我这边没有配置环境变量。当前我的目录安排如下:
所以不难理解为啥我这里写的是"command": "win_flex_bison-latest\\win_bison.exe",
了吧。
编译运行
VS Code中按Ctrl + Shift + P呼出任务菜单,输入Run Task,选择Flex Complier或者Bison Complier(对应文件选择对应任务),即可生成对应Cpp,这时候编译或者h头文件,这时候大家应该都知道咋个办了吧!