diff options
author | David Lamparter <equinox@opensourcerouting.org> | 2016-12-16 02:10:48 +0100 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2016-12-16 20:42:01 +0100 |
commit | afc3a6ceb640abda6a549fa3e789252ae78e930c (patch) | |
tree | 364d10ccf2e72254f7c3a8ff03d568010c6e7f91 /lib/command_parse.y | |
parent | build: check flex >= 2.5.20 is available (diff) | |
download | frr-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.y | 49 |
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 */ |