parse-from-file facility
This commit is contained in:
parent
c93cef8c8c
commit
f192c96650
|
@ -4,6 +4,7 @@
|
|||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
#include <setjmp.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "picconf.h"
|
||||
#include "picrin/value.h"
|
||||
|
@ -76,7 +77,8 @@ pic_value pic_intern_cstr(pic_state *, const char *);
|
|||
pic_value pic_str_new(pic_state *, const char *, size_t);
|
||||
pic_value pic_str_new_cstr(pic_state *, const char *);
|
||||
|
||||
bool pic_parse(pic_state *, const char *, pic_value *);
|
||||
bool pic_parse_file(pic_state *, FILE *file, pic_value *);
|
||||
bool pic_parse_cstr(pic_state *, const char *, pic_value *);
|
||||
|
||||
pic_value pic_run(pic_state *, struct pic_proc *, pic_value);
|
||||
struct pic_proc *pic_codegen(pic_state *, pic_value);
|
||||
|
|
27
src/parse.y
27
src/parse.y
|
@ -21,6 +21,7 @@ void yyerror(struct parser_control *, const char *);
|
|||
int yylex();
|
||||
int yylex_();
|
||||
void yylex_init();
|
||||
void yyset_in();
|
||||
void yy_scan_string();
|
||||
void yylex_destroy();
|
||||
%}
|
||||
|
@ -175,7 +176,31 @@ yylex(YYSTYPE *yylvalp, struct parser_control *p)
|
|||
}
|
||||
|
||||
bool
|
||||
pic_parse(pic_state *pic, const char *str, pic_value *v)
|
||||
pic_parse_file(pic_state *pic, FILE *file, pic_value *v)
|
||||
{
|
||||
struct parser_control p;
|
||||
|
||||
p.pic = pic;
|
||||
p.incomp = false;
|
||||
p.yynerrs = 0;
|
||||
|
||||
yylex_init(&p.yyscanner);
|
||||
yyset_in(file, p.yyscanner);
|
||||
yyparse(&p);
|
||||
yylex_destroy(p.yyscanner);
|
||||
|
||||
if (p.yynerrs > 0) {
|
||||
p.value = pic_undef_value();
|
||||
}
|
||||
|
||||
if (! p.incomp) {
|
||||
*v = p.value;
|
||||
}
|
||||
return ! p.incomp;
|
||||
}
|
||||
|
||||
bool
|
||||
pic_parse_cstr(pic_state *pic, const char *str, pic_value *v)
|
||||
{
|
||||
struct parser_control p;
|
||||
|
||||
|
|
|
@ -95,7 +95,7 @@ main(int argc, char *argv[], char **envp)
|
|||
strcat(code, line);
|
||||
|
||||
/* read */
|
||||
r = pic_parse(pic, code, &v);
|
||||
r = pic_parse_cstr(pic, code, &v);
|
||||
if (! r) { /* wait for more input */
|
||||
goto next;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue