1. Hello World

Antlr4本身不是一种语言,它是一个类似于Java类库一样的东西,遵循Antlr4的规范是完全可以自定义一门语言的。
学习一种技术往往会从Hello World开始学习,Antlr4定义语法就是编写g4文件,下面就是Hello World的g4文件:

  1. // Define a grammar called Hello
  2. grammar Hello;
  3. r : 'hello' ID ; // match keyword hello followed by an identifier
  4. ID : [a-z]+ ; // match lower-case identifiers
  5. WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines

完成g4文件只是完成了第一步。我们知道任何语法解析都会将输入的语句转换成一棵抽象语法树AST,上面这个g4在接收到“hello world”的输入之后,其转换出来的AST如下:
image.png
假设我们要开发一款编译器,这款编译器的作用就是接收并打印,那么我们的工作就是去遍历这棵AST然后打印所有的token就可以了。
这里引出了一个叫做token的概念,和互联网应用不同,token并不是指令牌,而是词法符号。

2. 定义四则运算并实现一个简单的计算器