Feedback needed: Complete symbol appoach for Bison's D backend
Adela Vais
adela.vais99 at gmail.com
Sat Nov 14 15:50:23 UTC 2020
Hello!
I need some feedback about the return value of yylex() in Bison's
Lexer class, which must be provided by the user.
This method should provide the Bison parser with three values:
the TokenKind (which is the current return value), the semantic
value, and the location (optional parameter). The last two are
set in yylex(), stored in the lexer class, and retrieved by the
Bison parser through getters.
The other parsers provide the option of complete symbols, which
means that yylex()'s return value is changed to a structure that
binds together the TokenKind, the semantic value, and the
location. Internally, the structure is immediately divided into
its components, which continue to be used separately throughout
the parser.
The big advantage of the complete symbol is that it is
beginner-friendly, and reduces the potential errors caused
because the user forgot to set one of the values.
The main disadvantage is the possible overhead the structure adds
to the parser. It will be created and destroyed for each
discovered token.
Should we keep both versions, or move to a complete symbol
approach? Given that Bison's current release still has D as an
experimental feature, this would not be a breaking change. If we
decide on using both, the complete symbol approach will be
selected through a Bison directive, like in the other parsers.
An example of the current method, using TokenKind:
https://github.com/akimd/bison/blob/master/examples/d/calc/calc.y#L117
An example using the Symbol struct:
https://github.com/adelavais/bison/blob/complete-external-symbols/examples/d/calc/calc.y#L117
More information about the Digitalmars-d
mailing list