%{
#include "system.h"
+#include "complain.h"
#include "muscle_tab.h"
#include "files.h"
#include "getargs.h"
correctly typed access to it. */
#define yycontrol ((gram_control_t *) gram_control)
-/* Request detailed parse error messages, and pass them to
- GRAM_ERROR. */
+/* Request detailed parse error messages, and pass them to GRAM_ERROR.
+ FIXME: depends on the undocumented availability of YYLLOC.t */
#undef yyerror
#define yyerror(Msg) \
- gram_error (yycontrol, &yylloc, Msg)
+ gram_error (&yylloc, Msg)
#define YYPRINT(File, Type, Value) \
yyprint (File, Type, &Value)
char *current_type = 0;
symbol_t *current_lhs;
location_t current_lhs_location;
-associativity current_assoc;
+assoc_t current_assoc;
int current_prec = 0;
braced_code_t current_braced_code = action_braced_code;
%}
symbol_list_t *list;
int integer;
char *string;
- associativity assoc;
+ assoc_t assoc;
};
-/* Define the tokens together with there human representation. */
+/* Define the tokens together with their human representation. */
%token GRAM_EOF 0 "end of string"
%token STRING CHARACTER
%token INT
{
symbol_class_set ($1, current_class, @1);
symbol_type_set ($1, current_type, @1);
- symbol_make_alias ($1, $2);
+ symbol_make_alias ($1, $2, @$);
}
| ID INT string_as_id
{
symbol_class_set ($1, current_class, @1);
symbol_type_set ($1, current_type, @1);
symbol_user_token_number_set ($1, $2, @2);
- symbol_make_alias ($1, $3);
+ symbol_make_alias ($1, $3, @$);
}
;
rules_or_grammar_declaration:
rules
| grammar_declaration ";"
+ {
+ if (yacc_flag)
+ complain_at (@$, _("POSIX forbids declarations in the grammar"));
+ }
+| error ";"
+ {
+ yyerrok;
+ }
;
rules:
symbol:
ID { $$ = $1; }
| string_as_id { $$ = $1; }
-| CHARACTER { $$ = getsym ($1, @1); }
+| CHARACTER { $$ = symbol_get ($1, @1); }
;
action:
string_as_id:
STRING
{
- $$ = getsym ($1, @1);
+ $$ = symbol_get ($1, @1);
symbol_class_set ($$, token_sym, @1);
}
;
}
void
-gram_error (gram_control_t *control ATTRIBUTE_UNUSED,
- location_t *yylloc, const char *msg)
+gram_error (location_t *yylloc, const char *msg)
{
- LOCATION_PRINT (stderr, *yylloc);
- fprintf (stderr, ": %s\n", msg);
+ complain_at (*yylloc, "%s", msg);
}