From: David Lamparter Date: Fri, 16 Dec 2016 01:10:48 +0000 (+0100) Subject: lib: parser: reorder bison incarnations X-Git-Tag: frr-3.0-branchpoint~113^2~3 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=afc3a6ceb640abda6a549fa3e789252ae78e930c;p=matthieu%2Ffrr.git 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 --- diff --git a/lib/command_lex.l b/lib/command_lex.l index e978803b22..0cb306b682 100644 --- a/lib/command_lex.l +++ b/lib/command_lex.l @@ -24,7 +24,6 @@ %{ #include "command_parse.h" -#define YYSTYPE CMD_YYSTYPE %} WORD (\-|\+)?[a-z\*][-+_a-zA-Z0-9\*]* diff --git a/lib/command_parse.y b/lib/command_parse.y index d2dd5aa5cc..81aa8a04e7 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 */