Closed mingodad closed 10 months ago
The original version of the code always created lexer and parser table arrays. These were static class variables. I changed the arrays into pointers so that they could be 'missing' when not needed, but still allow the code to compile because the symbol would be present (without conditional compilation). The arrays are static variables (so not visible beyond the translation unit in which they are used), and the pointers are assigned the address of array.
However, the tables need to exist; they are either going to be static class variables, or static file variables.
The same applies for the parser tables.
If you have a suggestion on how to have the fields present at all times (particularly important for the parser tables), and to not use static variables, I'd love to hear it.
The tables that you're right need to exist should be prefixed somehow to allow multiple parsers/lexers on the same application.
All other probably need be included as a class/struct field that is allocated when instantiating the parser/lexer.
Easy saying than doing but doable.
There should not be a problem because all the tables generated for the lexer & the parser are static. They will not be visible to anything outside of the owning translation unit.
The latest changes did a great job to create a saner parser but still there is a bunch of global variables in the generated parser, see for example
samples/Calc
: