Flex & Bison
一、macOS + VSCode 配置 Flex/Bison 完整步骤(你已用 brew 安装)
1. 确认版本与环境变量(关键:mac 自带旧版,必须用 brew 新版)
打开终端:
# 查看 flex/bison 路径(必须是 /usr/local/opt 或 /opt/homebrew/opt)
which flex bison
# 查看版本(flex ≥2.6,bison ≥3.8)
flex --version
bison --version
- Intel Mac:brew 路径 →
/usr/local/opt/flex/bin、/usr/local/opt/bison/bin - Apple Silicon (M1/M4):brew 路径 →
/opt/homebrew/opt/flex/bin、/opt/homebrew/opt/bison/bin
配置环境变量(覆盖系统旧版):
# Intel Mac
echo 'export PATH="/usr/local/opt/flex/bin:/usr/local/opt/bison/bin:$PATH"' >> ~/.zshrc
# M1/M4 Mac
echo 'export PATH="/opt/homebrew/opt/flex/bin:/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.zshrc
# 生效
source ~/.zshrc
2. VSCode 插件安装
- C/C++(Microsoft):C 语法高亮、编译支持
- Lex/Flex Highlighter:.l 文件语法高亮
- Code Runner(可选):一键运行
3. 配置编译任务(tasks.json)
- 新建文件夹 → VSCode 打开
- 新建
.vscode/tasks.json - 写入(mac 通用):
{
"version": "2.0.0",
"tasks": [
{
"label": "flex",
"type": "shell",
"command": "flex ${file}",
"args": [],
"group": "build",
"problemMatcher": {
"owner": "flex",
"fileLocation": "absolute",
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "gcc compile",
"type": "shell",
"command": "gcc lex.yy.c -o ${fileBasenameNoExtension} -ll",
"args": [],
"group": "build",
"dependsOn": ["flex"]
},
{
"label": "run",
"type": "shell",
"command": "./${fileBasenameNoExtension}",
"group": "test",
"dependsOn": ["gcc compile"]
}
]
}
二、你的 Flex 代码分析(输入 28 输出?)
1. 代码逻辑
%{
#include <stdio.h>
int k;
%}
%%
[0-9]+ {
k = atoi(yytext); // 字符串转整数
if (k%7 == 0) // 能被7整除 → 输出k+3
printf("%d", k+3);
else
printf("%d",k); // 否则输出原数
}
%%
int main(){
yylex(); // 启动词法分析
return 0;
}
int yywrap(){ return 1; }
2. 输入 28 的结果
28 % 7 = 0→ 满足条件- 输出:28 + 3 = 31
三、mac 下运行验证
1. 新建文件 test.l,粘贴你的代码
2. 终端执行(或用 VSCode 任务)
flex test.l # 生成 lex.yy.c
gcc lex.yy.c -o test -ll # 编译(mac 必须加 -ll)
./test # 运行
# 输入:28
# 回车 → 输出:31
# 按 Ctrl+D 结束
3. 执行输出截图(文字模拟)
$ ./test
28
31
四、完整运行命令(一键复制)
flex test.l && gcc lex.yy.c -o test -ll && ./test
输入 28 → 回车 → 输出 31。
需要我帮你把这段 Flex 代码和编译命令整理成一个可直接运行的 mac 脚本吗?
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 木素音的小站!