Not sure if this would be a good feature or not, but it would aid in AST generation, I think.
Right now generating an AST looks fairly complicated to me. I was thinking that one way to make this easier would be to have a codegen mode where it would generate a set of functions for each rule. The functions would take either an argument containing all of the subrules referenced in that rule (or the raw text if it referred to a token) or would have a list of arguments, with each argument being a referenced subrule or token, and that would mean that all one would need to do to build an AST would be to keep track of where their at on a stack. I'm thinking of something like the following:
Or, as an alternative, the struct would be destructured and passed as individual function arguments. For rules that have alternations, that could be a union. Things like that.
The idea would be that we would "subscribe" to the parser "events", if you will, and then you could just build your AST that way. I believe ANTLR4 does this, as does the Heim parser generator, though I don't use either because ANTLR4 doesn't support this grammar and Heim broke last time I tried. This is the only parser tool that I've found that supports the kind of grammar I'm working with.
Not sure if this would be a good feature or not, but it would aid in AST generation, I think.
Right now generating an AST looks fairly complicated to me. I was thinking that one way to make this easier would be to have a codegen mode where it would generate a set of functions for each rule. The functions would take either an argument containing all of the subrules referenced in that rule (or the raw text if it referred to a token) or would have a list of arguments, with each argument being a referenced subrule or token, and that would mean that all one would need to do to build an AST would be to keep track of where their at on a stack. I'm thinking of something like the following:
Assume we have this rule:
If we were to implement a C++ mode (which would be nice but I can see how that'd be a hassle), it might do something like either:
Or, as an alternative, the struct would be destructured and passed as individual function arguments. For rules that have alternations, that could be a union. Things like that.
The idea would be that we would "subscribe" to the parser "events", if you will, and then you could just build your AST that way. I believe ANTLR4 does this, as does the Heim parser generator, though I don't use either because ANTLR4 doesn't support this grammar and Heim broke last time I tried. This is the only parser tool that I've found that supports the kind of grammar I'm working with.