d: add the custom error message feature
commitdc15b62a7cd747a3424fb80b74c6fdfa0247eb05
authorAdela Vais <adela.vais@yahoo.com>
Sat, 24 Oct 2020 13:43:46 +0000 (24 16:43 +0300)
committerAkim Demaille <akim.demaille@gmail.com>
Sat, 7 Nov 2020 16:03:23 +0000 (7 17:03 +0100)
tree13cbf0c9a637a296215f4b59875e770a80cf669a
parent4252134ba407f8dd13e15fcb55fc5dd64b30c4ee
d: add the custom error message feature

Parser.Context class returns a const YYLocation, so Lexer's method
yyerror() needs to receive the location as a const parameter.

Internal error reporting flow is changed to be similar to that of
the other skeletons. Before, case YYERRLAB was calling yyerror()
with the result of yysyntax_error() as the string parameter. As the
custom error message lets the user decide if they want to use
yyerror() or not, this flow needed to be changed. Now, case YYERRLAB
calls yyreportSyntaxError(), that builds the error message using
yysyntaxErrorArguments(). Then yyreportSyntaxError() passes the
error message to the user defined syntax_error() in case of a custom
message, or to yyerror() otherwise.

In the tests in tests/calc.at, the order of the tokens needs to be
changed in order of precedence, so that the D program outputs the
expected tokens in the same order as the other parsers.

* data/skeletons/lalr1.d: Add the custom error message feature.
* doc/bison.texi: Document it.
* examples/d/calc/calc.y: Adjust.
* tests/calc.at, tests/local.at: Test it.
data/skeletons/lalr1.d
doc/bison.texi
examples/d/calc/calc.y
tests/calc.at
tests/local.at