summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y22
1 files changed, 21 insertions, 1 deletions
diff --git a/parser.y b/parser.y
index d95b3ed5..ceb1801b 100644
--- a/parser.y
+++ b/parser.y
@@ -1428,7 +1428,7 @@ void yybadtoken(parser_t *parser, int tok, val context)
yyerrorf(scnr, lit("unexpected ~s"), chr(tok), nao);
}
-int parse(val stream, val name, parser_t *parser)
+int parse_once(val stream, val name, parser_t *parser)
{
int res;
yyscan_t scanner;
@@ -1450,3 +1450,23 @@ int parse(val stream, val name, parser_t *parser)
return res;
}
+
+int parse(parser_t *parser)
+{
+ int res;
+ yyscan_t scanner;
+
+ parser->errors = 0;
+ parser->prepared_msg = nil;
+ parser->syntax_tree = nil;
+ yylex_init(&scanner);
+ parser->scanner = convert(scanner_t *, scanner);
+
+ yyset_extra(parser, parser->scanner);
+
+ res = yyparse(parser->scanner, parser);
+
+ yylex_destroy(parser->scanner);
+
+ return res;
+}