chiark / gitweb /
debian: Update for new version.
[skel] / skelrc.y
1 ;;; -*-emacs-lisp-*-
2
3 (skelrc-force-mode 'c-mode)
4
5 (setq skel-alist
6       (append
7        `((new-comment . "/*")
8          (cont-comment . " *")
9          (end-comment . " */")
10          (block-start . "/*")
11          (block-banner-knob . "* ")
12          (block-banner-end . "*/")
13          (block-end . "\n */")
14          (preamble . "[[c-stuff]][[yacc-stuff]][[c-code]]")
15
16          ;; --- Heavy-duty C preamble to the parser ---
17
18          (c-stuff . "[[includes]][[macros]][[depends]][[references]]")
19          (includes . "[[includes-banner]]\n%{\n\n[[headers]]")
20          (includes-banner . (skelrc-banner "Header files"))
21          (headers . "")
22          (macros . "[[macros-banner]]\n\n[[macros-body]]")
23          (macros-banner . (skelrc-banner "Parser control macros"))
24          (macros-body . "#define YYDEBUG 1\n#define YYERROR_VERBOSE\n\n")
25          (depends . "[[deps-banner]]\n\n[[deps-body]]")
26          (deps-banner . (skelrc-banner "External dependencies"))
27          (deps-body . "extern int yylex(void);\n\n")
28          (references . "[[refs-banner]]\n\n[[refs-body]]")
29          (refs-banner . (skelrc-banner "Forward references"))
30          (refs-body . "static int yyerror(const char */*e*/);\n\n")
31
32          ;; --- Yacc preamble and main parser ---
33
34          (yacc-stuff . "[[yacc-decls]][[tokens]][[nonterms]][[yacc-parser]]")
35
36          (yacc-decls . "[[decls-banner]]%}\n\n[[decls-body]]")
37          (decls-banner . (skelrc-banner "Yacc declarations"))
38          (decls-body . ,(concat "%expect 0\n"
39                                 "%start ...\n"
40                                 "\n"
41                                 "/* --- Stack type --- */\n"
42                                 "\n"
43                                 "%union {\n"
44                                 "}\n"
45                                 "\n"))
46          (tokens . "[[toks-banner]]\n\n")
47          (toks-banner . (skelrc-banner "Token declarations"))
48          (nonterms . "[[nonterms-banner]]\n\n")
49          (nonterms-banner . (skelrc-banner "Nonterminal declarations"))
50
51          (yacc-parser . "[[parser-banner]]\n%%\n\n")
52          (parser-banner . (skelrc-banner "Grammar rules"))
53
54          ;; --- C code stuck on the end ---
55
56          (c-code . "[[c-code-banner]]\n%%\n\n[[yyerror]]")
57          (c-code-banner . (skelrc-banner "C code"))
58          (yyerror . ,(concat "/* --- @yyerror@ --- *\n"
59                              " *\n"
60                              " * Arguments:\t@const char *e@ = "
61                              "error message text\n"
62                              " *\n"
63                              " * Returns:\t---\n"
64                              " *\n"
65                              " * Use:\t\tHandles errors reported by "
66                              "the parser.\n"
67                              " */\n"
68                              "\n"
69                              "static void yyerror(const char *e)\n"
70                              "{\n"
71                              "  fprintf(stderr, \"%s\\n\", e);\n"
72                              "}\n"
73                              "\n")))
74        skel-alist))