Merge branch 'collectd-4.8' into collectd-4.9
[collectd.git] / src / liboconfig / parser.y
index 8df2c6e..5b7aa94 100644 (file)
@@ -30,6 +30,7 @@ extern int yylineno;
 extern char *yytext;
 
 extern oconfig_item_t *ci_root;
+extern char           *c_file;
 %}
 
 %start entire_file
@@ -45,7 +46,7 @@ extern oconfig_item_t *ci_root;
 }
 
 %token <number> NUMBER
-%token <boolean> TRUE FALSE
+%token <boolean> BTRUE BFALSE
 %token <string> QUOTED_STRING UNQUOTED_STRING
 %token SLASH OPENBRAC CLOSEBRAC EOL
 
@@ -64,6 +65,9 @@ extern oconfig_item_t *ci_root;
 %type <sl> statement_list
 %type <ci> entire_file
 
+/* pass an verbose, specific error message to yyerror() */
+%error-verbose
+
 %%
 string:
        QUOTED_STRING           {$$ = unquote ($1);}
@@ -72,8 +76,8 @@ string:
 
 argument:
        NUMBER                  {$$.value.number = $1; $$.type = OCONFIG_TYPE_NUMBER;}
-       | TRUE                  {$$.value.boolean = 1; $$.type = OCONFIG_TYPE_BOOLEAN;}
-       | FALSE                 {$$.value.boolean = 0; $$.type = OCONFIG_TYPE_BOOLEAN;}
+       | BTRUE                 {$$.value.boolean = 1; $$.type = OCONFIG_TYPE_BOOLEAN;}
+       | BFALSE                {$$.value.boolean = 0; $$.type = OCONFIG_TYPE_BOOLEAN;}
        | string                {$$.value.string = $1; $$.type = OCONFIG_TYPE_STRING;}
        ;
 
@@ -192,7 +196,15 @@ entire_file:
 %%
 static int yyerror (const char *s)
 {
-       fprintf (stderr, "Error in line %i near `%s': %s\n", yylineno, yytext, s);
+       char *text;
+
+       if (*yytext == '\n')
+               text = "<newline>";
+       else
+               text = yytext;
+
+       fprintf (stderr, "Parse error in file `%s', line %i near `%s': %s\n",
+               c_file, yylineno, text, s);
        return (-1);
 } /* int yyerror */