NAT44: Fix interface feature removal.
[vpp.git] / src / tools / vppapigen / gram.y
1 %{
2 /*
3  * gram.y - message definition language
4  *
5  * Copyright (c) 2009 Cisco and/or its affiliates.
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at:
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 extern void yyerror (char *s);
20 extern int yylex (void);
21     
22 #define YYSTYPE void *
23     
24 void generate (YYSTYPE);
25  YYSTYPE add_slist(YYSTYPE, YYSTYPE);
26  YYSTYPE add_define(YYSTYPE, YYSTYPE);
27  YYSTYPE suppress_version(void);
28  YYSTYPE add_defbody(YYSTYPE, YYSTYPE);
29  YYSTYPE add_primtype(YYSTYPE, YYSTYPE, YYSTYPE);
30  YYSTYPE add_complex(YYSTYPE, YYSTYPE);
31  YYSTYPE add_union(YYSTYPE, YYSTYPE);
32  YYSTYPE add_scalar_vbl(YYSTYPE);
33  YYSTYPE add_vector_vbl(YYSTYPE, YYSTYPE);
34  YYSTYPE add_variable_length_vector_vbl(YYSTYPE, YYSTYPE);
35  YYSTYPE set_flags(YYSTYPE, YYSTYPE);
36  YYSTYPE add_version(YYSTYPE, YYSTYPE, YYSTYPE);
37 %}
38
39 %token NAME RPAR LPAR SEMI LBRACK RBRACK NUMBER PRIMTYPE BARF
40 %token TPACKED DEFINE LCURLY RCURLY STRING UNION
41 %token HELPER_STRING COMMA DOT VL_API_VERSION
42 %token NOVERSION MANUAL_PRINT MANUAL_ENDIAN TYPEONLY DONT_TRACE AUTOREPLY
43
44 %%
45
46 pgm:      slist                 {generate ($1);}
47           ;
48
49 slist:    slist stmt            {$$ = add_slist ($1, $2);}
50         | stmt                  {$$ = $1;}
51           ;
52
53 stmt:     flist defn            {$$ = set_flags($1, $2);}
54         | defn                  {$$ = $1;}
55         | api_version           {$$ = $1;}
56           ;
57
58 flist:    flist flag            {$$ = (YYSTYPE)(unsigned long)
59                                      ((unsigned long) $1 
60                                     | (unsigned long) $2);}
61         | flag                  {$$ = $1;}
62           ;
63
64 flag:   
65           MANUAL_PRINT          {$$ = $1;}
66         | MANUAL_ENDIAN         {$$ = $1;}
67         | DONT_TRACE            {$$ = $1;}
68         | TYPEONLY              {$$ = $1;}
69         | AUTOREPLY             {$$ = $1;}
70           ;
71
72 defn:     DEFINE NAME LCURLY defbody RCURLY SEMI 
73                                 {$$ = add_define($2, $4);}
74
75         | NOVERSION SEMI
76                                 {$$ = suppress_version();}
77           ;
78
79 defbody:  defbody onedef        {$$ = add_defbody($1, $2);}
80         | onedef                {$$ = $1;}
81           ;
82
83 onedef:   PRIMTYPE vbl SEMI      {$$ = add_primtype($1, $2, 0);}
84         | TPACKED PRIMTYPE vbl SEMI {$$ = add_primtype($1, $2, $3);}
85         | NAME vbl SEMI          {$$ = add_complex($1, $2);}
86         | UNION NAME LCURLY defbody RCURLY SEMI 
87                                  {$$ = add_union($2, $4);}
88           ;
89
90 vbl:      NAME                      {$$ = add_scalar_vbl($1);}
91         | NAME LBRACK NUMBER RBRACK {$$ = add_vector_vbl($1, $3);}
92         | NAME LBRACK NAME RBRACK {$$ = add_variable_length_vector_vbl($1, $3);}
93           ;
94
95 api_version:  VL_API_VERSION NUMBER DOT NUMBER DOT NUMBER 
96                                     {$$ = add_version ($2, $4, $6);}