lac : 152ce469c0bf3d38478c9b7c089e6eb0af67710f
1: %include { #include <lac.h> }
2: %include { #include <assert.h> }
3: %include { #include "private.h" }
4: %token_type { lreg_t }
5: %type sexpr { lreg_t }
6: %extra_argument { struct parse_cb *cb }
7:
8: %syntax_error {
9: raise_exception("syntax error", NIL);
10: }
11:
12: input ::= sexprlist ENDPARSE.
13: input ::= error.
14:
15: sexprlist ::= sexprlist sexpr(A). { if (cb != NULL) { cb->res = cb->fn(A, cb->opq); } }
16: sexprlist ::= . { /* */ }
17:
18: sexpr(A) ::= atom(B). { A = B; }
19: sexpr(A) ::= QUOTE sexpr(B). { A = cons(sym_quote, cons(B, NIL)); }
20: sexpr(A) ::= QUASI sexpr(B). { A = cons(sym_quasiquote, cons(B, NIL)); }
21: sexpr(A) ::= COMMA_AT sexpr(B). { A = cons(sym_splice, cons(B, NIL)); }
22: sexpr(A) ::= COMMA sexpr(B). { A = cons(sym_unquote, cons(B, NIL)); }
23: sexpr(A) ::= OPAREN sexpr(B) DOT sexpr(C) CPAREN. { A = cons(B,C); }
24: sexpr(A) ::= OPAREN CPAREN. { A = NIL; }
25: sexpr(A) ::= list(B). { A = B; }
26:
27: list(A) ::= OPAREN sexpr(B) listelem(C) CPAREN. { A = cons(B,C); }
28:
29: listelem(A) ::= sexpr(B) listelem(C). { A = cons(B, C); }
30: listelem(A) ::= . { A = NIL; }
31:
32: atom(A) ::= SYMBOL(B). { A = B; }
33: atom(A) ::= STRING(B). { A = B; }
34: atom(A) ::= INTEGER(B). { A = B; }
35: atom(A) ::= NIHIL(B). { A = B; }
Generated by git2html.