]> begriffs open source - sa-parse/blob - src/lisp_driver.c
Prefixed, reentrant CSV parser
[sa-parse] / src / lisp_driver.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define YYSTYPE LISPSTYPE
5 #include "lisp.tab.h"
6 #include "lisp.lex.h"
7
8 void sexpr_print(struct sexpr* s, unsigned depth)
9 {
10         for (unsigned i = 0; i < depth; i++)
11                 printf("  ");
12         switch (s->type)
13         {
14                 case SEXPR_ID:
15                         puts(s->value.id);
16                         break;
17                 case SEXPR_NUM:
18                         printf("%d\n", s->value.num);
19                         break;
20                 case SEXPR_PAIR:
21                         puts(".");
22                         sexpr_print(s->left, depth+1);
23                         sexpr_print(s->right, depth+1);
24                         break;
25                 case SEXPR_NIL:
26                         puts("()");
27                         break;
28                 default:
29                         abort();
30         }
31 }
32
33 int main(void)
34 {
35         int i;
36         struct sexpr *expr;
37         yyscan_t scanner;
38
39         if ((i = lisplex_init(&scanner)) != 0)
40                 exit(i);
41
42         int e = lispparse(&expr, scanner);
43         printf("Code = %d\n", e);
44         if (e == 0 /* success */)
45         {
46                 sexpr_print(expr, 0);
47                 sexpr_free(expr);
48         }
49
50         lisplex_destroy(scanner);
51         return 0;
52 }