From 5d42362d611c9103a07f768d8d2bcc1911e0f41b Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 28 May 2021 21:07:46 -0700 Subject: json: get-json function. * eval.c (eval_init): get-json intrinsic registered. * parser.c (prime_parser): Handle prime_json. (lisp_parse_impl): Take enum prime_parser argument directly instead of the interactive flag. (lisp_parse, nread, iread): Pass appropriate prime_parser value instead of the original flag. (get_json): New function. Like nread, but passes prime_json. * parser.h (enum prime_parser): New constant, prime_json. (get_json): Declared. * parser.l (prime_scanner): Handle prime_json. * parser.y (SECRET_ESCAPE_J): New terminal symbol. (spec): New productions around SECRET_ESCAPE_J for parsing JSON. * lex.yy.c.shipped, y.tab.c.shipped, y.tab.h.shipped: Updated. * txr.1: Documented. * share/txr/stdlib/doc-syms.tl: Updated. --- parser.y | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'parser.y') diff --git a/parser.y b/parser.y index c50550fe..1ee48be0 100644 --- a/parser.y +++ b/parser.y @@ -120,7 +120,7 @@ INLINE val expand_form_ver(val form, int ver) %token HASH_BACKSLASH HASH_SLASH DOTDOT HASH_H HASH_S HASH_R HASH_J %token HASH_SEMI HASH_B_QUOTE HASH_N HASH_T %token WORDS WSPLICE QWORDS QWSPLICE -%token SECRET_ESCAPE_R SECRET_ESCAPE_E SECRET_ESCAPE_I +%token SECRET_ESCAPE_R SECRET_ESCAPE_E SECRET_ESCAPE_I SECRET_ESCAPE_J %token OLD_DOTDOT %token NUMBER METANUM JSKW @@ -195,6 +195,16 @@ spec : clauses_opt { set_syntax_tree(parser, $1); } yybadtok(yychar, nil); parser->syntax_tree = nil; } } + | SECRET_ESCAPE_J json_val { set_syntax_tree(parser, $2); + YYACCEPT; } + byacc_fool { internal_error("notreached"); } + | SECRET_ESCAPE_J { if (yychar == YYEOF) { + parser->syntax_tree = nao; + YYACCEPT; + } else { + yybadtok(yychar, nil); + parser->syntax_tree = nil; + } } | error '\n' { parser->syntax_tree = nil; if (parser->errors >= 8) YYABORT; -- cgit v1.2.3