90 lines
2.9 KiB
Plaintext
90 lines
2.9 KiB
Plaintext
|
%{
|
||
|
/*
|
||
|
* gram.y - message definition language
|
||
|
*
|
||
|
* Copyright (c) 2009 Cisco and/or its affiliates.
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at:
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
extern void yyerror (char *s);
|
||
|
extern int yylex (void);
|
||
|
|
||
|
#define YYSTYPE void *
|
||
|
|
||
|
void generate (YYSTYPE);
|
||
|
YYSTYPE add_slist(YYSTYPE, YYSTYPE);
|
||
|
YYSTYPE add_define(YYSTYPE, YYSTYPE);
|
||
|
YYSTYPE suppress_version(void);
|
||
|
YYSTYPE add_defbody(YYSTYPE, YYSTYPE);
|
||
|
YYSTYPE add_primtype(YYSTYPE, YYSTYPE, YYSTYPE);
|
||
|
YYSTYPE add_complex(YYSTYPE, YYSTYPE);
|
||
|
YYSTYPE add_union(YYSTYPE, YYSTYPE);
|
||
|
YYSTYPE add_scalar_vbl(YYSTYPE);
|
||
|
YYSTYPE add_vector_vbl(YYSTYPE, YYSTYPE);
|
||
|
YYSTYPE set_flags(YYSTYPE, YYSTYPE);
|
||
|
%}
|
||
|
|
||
|
%token NAME RPAR LPAR SEMI LBRACK RBRACK NUMBER PRIMTYPE BARF
|
||
|
%token TPACKED DEFINE LCURLY RCURLY STRING UNION
|
||
|
%token HELPER_STRING COMMA
|
||
|
%token NOVERSION MANUAL_PRINT MANUAL_ENDIAN MANUAL_JAVA TYPEONLY DONT_TRACE
|
||
|
|
||
|
%%
|
||
|
|
||
|
pgm: slist {generate ($1);}
|
||
|
;
|
||
|
|
||
|
slist: slist stmt {$$ = add_slist ($1, $2);}
|
||
|
| stmt {$$ = $1;}
|
||
|
;
|
||
|
|
||
|
stmt: flist defn {$$ = set_flags($1, $2);}
|
||
|
| defn {$$ = $1;}
|
||
|
;
|
||
|
|
||
|
flist: flist flag {$$ = (YYSTYPE)(unsigned long long)
|
||
|
((unsigned long long) $1
|
||
|
| (unsigned long long) $2);}
|
||
|
| flag {$$ = $1;}
|
||
|
;
|
||
|
|
||
|
flag:
|
||
|
MANUAL_PRINT {$$ = $1;}
|
||
|
| MANUAL_ENDIAN {$$ = $1;}
|
||
|
| MANUAL_JAVA {$$ = $1;}
|
||
|
| DONT_TRACE {$$ = $1;}
|
||
|
| TYPEONLY {$$ = $1;}
|
||
|
;
|
||
|
|
||
|
defn: DEFINE NAME LCURLY defbody RCURLY SEMI
|
||
|
{$$ = add_define($2, $4);}
|
||
|
|
||
|
| NOVERSION SEMI
|
||
|
{$$ = suppress_version();}
|
||
|
;
|
||
|
|
||
|
defbody: defbody onedef {$$ = add_defbody($1, $2);}
|
||
|
| onedef {$$ = $1;}
|
||
|
;
|
||
|
|
||
|
onedef: PRIMTYPE vbl SEMI {$$ = add_primtype($1, $2, 0);}
|
||
|
| TPACKED PRIMTYPE vbl SEMI {$$ = add_primtype($1, $2, $3);}
|
||
|
| NAME vbl SEMI {$$ = add_complex($1, $2);}
|
||
|
| UNION NAME LCURLY defbody RCURLY SEMI
|
||
|
{$$ = add_union($2, $4);}
|
||
|
;
|
||
|
|
||
|
vbl: NAME {$$ = add_scalar_vbl($1);}
|
||
|
| NAME LBRACK NUMBER RBRACK {$$ = add_vector_vbl($1, $3);}
|
||
|
;
|