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>
This commit is contained in:
David Lamparter 2016-12-16 02:10:48 +01:00
parent 4a06690fca
commit afc3a6ceb6
2 changed files with 26 additions and 24 deletions

View File

@ -24,7 +24,6 @@
%{ %{
#include "command_parse.h" #include "command_parse.h"
#define YYSTYPE CMD_YYSTYPE
%} %}
WORD (\-|\+)?[a-z\*][-+_a-zA-Z0-9\*]* WORD (\-|\+)?[a-z\*][-+_a-zA-Z0-9\*]*

View File

@ -23,11 +23,6 @@
*/ */
%{ %{
typedef union CMD_YYSTYPE CMD_YYSTYPE;
#define YYSTYPE CMD_YYSTYPE
#include "command_lex.h"
// compile with debugging facilities // compile with debugging facilities
#define YYDEBUG 1 #define YYDEBUG 1
%} %}
@ -39,7 +34,13 @@ typedef union CMD_YYSTYPE CMD_YYSTYPE;
%defines "command_parse.h" %defines "command_parse.h"
%output "command_parse.c" %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 { %code requires {
#include "stdlib.h" #include "stdlib.h"
#include "string.h" #include "string.h"
@ -47,6 +48,25 @@ typedef union CMD_YYSTYPE CMD_YYSTYPE;
#include "log.h" #include "log.h"
#include "graph.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 { struct parser_ctx {
yyscan_t scanner; yyscan_t scanner;
@ -58,23 +78,6 @@ typedef union CMD_YYSTYPE CMD_YYSTYPE;
/* pointers to copy of command docstring */ /* pointers to copy of command docstring */
char *docstr_start, *docstr; 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 */ /* union types for lexed tokens */