Files
bison/tests
Akim Demaille f3d33c3613 tests: check calls to yyerror from the user actions
This revealed a number of things I had not realized:

- the Java location tracking was aliasing the same pair of positions
  for all the symbols (see previous commit).

- in impure parsers, it's quite easy to use incorrect locations for
  diagnostics, since yyerror uses yylloc, which is the location of the
  lookahead, not that of the current lhs.  So we need something like

    {
      YYLTYPE old_yylloc = yylloc;
      yylloc = @$;
      yyerror (]AT_PARAM_IF([result, count, nerrs, ])[buf);
      yylloc = old_yylloc;
    }

  Maybe we should do that little yylloc dance in the skeleton instead
  of leaving it to the user?  It might be costly...  But that's only
  for users of the impure parsers, which are asking for trouble
  anyway.

- in glr.cc invoking yyerror is somewhat cumbersome: the C++ interface
  is not available as we are in yyparse (which in C), and yyerror is
  used by glr.cc itself to bind it to the user's parser::error.  If we
  call yyerror, we need:

    yyerror (]AT_LOCATION_IF([[&@$, ]])[yyparser, ]AT_PARAM_IF([result, count, nerrs, ])[msg);

  However calling yy::parser::error is easier, once we know that the
  current parser object is available as 'yyparser'.  Which also saves
  us from having to pass the parse-params ourselves:

    yyparser.error (]AT_LOCATION_IF([[@$, ]])[msg);

* tests/calc.at: Invoke yyerror by hand, instead of using fprintf etc.
Adjust expectations.
2020-02-12 00:00:05 +01:00
..
2019-02-21 06:46:07 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2020-01-10 19:16:23 +01:00
2019-11-03 10:32:22 +01:00
2020-01-10 19:16:23 +01:00