antlr4
antlr4 copied to clipboard
Build issue on generated golang code
Hi!
I wrote a simple grammar to parse instance lines in STEP format (STEP.g4)
Grammar is ok, i already generated working Python code. Golang code generation works too, but I can't build the generated golang source, especially step_parser.go:
tech.fr/parser
tech.fr/parser/step_parser.go:408: cannot use s (type *ParameterContext) as type antlr4.RuleContext in return argument: *ParameterContext does not implement antlr4.RuleContext (wrong type for String method) have String() antlr4.TerminalNode want String([]string, antlr4.RuleContext) string tech.fr/parser/step_parser.go:425: cannot use NewParameterContext(p, p.BaseParser.GetParserRuleContext(), p.BaseParser.BaseRecognizer.GetState()) (type *ParameterContext) as type IParameterContext in assignment: *ParameterContext does not implement IParameterContext (wrong type for String method) have String() antlr4.TerminalNode want String([]string, antlr4.RuleContext) string
Any clue to make this work? Pierre STEP.g4.txt step_parser.go.txt
Thanks @pierredittgen. Sounds like an issue with the templates. I'm presently at a conference but I'll look soon.
Thanks I stay tuned!
I've taken a look at this and I think the issue is certainly to do with the "String" value here:
parameter : Number | ByteString | String | Enum | Empty | Id | parameters ;
Consider if you named such a member toString
. This would collide in other languages.
For Go, this collides with an internal String
method. This shouldn't be hard to fix, but there's more than one option on how to do it.
- Rename the internal method
- Rename the method in generated code