antlr4 icon indicating copy to clipboard operation
antlr4 copied to clipboard

Build issue on generated golang code

Open pierredittgen opened this issue 8 years ago • 3 comments

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

pierredittgen avatar May 24 '16 15:05 pierredittgen

Thanks @pierredittgen. Sounds like an issue with the templates. I'm presently at a conference but I'll look soon.

pboyer avatar May 25 '16 14:05 pboyer

Thanks I stay tuned!

pierredittgen avatar May 26 '16 08:05 pierredittgen

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.

  1. Rename the internal method
  2. Rename the method in generated code

pboyer avatar Oct 13 '16 22:10 pboyer