pboyer / antlr4

ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.
http://antlr.org
Other
26 stars 1 forks source link

Build issue on generated golang code #8

Open pierredittgen opened 8 years ago

pierredittgen commented 8 years ago

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

pboyer commented 8 years ago

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

pierredittgen commented 8 years ago

Thanks I stay tuned!

pboyer commented 8 years ago

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