一、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)

  1. 新建文件夹 → VSCode 打开
  2. 新建 .vscode/tasks.json
  3. 写入(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 脚本吗?