Yacc

yacc（Yet Another Compiler Compiler），是Unix/Linux上一个用来生成编译器的编译器（编译器代码生成器）。yacc生成的编译器主要是用C語言寫成的语法解析器（Parser），需要与词法解析器Lex一起使用，再把兩部份產生出來的C程序一併編譯。yacc本來只在（类）Unix系統上才有，但現時已普遍移植往Windows及其他平台。

yacc的输入是巴科斯范式（BNF）表达的语法规则以及语法规约的处理代码，输出的是基于表驱动的编译器，包含输入的语法规约的处理代码部分。

yacc是开发编译器的一个有用的工具，采用LALR（1）语法分析方法。

yacc最初由AT&T的Steven C. Johnson为Unix操作系统开发，后来一些兼容的程序如Berkeley Yacc，GNU bison，MKS yacc和Abraxas yacc陆续出现。它们都在原先基础上做了少许改进或者增加，但是基本概念是相同的。 

由于所产生的解析器需要词法分析器配合，因此Yacc经常和词法分析器的产生器——一般就是Lex——联合使用。IEEE POSIX P1003.2标准定义了Lex和Yacc的功能和需求。

 参见 
编译原理
编译器
JavaCC：產生Java的编译器代码生成器
GNU bison
CodeWorker
ANTLR

 外部連結 
Berkeley Yacc 一般认为是目前最好的yacc变种。与bison相比，避免了对特定编译器的依赖。
Essence，Scheme的LR(1)语法解析器的生成器
Coco/R Java和C#的扫描和解析器

Category:程序设计工具
Category:编译器软件