summaryrefslogtreecommitdiffstats
path: root/lib/command_parse.y
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2016-12-16 02:10:48 +0100
committerDavid Lamparter <equinox@opensourcerouting.org>2016-12-16 20:42:01 +0100
commitafc3a6ceb640abda6a549fa3e789252ae78e930c (patch)
tree364d10ccf2e72254f7c3a8ff03d568010c6e7f91 /lib/command_parse.y
parentbuild: check flex >= 2.5.20 is available (diff)
downloadfrr-afc3a6ceb640abda6a549fa3e789252ae78e930c.tar.xz
frr-afc3a6ceb640abda6a549fa3e789252ae78e930c.zip
lib: parser: reorder bison incarnations
This shuffles the code blocks in command_parser.y to match file output order, then adjusts things to make the include handling less messy. (also dropped unused DECIMAL_STRLEN_MAX define.) This should hopefully fix the build on NetBSD 6. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'lib/command_parse.y')
-rw-r--r--lib/command_parse.y49
1 files changed, 26 insertions, 23 deletions
diff --git a/lib/command_parse.y b/lib/command_parse.y
index d2dd5aa5c..81aa8a04e 100644
--- a/lib/command_parse.y
+++ b/lib/command_parse.y
@@ -23,11 +23,6 @@
*/
%{
-
-typedef union CMD_YYSTYPE CMD_YYSTYPE;
-#define YYSTYPE CMD_YYSTYPE
-#include "command_lex.h"
-
// compile with debugging facilities
#define YYDEBUG 1
%}
@@ -39,7 +34,13 @@ typedef union CMD_YYSTYPE CMD_YYSTYPE;
%defines "command_parse.h"
%output "command_parse.c"
-/* required external units */
+/* note: code blocks are output in order, to both .c and .h:
+ * 1. %code requires
+ * 2. %union + bison forward decls
+ * 3. %code provides
+ * command_lex.h needs to be included at 3.; it needs the union and YYSTYPE.
+ * struct parser_ctx is needed for the bison forward decls.
+ */
%code requires {
#include "stdlib.h"
#include "string.h"
@@ -47,6 +48,25 @@ typedef union CMD_YYSTYPE CMD_YYSTYPE;
#include "log.h"
#include "graph.h"
+ #define YYSTYPE CMD_YYSTYPE
+ struct parser_ctx;
+}
+
+%union {
+ long long number;
+ char *string;
+ struct graph_node *node;
+ struct subgraph *subgraph;
+}
+
+%code provides {
+ #ifndef FLEX_SCANNER
+ #include "command_lex.h"
+ #endif
+
+ extern void set_lexer_string (yyscan_t *scn, const char *string);
+ extern void cleanup_lexer (yyscan_t *scn);
+
struct parser_ctx {
yyscan_t scanner;
@@ -58,23 +78,6 @@ typedef union CMD_YYSTYPE CMD_YYSTYPE;
/* pointers to copy of command docstring */
char *docstr_start, *docstr;
};
-
- extern void set_lexer_string (yyscan_t *scn, const char *string);
- extern void cleanup_lexer (yyscan_t *scn);
-}
-
-/* functionality this unit exports */
-%code provides {
- /* maximum length of a number, lexer will not match anything longer */
- #define DECIMAL_STRLEN_MAX 20
-}
-
-/* valid semantic types for tokens and rules */
-%union {
- long long number;
- char *string;
- struct graph_node *node;
- struct subgraph *subgraph;
}
/* union types for lexed tokens */