Reorganize source tree to use single autotools instance
[vpp.git] / src / tools / vppapigen / gram.y
diff --git a/src/tools/vppapigen/gram.y b/src/tools/vppapigen/gram.y
new file mode 100644 (file)
index 0000000..de26af8
--- /dev/null
@@ -0,0 +1,90 @@
+%{
+/*
+ * 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 add_variable_length_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 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;}
+        | 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);}
+        | NAME LBRACK NAME RBRACK {$$ = add_variable_length_vector_vbl($1, $3);}
+          ;