1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/*
* Data structures and declarations for yacc/bison based json parser.
* External to .y file for communication and use within the binding layer.
*/
#include "tclpre9compat.h"
struct context {
/*
* General state.
*/
Tcl_Interp *I; /* Tcl interpreter we are in. */
int result; /* Tcl result of the parse.
**
* NOTE: A value of TCL_OK (set when
* successfully reducing the main rule)
* causes the lexer to return <<EOF>> from
* then on, preventing parsing beyond a
* single json structure.
*/
/*
* Lexer Input.
*/
const char *text; /* Text to parse */
Tcl_Size remaining; /* Number of characters left to parse. */
/*
* Lexer -> Parser communication.
*/
Tcl_Obj *obj; /* Tcl value of the last returned token. */
int has_error;
};
/*
* Note: The parser function automatically sets the Tcl_Interp (See
* field "I") result to the parse result, or an error message.
*/
extern void
jsonparse (struct context *);
#if 0
extern int
jsonlex(struct context *);
#endif
extern void
jsonskip (struct context *);
/*
* Default: Tracing off.
*/
#ifndef JSON_DEBUG
#define JSON_DEBUG 0
#endif
#if JSON_DEBUG
#define TRACE(x) do { printf x ; fflush (stdout); } while (0)
#else
#define TRACE(x)
#endif
|