- $ cd Download
- $ sudo rm -rf /usr/local/go
- $ sudo tar -C /usr/local -xzf go1.17.7.linux-amd64.tar.gz
- $ nano ~/.bashrc
- export GOROOT=/usr/local/go
- export GOPATH=$HOME/go
- export PATH=$PATH:$GOPATH/bin:$GOROOT/bin
- $ source ~/.bashrc
- $ go -version
- $ go version go1.12.1 linux/amd64 . . .
- $ mkdir -p $HOME/go/{bin,src}
- $ cd /usr/local/lib
- $ sudo curl -O https://www.antlr.org/download/antlr-4.9.2-complete.jar
- $ export CLASSPATH=".:/usr/local/lib/antlr-4.9.2-complete.jar:$CLASSPATH"
- $ alias antlr4='java -jar /usr/local/lib/antlr-4.9.2-complete.jar'
- $ alias grun='java org.antlr.v4.gui.TestRig'
- $ source ~/.bashrc
- $ antlr4
- ANTLR Parser Generator Version 4.9.2 . . .
- $ go get github.com/antlr/antlr4/runtime/Go/antlr
- $ cd home/go/src
- $ mkdir Calc
- $ cd Calc
- $ touch Calc.g4
- $ touch main.go
// nombre de la gramatica igual al nombre del archivo
grammar Calc;
//tokens
MUL: '*';
ADD: '+';
LB: '(';
RB: ')';
DIGIT: [0-9]+;
WS: [\r\n\t]+ -> skip;
// los nombres de los no terminales en minusculas
//rules
l: e EOF;
e: e '+' t # Sum
| t # PasaT
;
t: t '*' f # Mul
| f # PasaF
;
f: '(' e ')' # PasaE
| DIGIT # Digit
;
- $ antlr4 -Dlanguage=Go -o parser Calc.g4
- $ sudo rm -rf /usr/local/go/src/parser
- $ sudo mv parser /usr/local/go/src
package main
import (
"fmt"
"parser" // copy parser folder to goroot
"github.com/antlr/antlr4/runtime/Go/antlr"
)
type calcListener struct{
*parser.BaseCalcListener
}
func main() {
fmt.Println("Parser: ")
is:= antlr.NewInputStream("1+2*3")
lexer:= parser.NewCalcLexer(is)
stream:= antlr.NewCommonTokenStream(lexer,antlr.TokenDefaultChannel)
p:= parser.NewCalcParser(stream)
antlr.ParseTreeWalkerDefault.Walk(&calcListener{},p.L())
fmt.Println("________termino todo correctamente________")
}
- $ go mod init Calc
- $ go mod tidy
- $ go run main.go
- se puede arreglar copiando la carpeta parser a goroot
- es una forma facil
- dentro de la carpeta parser en una terminal correr
- $ go mod init parser
- en la carpeta principal
- $ go mod init main
- $ go mod tidy
- agregar al final de go.mod del main
- agregar 'require parser v1.0.0'
- agregar 'replace parser v1.0.0 => ./parser'