一、ANTLR概述
ANTLR是一款强大的语法分析器生成工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。
ANTLR 是用JAVA写的语言识别工具,它用来声明语言的语法,简称为“元语言”。
学习ANTLR书籍: 《ANTLR4权威指南》
一. 术语
语言(language)是由一系列有意义的语句组成,语句(sentence)由词组组成,词组(phrase)是由更小的子词组(subphrase)和词汇符号(vocabulary symbols)组成。
举个例子,英语就是一种语言,“Keep on going never give up.”这句话就是语句,语句是由词组(keep on、give up等)组成,而词组又是由词汇符号(即单词)组成。
解释器(interpreter)是指能够分析计算或者“执行”语句的程序,比如计算器、读取配置文件的程序、python解释器等。
翻译器(translator)是指能够将一门语言的语句转换成另外一门语言的语句的程序,比如普通的编译器和Java到C#的转换器。
现在,想象下我们的大脑是怎么样分析理解 “Keep on going never give up.” 这句话的,答对了,我们并不是一个字符一个字符的去阅读一个句子,而是将句子看作是一系列的单词的集合,我们在识别整个句子的语法结构之前,大脑会先将字符聚集成单词,然后获取每个单词的意义。
将字符聚集成单词或者词汇符号(token)的过程称为词法分析(lexical analysis)或者词法符号化(tokenizing)。把可以将输入文本转换成词法符号(token)的程序称为词法分析器(lexer)。词法符号包含至少两部分信息:词法符号的类型(从而能够通过类型来识别词法结构)和该词法符号对应的文本。
当我们将字符聚集成单词后,大脑就会根据语法规则(比如主谓宾,时态等)去分析语句。
语法(grammar)是一系列规则的集合,每条规则表述出一种词汇结构。而句法(syntax)是指约束语言中的各个组成部分之间关系的规则。能够识别语言的程序称为语法分析器(parser)或者句法分析器(syntax analysis)。而antlr在进行语法分析的时候,还会生成一种名为语法分析树(parse tree)或者句法树(syntax tree)的数据结构,用来记录语法分析器识别出输入语句结构的过程,以及该结构的各组成部分。