mirror_iproute2/tc/emp_ematch.y
Stephen Hemminger 38983334f6 tc/ematch: fix deprecated yacc warning
Newer versions of Bison deprecated some directives.

    YACC     emp_ematch.yacc.c
emp_ematch.y:11.1-14: warning: deprecated directive, use ‘%define parse.error verbose’ [-Wdeprecated]
 %error-verbose
 ^~~~~~~~~~~~~~
emp_ematch.y:12.1-22: warning: deprecated directive, use ‘%define api.prefix {ematch_}’ [-Wdeprecated]
 %name-prefix "ematch_"

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
2019-04-24 15:10:22 -07:00

101 lines
1.3 KiB
Plaintext

%{
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "m_ematch.h"
%}
%locations
%token-table
%define parse.error verbose
%define api.prefix {ematch_}
%union {
unsigned int i;
struct bstr *b;
struct ematch *e;
}
%{
extern int ematch_lex(void);
extern void yyerror(const char *s);
extern struct ematch *ematch_root;
extern char *ematch_err;
%}
%token <i> ERROR
%token <b> ATTRIBUTE
%token <i> AND OR NOT
%type <i> invert relation
%type <e> match expr
%type <b> args
%right AND OR
%start input
%%
input:
/* empty */
| expr
{ ematch_root = $1; }
| expr error
{
ematch_root = $1;
YYACCEPT;
}
;
expr:
match
{ $$ = $1; }
| match relation expr
{
$1->relation = $2;
$1->next = $3;
$$ = $1;
}
;
match:
invert ATTRIBUTE '(' args ')'
{
$2->next = $4;
$$ = new_ematch($2, $1);
if ($$ == NULL)
YYABORT;
}
| invert '(' expr ')'
{
$$ = new_ematch(NULL, $1);
if ($$ == NULL)
YYABORT;
$$->child = $3;
}
;
args:
ATTRIBUTE
{ $$ = $1; }
| ATTRIBUTE args
{ $1->next = $2; }
;
relation:
AND
{ $$ = TCF_EM_REL_AND; }
| OR
{ $$ = TCF_EM_REL_OR; }
;
invert:
/* empty */
{ $$ = 0; }
| NOT
{ $$ = 1; }
;
%%
void yyerror(const char *s)
{
ematch_err = strdup(s);
}