Bison 是 GNU 项目下的一个语法分析器生成器(Parser Generator),用于在 Linux/Unix 系统中生成解析文本的代码(通常是 C 或 C++ 代码)。它是 Yacc(Yet Another Compiler Compiler)的 GNU 替代品,常用于开发编译器、解释器或其他需要处理结构化文本的工具。
将上下文无关文法转换为解析器代码
.y
文件),自动生成解析文本的代码(如 C 代码)。与 Flex 协同工作
支持多种解析算法
在基于 Debian/Ubuntu 的系统中:
sudo apt install bison
在基于 RHEL/CentOS 的系统中:
sudo yum install bison
定义一个语法文件 calc.y
:
%{
#include <stdio.h>
int yylex();
void yyerror(const char *s);
%}
%token NUMBER
%left '+' '-'
%%
expr: expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| NUMBER { $$ = $1; }
;
%%
void yyerror(const char *s) { fprintf(stderr, "Error: %s\n", s); }
int main() {
yyparse();
return 0;
}
生成解析器代码并编译:
bison -d calc.y # 生成 calc.tab.c 和 calc.tab.h
gcc calc.tab.c -o calc
bison -d file.y
:生成解析器代码(.c
和 .h
文件)。bison --verbose
:生成详细的状态机报告(.output
文件)。yacc
命令通常是指向 Bison 的符号链接。冲突(Shift/Reduce 或 Reduce/Reduce)
bison -v
生成报告分析冲突。与 Flex 配合
yylex()
)需提供 Tokens 给 Bison。如果需要进一步深入(如 GLR 解析、错误恢复等),可以查阅 GNU Bison 官方文档。