antlr4-安装
Table of Contents
安装 #
1. 安装antlr4 #
直接按照 官网步骤安装即可。或者直接使用antlr4-tools安装:
pip install antlr4-tools
2. 运行example #
创建calc.g4并填入以下内容(文件名称和grammar要相同,否则报错):
grammar calc;
// Tokens
MUL: '*';
DIV: '/';
ADD: '+';
SUB: '-';
NUMBER: [0-9]+;
WHITESPACE: [ \r\n\t]+ -> skip;
// Rules
start : expression EOF;
expression
: expression op=('*'|'/') expression # MulDiv
| expression op=('+'|'-') expression # AddSub
| NUMBER # Number
;
生成go解析文件:
antlr -Dlanguage=Go -o parser calc.g4
执行完命令后会生成go文件:
➜ antlr4-go-example tree
.
├── calc.g4
└── parser
├── CalcLexer.interp
├── CalcLexer.tokens
├── calc.interp
├── calc.tokens
├── calc_base_listener.go
├── calc_lexer.go
├── calc_listener.go
└── calc_parser.go
添加运行文件:
package main
import (
"antlr4-go-example/parser"
"fmt"
"github.com/antlr/antlr4/runtime/Go/antlr/v4"
)
func main() {
// Setup the input
is := antlr.NewInputStream("1 + 2 * 3")
// Create the Lexer
lexer := parser.NewcalcLexer(is)
// Read all tokens
for {
t := lexer.NextToken()
if t.GetTokenType() == antlr.TokenEOF {
break
}
fmt.Printf("%s (%q)\n",
lexer.SymbolicNames[t.GetTokenType()], t.GetText())
}
}
安装go依赖包:
go mod init antlr4-go-example
go mod tidy
运行main.go
,控制台输出:
NUMBER ("1")
ADD ("+")
NUMBER ("2")
MUL ("*")
NUMBER ("3")
填坑记录 #
- java1.8的版本生成的go文件有可能存在一些找不到的方法,最好用更高版本的jdk。