libconfig 1.4.9 followUp
Removing, yacc and bison file causing issues. preconpiled .c and .h would suffice.
This commit is contained in:
parent
070565621f
commit
3625aaaf55
395
3rdparty/libconfig/grammar.y
vendored
395
3rdparty/libconfig/grammar.y
vendored
@ -1,395 +0,0 @@
|
||||
/* -*- mode: C -*- */
|
||||
/* ----------------------------------------------------------------------------
|
||||
libconfig - A library for processing structured configuration files
|
||||
Copyright (C) 2005-2010 Mark A Lindner
|
||||
|
||||
This file is part of libconfig.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public License
|
||||
as published by the Free Software Foundation; either version 2.1 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
%defines
|
||||
%output="y.tab.c"
|
||||
%pure-parser
|
||||
%lex-param{void *scanner}
|
||||
%parse-param{void *scanner}
|
||||
%parse-param{struct parse_context *ctx}
|
||||
%parse-param{struct scan_context *scan_ctx}
|
||||
|
||||
%{
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "libconfig.h"
|
||||
#ifdef WIN32
|
||||
#include "wincompat.h"
|
||||
|
||||
/* prevent warnings about redefined malloc/free in generated code: */
|
||||
#ifndef _STDLIB_H
|
||||
#define _STDLIB_H
|
||||
#endif
|
||||
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
#include "parsectx.h"
|
||||
#include "scanctx.h"
|
||||
|
||||
/* these delcarations are provided to suppress compiler warnings */
|
||||
extern int libconfig_yylex();
|
||||
extern int libconfig_yyget_lineno();
|
||||
|
||||
static const char *err_array_elem_type = "mismatched element type in array";
|
||||
static const char *err_duplicate_setting = "duplicate setting name";
|
||||
|
||||
#define _delete(P) free((void *)(P))
|
||||
|
||||
#define IN_ARRAY() \
|
||||
(ctx->parent && (ctx->parent->type == CONFIG_TYPE_ARRAY))
|
||||
|
||||
#define IN_LIST() \
|
||||
(ctx->parent && (ctx->parent->type == CONFIG_TYPE_LIST))
|
||||
|
||||
static void capture_parse_pos(void *scanner, struct scan_context *scan_ctx,
|
||||
config_setting_t *setting)
|
||||
{
|
||||
setting->line = (unsigned int)libconfig_yyget_lineno(scanner);
|
||||
setting->file = scanctx_current_filename(scan_ctx);
|
||||
}
|
||||
|
||||
#define CAPTURE_PARSE_POS(S) \
|
||||
capture_parse_pos(scanner, scan_ctx, (S))
|
||||
|
||||
void libconfig_yyerror(void *scanner, struct parse_context *ctx,
|
||||
struct scan_context *scan_ctx, char const *s)
|
||||
{
|
||||
if(ctx->config->error_text) return;
|
||||
ctx->config->error_line = libconfig_yyget_lineno(scanner);
|
||||
ctx->config->error_text = s;
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%union
|
||||
{
|
||||
int ival;
|
||||
long long llval;
|
||||
double fval;
|
||||
char *sval;
|
||||
}
|
||||
|
||||
%token <ival> TOK_BOOLEAN TOK_INTEGER TOK_HEX
|
||||
%token <llval> TOK_INTEGER64 TOK_HEX64
|
||||
%token <fval> TOK_FLOAT
|
||||
%token <sval> TOK_STRING TOK_NAME
|
||||
%token TOK_EQUALS TOK_NEWLINE TOK_ARRAY_START TOK_ARRAY_END TOK_LIST_START TOK_LIST_END TOK_COMMA TOK_GROUP_START TOK_GROUP_END TOK_SEMICOLON TOK_GARBAGE TOK_ERROR
|
||||
|
||||
%%
|
||||
|
||||
configuration:
|
||||
/* empty */
|
||||
| setting_list
|
||||
;
|
||||
|
||||
setting_list:
|
||||
setting
|
||||
| setting_list setting
|
||||
;
|
||||
|
||||
setting_list_optional:
|
||||
/* empty */
|
||||
| setting_list
|
||||
;
|
||||
|
||||
setting_terminator:
|
||||
/* empty */
|
||||
| TOK_SEMICOLON
|
||||
| TOK_COMMA
|
||||
;
|
||||
|
||||
setting:
|
||||
TOK_NAME
|
||||
{
|
||||
ctx->setting = config_setting_add(ctx->parent, $1, CONFIG_TYPE_NONE);
|
||||
|
||||
if(ctx->setting == NULL)
|
||||
{
|
||||
libconfig_yyerror(scanner, ctx, scan_ctx, err_duplicate_setting);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
CAPTURE_PARSE_POS(ctx->setting);
|
||||
}
|
||||
}
|
||||
|
||||
TOK_EQUALS value setting_terminator
|
||||
;
|
||||
|
||||
array:
|
||||
TOK_ARRAY_START
|
||||
{
|
||||
if(IN_LIST())
|
||||
{
|
||||
ctx->parent = config_setting_add(ctx->parent, NULL, CONFIG_TYPE_ARRAY);
|
||||
CAPTURE_PARSE_POS(ctx->parent);
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx->setting->type = CONFIG_TYPE_ARRAY;
|
||||
ctx->parent = ctx->setting;
|
||||
ctx->setting = NULL;
|
||||
}
|
||||
}
|
||||
simple_value_list_optional
|
||||
TOK_ARRAY_END
|
||||
{
|
||||
if(ctx->parent)
|
||||
ctx->parent = ctx->parent->parent;
|
||||
}
|
||||
;
|
||||
|
||||
list:
|
||||
TOK_LIST_START
|
||||
{
|
||||
if(IN_LIST())
|
||||
{
|
||||
ctx->parent = config_setting_add(ctx->parent, NULL, CONFIG_TYPE_LIST);
|
||||
CAPTURE_PARSE_POS(ctx->parent);
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx->setting->type = CONFIG_TYPE_LIST;
|
||||
ctx->parent = ctx->setting;
|
||||
ctx->setting = NULL;
|
||||
}
|
||||
}
|
||||
value_list_optional
|
||||
TOK_LIST_END
|
||||
{
|
||||
if(ctx->parent)
|
||||
ctx->parent = ctx->parent->parent;
|
||||
}
|
||||
;
|
||||
|
||||
value:
|
||||
simple_value
|
||||
| array
|
||||
| list
|
||||
| group
|
||||
;
|
||||
|
||||
string:
|
||||
TOK_STRING { parsectx_append_string(ctx, $1); free($1); }
|
||||
| string TOK_STRING { parsectx_append_string(ctx, $2); free($2); }
|
||||
;
|
||||
|
||||
simple_value:
|
||||
TOK_BOOLEAN
|
||||
{
|
||||
if(IN_ARRAY() || IN_LIST())
|
||||
{
|
||||
config_setting_t *e = config_setting_set_bool_elem(ctx->parent, -1,
|
||||
(int)$1);
|
||||
|
||||
if(! e)
|
||||
{
|
||||
libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
CAPTURE_PARSE_POS(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
config_setting_set_bool(ctx->setting, (int)$1);
|
||||
}
|
||||
| TOK_INTEGER
|
||||
{
|
||||
if(IN_ARRAY() || IN_LIST())
|
||||
{
|
||||
config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, $1);
|
||||
if(! e)
|
||||
{
|
||||
libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
config_setting_set_format(e, CONFIG_FORMAT_DEFAULT);
|
||||
CAPTURE_PARSE_POS(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
config_setting_set_int(ctx->setting, $1);
|
||||
config_setting_set_format(ctx->setting, CONFIG_FORMAT_DEFAULT);
|
||||
}
|
||||
}
|
||||
| TOK_INTEGER64
|
||||
{
|
||||
if(IN_ARRAY() || IN_LIST())
|
||||
{
|
||||
config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, $1);
|
||||
if(! e)
|
||||
{
|
||||
libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
config_setting_set_format(e, CONFIG_FORMAT_DEFAULT);
|
||||
CAPTURE_PARSE_POS(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
config_setting_set_int64(ctx->setting, $1);
|
||||
config_setting_set_format(ctx->setting, CONFIG_FORMAT_DEFAULT);
|
||||
}
|
||||
}
|
||||
| TOK_HEX
|
||||
{
|
||||
if(IN_ARRAY() || IN_LIST())
|
||||
{
|
||||
config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, $1);
|
||||
if(! e)
|
||||
{
|
||||
libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
config_setting_set_format(e, CONFIG_FORMAT_HEX);
|
||||
CAPTURE_PARSE_POS(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
config_setting_set_int(ctx->setting, $1);
|
||||
config_setting_set_format(ctx->setting, CONFIG_FORMAT_HEX);
|
||||
}
|
||||
}
|
||||
| TOK_HEX64
|
||||
{
|
||||
if(IN_ARRAY() || IN_LIST())
|
||||
{
|
||||
config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, $1);
|
||||
if(! e)
|
||||
{
|
||||
libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
config_setting_set_format(e, CONFIG_FORMAT_HEX);
|
||||
CAPTURE_PARSE_POS(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
config_setting_set_int64(ctx->setting, $1);
|
||||
config_setting_set_format(ctx->setting, CONFIG_FORMAT_HEX);
|
||||
}
|
||||
}
|
||||
| TOK_FLOAT
|
||||
{
|
||||
if(IN_ARRAY() || IN_LIST())
|
||||
{
|
||||
config_setting_t *e = config_setting_set_float_elem(ctx->parent, -1, $1);
|
||||
if(! e)
|
||||
{
|
||||
libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
CAPTURE_PARSE_POS(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
config_setting_set_float(ctx->setting, $1);
|
||||
}
|
||||
| string
|
||||
{
|
||||
if(IN_ARRAY() || IN_LIST())
|
||||
{
|
||||
const char *s = parsectx_take_string(ctx);
|
||||
config_setting_t *e = config_setting_set_string_elem(ctx->parent, -1, s);
|
||||
_delete(s);
|
||||
|
||||
if(! e)
|
||||
{
|
||||
libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
CAPTURE_PARSE_POS(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *s = parsectx_take_string(ctx);
|
||||
config_setting_set_string(ctx->setting, s);
|
||||
_delete(s);
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
value_list:
|
||||
value
|
||||
| value_list TOK_COMMA value
|
||||
;
|
||||
|
||||
value_list_optional:
|
||||
/* empty */
|
||||
| value_list
|
||||
;
|
||||
|
||||
simple_value_list:
|
||||
simple_value
|
||||
| simple_value_list TOK_COMMA simple_value
|
||||
;
|
||||
|
||||
simple_value_list_optional:
|
||||
/* empty */
|
||||
| simple_value_list
|
||||
;
|
||||
|
||||
group:
|
||||
TOK_GROUP_START
|
||||
{
|
||||
if(IN_LIST())
|
||||
{
|
||||
ctx->parent = config_setting_add(ctx->parent, NULL, CONFIG_TYPE_GROUP);
|
||||
CAPTURE_PARSE_POS(ctx->parent);
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx->setting->type = CONFIG_TYPE_GROUP;
|
||||
ctx->parent = ctx->setting;
|
||||
ctx->setting = NULL;
|
||||
}
|
||||
}
|
||||
setting_list_optional
|
||||
TOK_GROUP_END
|
||||
{
|
||||
if(ctx->parent)
|
||||
ctx->parent = ctx->parent->parent;
|
||||
}
|
||||
;
|
||||
|
||||
%%
|
0
3rdparty/libconfig/libconfig-1.4.8
vendored
0
3rdparty/libconfig/libconfig-1.4.8
vendored
191
3rdparty/libconfig/scanner.l
vendored
191
3rdparty/libconfig/scanner.l
vendored
@ -1,191 +0,0 @@
|
||||
/* -*- mode: C -*- */
|
||||
/* --------------------------------------------------------------------------
|
||||
libconfig - A library for processing structured configuration files
|
||||
Copyright (C) 2005-2010 Mark A Lindner
|
||||
|
||||
This file is part of libconfig.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public License
|
||||
as published by the Free Software Foundation; either version 2.1 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
%option nounistd
|
||||
%option reentrant
|
||||
%option noyywrap
|
||||
%option yylineno
|
||||
%option nounput
|
||||
%option bison-bridge
|
||||
%option header-file="scanner.h"
|
||||
%option outfile="lex.yy.c"
|
||||
%option extra-type="struct scan_context *"
|
||||
|
||||
%{
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4996)
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include "grammar.h"
|
||||
#include "wincompat.h"
|
||||
#include "parsectx.h"
|
||||
#include "scanctx.h"
|
||||
|
||||
#define YY_NO_INPUT // Suppress generation of useless input() function
|
||||
|
||||
static unsigned long long fromhex(const char *s)
|
||||
{
|
||||
#ifdef __MINGW32__
|
||||
|
||||
/* MinGW's strtoull() seems to be broken; it only returns the lower
|
||||
* 32 bits...
|
||||
*/
|
||||
|
||||
const char *p = s;
|
||||
unsigned long long val = 0;
|
||||
|
||||
if(*p != '0')
|
||||
return(0);
|
||||
|
||||
++p;
|
||||
|
||||
if(*p != 'x' && *p != 'X')
|
||||
return(0);
|
||||
|
||||
for(++p; isxdigit(*p); ++p)
|
||||
{
|
||||
val <<= 4;
|
||||
val |= ((*p < 'A') ? (*p & 0xF) : (9 + (*p & 0x7)));
|
||||
}
|
||||
|
||||
return(val);
|
||||
|
||||
#else /* ! __MINGW32__ */
|
||||
|
||||
return(strtoull(s, NULL, 16));
|
||||
|
||||
#endif /* __MINGW32__ */
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
true [Tt][Rr][Uu][Ee]
|
||||
false [Ff][Aa][Ll][Ss][Ee]
|
||||
name [A-Za-z\*][-A-Za-z0-9_\*]*
|
||||
integer [-+]?[0-9]+
|
||||
integer64 [-+]?[0-9]+L(L)?
|
||||
hex 0[Xx][0-9A-Fa-f]+
|
||||
hex64 0[Xx][0-9A-Fa-f]+L(L)?
|
||||
hexchar \\[Xx][0-9A-Fa-f]{2}
|
||||
float ([-+]?([0-9]*)?\.[0-9]*([eE][-+]?[0-9]+)?)|([-+]?([0-9]+)(\.[0-9]*)?[eE][-+]?[0-9]+)
|
||||
comment (#|\/\/).*$
|
||||
include_open ^[ \t]*@include[ \t]+\"
|
||||
|
||||
%x COMMENT STRING INCLUDE
|
||||
|
||||
%%
|
||||
|
||||
\/\* { BEGIN COMMENT; }
|
||||
<COMMENT>\*\/ { BEGIN INITIAL; }
|
||||
<COMMENT>. { /* ignore */ }
|
||||
<COMMENT>\n { /* ignore */ }
|
||||
|
||||
\" { BEGIN STRING; }
|
||||
<STRING>[^\"\\]+ { scanctx_append_string(yyextra, yytext); }
|
||||
<STRING>\\n { scanctx_append_string(yyextra, "\n"); }
|
||||
<STRING>\\r { scanctx_append_string(yyextra, "\r"); }
|
||||
<STRING>\\t { scanctx_append_string(yyextra, "\t"); }
|
||||
<STRING>\\f { scanctx_append_string(yyextra, "\f"); }
|
||||
<STRING>\\\\ { scanctx_append_string(yyextra, "\\"); }
|
||||
<STRING>\\\" { scanctx_append_string(yyextra, "\""); }
|
||||
<STRING>{hexchar} {
|
||||
char c[2] = { (char)(strtol(yytext + 2, NULL, 16) & 0xFF),
|
||||
0 };
|
||||
scanctx_append_string(yyextra, c);
|
||||
}
|
||||
<STRING>\\ { scanctx_append_string(yyextra, "\\"); }
|
||||
<STRING>\" {
|
||||
yylval->sval = scanctx_take_string(yyextra);
|
||||
BEGIN INITIAL;
|
||||
return(TOK_STRING);
|
||||
}
|
||||
|
||||
{include_open} { BEGIN INCLUDE; }
|
||||
<INCLUDE>[^\"\\]+ { scanctx_append_string(yyextra, yytext); }
|
||||
<INCLUDE>\\\\ { scanctx_append_string(yyextra, "\\"); }
|
||||
<INCLUDE>\\\" { scanctx_append_string(yyextra, "\""); }
|
||||
<INCLUDE>\" {
|
||||
const char *error;
|
||||
FILE *fp = scanctx_push_include(yyextra,
|
||||
(void *)YY_CURRENT_BUFFER,
|
||||
&error);
|
||||
if(fp)
|
||||
{
|
||||
yyin = fp;
|
||||
yy_switch_to_buffer(
|
||||
yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner),
|
||||
yyscanner);
|
||||
}
|
||||
else
|
||||
{
|
||||
yyextra->config->error_text = error;
|
||||
yyextra->config->error_file = scanctx_current_filename(
|
||||
yyextra);
|
||||
yyextra->config->error_line = libconfig_yyget_lineno(
|
||||
yyscanner);
|
||||
return TOK_ERROR;
|
||||
}
|
||||
BEGIN INITIAL;
|
||||
}
|
||||
|
||||
\n|\r|\f { /* ignore */ }
|
||||
[ \t]+ { /* ignore */ }
|
||||
|
||||
\=|\: { return(TOK_EQUALS); }
|
||||
, { return(TOK_COMMA); }
|
||||
\{ { return(TOK_GROUP_START); }
|
||||
\} { return(TOK_GROUP_END); }
|
||||
{true} { yylval->ival = 1; return(TOK_BOOLEAN); }
|
||||
{false} { yylval->ival = 0; return(TOK_BOOLEAN); }
|
||||
{name} { yylval->sval = yytext; return(TOK_NAME); }
|
||||
{float} { yylval->fval = atof(yytext); return(TOK_FLOAT); }
|
||||
{integer} { yylval->ival = atoi(yytext); return(TOK_INTEGER); }
|
||||
{integer64} { yylval->llval = atoll(yytext); return(TOK_INTEGER64); }
|
||||
{hex} {
|
||||
yylval->ival = strtoul(yytext, NULL, 16);
|
||||
return(TOK_HEX);
|
||||
}
|
||||
{hex64} { yylval->llval = fromhex(yytext); return(TOK_HEX64); }
|
||||
\[ { return(TOK_ARRAY_START); }
|
||||
\] { return(TOK_ARRAY_END); }
|
||||
\( { return(TOK_LIST_START); }
|
||||
\) { return(TOK_LIST_END); }
|
||||
; { return(TOK_SEMICOLON); }
|
||||
{comment} { /* ignore */ }
|
||||
. { return(TOK_GARBAGE); }
|
||||
|
||||
<<EOF>> {
|
||||
YY_BUFFER_STATE buf = (YY_BUFFER_STATE)scanctx_pop_include(
|
||||
yyextra);
|
||||
if(buf)
|
||||
{
|
||||
yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner);
|
||||
yy_switch_to_buffer(buf, yyscanner);
|
||||
}
|
||||
else
|
||||
yyterminate();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user