Linux 命令速查
开发工具 man bison

bison

GNU 语法分析器生成器(yacc 兼容)

返回

补充说明

bison 读取 BNF 风格的文法文件(.y),生成 C/C++ 语法分析器。它实现 LALR(1)(也可用 GLR),常与 flex 生成的词法分析器配合,是编译器和配置语言解析器的标准工具。

文法文件分为声明、规则、用户代码三段。出现 shift/reduce 或 reduce/reduce 冲突时,应先用 -v 生成 .output 文件查看状态机,再调整优先级或改写文法,而不是盲目增加 %expect。

语法

bison [选项] 文件.y

选项

  • -d:同时生成头文件(默认 文件.tab.h),供词法器共享 token 定义
  • -o FILE:指定生成的 C 源文件名
  • -v:生成 .output 状态机报告
  • -W:启用警告,如 -Wcounterexamples
  • -y:模仿 yacc 的输出文件名
  • -t:在生成代码中启用调试宏

实例

# 生成 parser.tab.c 与 parser.tab.h
bison -d parser.y

# 自定义输出文件名并生成状态报告
bison -d -v -o parser.c parser.y

# 与 flex 配合编译
flex lexer.l
cc -o calc parser.c lex.yy.c

# 查看冲突详情
grep -n 'conflict' parser.output

规则中的动作使用 $$ 表示左部符号值,$1、$2 表示右部各符号值;%token、%left、%right、%nonassoc 用于声明 token 与优先级。

参考链接