vcf是什么


编译器概述

定义一种“上下文无关文法”(context-free grammar,CFG),这是一种形式语言理论中的基本概念。当我们将这种CFG的概念应用于计算机编程中,就需要一种能够解释这种文法的程序,即“编译器”(compiler)。比如,g++用于编译C++代码,javac用于编译Java代码,这些工具都可以被称作编译器。

CC概述

CC即“编译器编译器”(compiler-compiler),也常被称为compiler generator。它的作用是,针对给定的上下文无关文法,生成一个特定的C程序代码,这个C程序代码就成为了给定文法的编译器。

知名的工具如Yacc和Bison,就是此类的代表。

Yacc与Bison

Yacc,即Yet Another Compiler-Compiler,是经典的用于生成语法分析器的工具。它采用LALR语法分析方法,输入为巴科斯范式(Backus-Naur Form,BNF)所描述的语法规则。输出则是基于表驱动的编译器。

GNU Bison是Yacc的GNU自由软件版本,它在原有基础上增加了对GLR(Generalized LR)语法分析的支持等改进。

Lex与Flex

Lex是词法分析器(scanner)的生成工具的缩写,它使用正则表达式来描述词法单元的模式,并生成相应的实现代码。Lex程序通常被称为Lex编译器。

Flex是Lex的开源版本,提供了一种替代的实现方式。

JavaCC介绍

JavaCC(Java Compiler Compiler)是一个轻量级的语法分析器生成器和词法分析器生成器,用纯Java编写。它可以生成Java、C++和C等代码。

JavaCC根据输入的文法生成自顶向下LL语法分析器,同时也能生成词法分析器。JavaCC还提供了JJTree帮助用户构建语法树,JJDoc工具用于生成BNF范式文档。

JavaCC起源于Sun公司的一个项目Jack,后被重命名为JavaCC并成为开源项目。

许多知名开源项目都采用了JavaCC,如Apache的多个子项目。

ANTLR介绍

ANTLR(ANother Tool for Language Recognition)是一个基于自顶向下的递归下降LL算法实现的语法解析器生成器。

ANTLR能够自动将用户定义的ANTLR语法规则生成目标语言的解析器。生成的解析器客户端能够将输入文本转化为抽象语法树,并提供遍历树的接口。

ANTLR最初由Terence Parr在普渡大学创作,并在Hank Dietz教授的指导下发展。如今ANTLR已支持多种语言,如Ada95、C、C#等。

使用ANTLR的著名项目包括但不限于Apache的多个项目。