3 (skelrc-force-mode 'c-mode)
11 (block-banner-knob . "* ")
12 (block-banner-end . "*/")
14 (preamble . "[[c-stuff]][[yacc-stuff]][[c-code]]")
16 ;; --- Heavy-duty C preamble to the parser ---
18 (c-stuff . "[[includes]][[macros]][[depends]][[references]]")
19 (includes . "[[includes-banner]]\n%{\n\n[[headers]]")
20 (includes-banner . (skelrc-banner "Header files"))
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")
32 ;; --- Yacc preamble and main parser ---
34 (yacc-stuff . "[[yacc-decls]][[tokens]][[nonterms]][[yacc-parser]]")
36 (yacc-decls . "[[decls-banner]]%}\n\n[[decls-body]]")
37 (decls-banner . (skelrc-banner "Yacc declarations"))
38 (decls-body . ,(concat "%expect 0\n"
41 "/* --- Stack type --- */\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"))
51 (yacc-parser . "[[parser-banner]]\n%%\n\n")
52 (parser-banner . (skelrc-banner "Grammar rules"))
54 ;; --- C code stuck on the end ---
56 (c-code . "[[c-code-banner]]\n%%\n\n[[yyerror]]")
57 (c-code-banner . (skelrc-banner "C code"))
58 (yyerror . ,(concat "/* --- @yyerror@ --- *\n"
60 " * Arguments:\t@const char *e@ = "
61 "error message text\n"
65 " * Use:\t\tHandles errors reported by "
69 "static void yyerror(const char *e)\n"
71 " fprintf(stderr, \"%s\\n\", e);\n"