summaryrefslogtreecommitdiffstats
path: root/parser.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-08-12 20:35:04 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-08-12 20:35:04 -0700
commit80023f287c52876b82af43027dd4605ab939d006 (patch)
tree74fba3604b31bd2c80541503ed698257515630c0 /parser.h
parentb29e871f63bb13278220ade37209c9b11a3d64d6 (diff)
downloadtxr-80023f287c52876b82af43027dd4605ab939d006.tar.gz
txr-80023f287c52876b82af43027dd4605ab939d006.tar.bz2
txr-80023f287c52876b82af43027dd4605ab939d006.zip
Use new pushback token priming for single regex parse.
* parser.h (enum prime_parser): New enum. (prime_parser, prime_scanner, parse): Declarations updated with new argument. * parser.c (prime_parser): New argument of enum prime_parser type Select appropriate secret token for regex and Lisp case. Pass prime selector down to prime_scanner. (regex_parse): Do not prepend secret escape to string. Do not use parse_once function; instead do the parser init and cleanup here and use the parse function. (lisp_parse): Pass new argument to parse, configuring the parser to be primed for Lisp parsing. * parser.l (grammar): Rule producing SECRET_ESCAPE_R removed. (prime_scanner): New argument. Pop the scanner state down to INITIAL. Then unconditionally switch to appopriate state based on priming configuration. * parser.y (parse): New argument for priming selection, passed down to prime parser.
Diffstat (limited to 'parser.h')
-rw-r--r--parser.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/parser.h b/parser.h
index bedebfbe..fe8e4413 100644
--- a/parser.h
+++ b/parser.h
@@ -56,6 +56,8 @@ struct parser {
};
#endif
+enum prime_parser { prime_lisp, prime_regex };
+
extern const wchar_t *spec_file;
extern val form_to_ln_hash;
extern val parser_s;
@@ -76,10 +78,10 @@ void yyset_extra(parser_t *, yyscan_t);
void yyset_hold_char(yyscan_t, int);
void parser_l_init(void);
void open_txr_file(val spec_file, val *txr_lisp_p, val *name, val *stream);
-void prime_parser(parser_t *, val name);
-void prime_scanner(scanner_t *);
+void prime_parser(parser_t *, val name, enum prime_parser);
+void prime_scanner(scanner_t *, enum prime_parser);
int parse_once(val stream, val name, parser_t *parser);
-int parse(parser_t *parser, val name);
+int parse(parser_t *parser, val name, enum prime_parser);
val source_loc(val form);
val source_loc_str(val form, val alt);
val rlset(val form, val info);