-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmodule.c
57 lines (47 loc) · 840 Bytes
/
module.c
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
#include "module.h"
#include "parser.tab.h"
#include "scanner.h"
module *
new_module_from_stdin()
{
module *mod = (module *) malloc(sizeof(module));
mod->src = stdin;
return mod;
}
module *
new_module_from_file(const char *filename)
{
module *mod = (module *) malloc(sizeof(module));
mod->src = fopen(filename, "r");
return mod;
}
module *
new_module_from_string(char *src)
{
module *mod = (module *) malloc(sizeof(module));
mod->src = fmemopen(src, strlen(src)+1, "r");
return mod;
}
void
delete_module(module *mod)
{
if (mod->root != NULL) {
delete_sexp_node(mod->root);
}
fclose(mod->src);
free(mod);
}
int
parse_module(module *mod)
{
yyscan_t sc;
int res;
yylex_init(&sc);
yyset_in(mod->src, sc);
res = yyparse(sc, mod);
yylex_destroy(sc);
if (res == 0) {
print_node_sexp(mod->root);
}
return res;
}