;;; -*-emacs-lisp-*- (skelrc-force-mode 'c-mode) (setq skel-alist (append `((new-comment . "/*") (cont-comment . " *") (end-comment . " */") (block-start . "/*") (block-banner-knob . "* ") (block-banner-end . "*/") (block-end . "\n */") (preamble . "[[c-stuff]][[yacc-stuff]][[c-code]]") ;; --- Heavy-duty C preamble to the parser --- (c-stuff . "[[includes]][[macros]][[depends]][[references]]") (includes . "[[includes-banner]]\n%{\n\n[[headers]]") (includes-banner . (skelrc-banner "Header files")) (headers . "") (macros . "[[macros-banner]]\n\n[[macros-body]]") (macros-banner . (skelrc-banner "Parser control macros")) (macros-body . "#define YYDEBUG 1\n#define YYERROR_VERBOSE\n\n") (depends . "[[deps-banner]]\n\n[[deps-body]]") (deps-banner . (skelrc-banner "External dependencies")) (deps-body . "extern int yylex(void);\n\n") (references . "[[refs-banner]]\n\n[[refs-body]]") (refs-banner . (skelrc-banner "Forward references")) (refs-body . "static int yyerror(const char */*e*/);\n\n") ;; --- Yacc preamble and main parser --- (yacc-stuff . "[[yacc-decls]][[tokens]][[nonterms]][[yacc-parser]]") (yacc-decls . "[[decls-banner]]%}\n\n[[decls-body]]") (decls-banner . (skelrc-banner "Yacc declarations")) (decls-body . ,(concat "%expect 0\n" "%start ...\n" "\n" "/* --- Stack type --- */\n" "\n" "%union {\n" "}\n" "\n")) (tokens . "[[toks-banner]]\n\n") (toks-banner . (skelrc-banner "Token declarations")) (nonterms . "[[nonterms-banner]]\n\n") (nonterms-banner . (skelrc-banner "Nonterminal declarations")) (yacc-parser . "[[parser-banner]]\n%%\n\n") (parser-banner . (skelrc-banner "Grammar rules")) ;; --- C code stuck on the end --- (c-code . "[[c-code-banner]]\n%%\n\n[[yyerror]]") (c-code-banner . (skelrc-banner "C code")) (yyerror . ,(concat "/* --- @yyerror@ --- *\n" " *\n" " * Arguments:\t@const char *e@ = " "error message text\n" " *\n" " * Returns:\t---\n" " *\n" " * Use:\t\tHandles errors reported by " "the parser.\n" " */\n" "\n" "static void yyerror(const char *e)\n" "{\n" " fprintf(stderr, \"%s\\n\", e);\n" "}\n" "\n"))) skel-alist))