summaryrefslogtreecommitdiff
path: root/yacc/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'yacc/main.c')
-rw-r--r--yacc/main.c388
1 files changed, 0 insertions, 388 deletions
diff --git a/yacc/main.c b/yacc/main.c
deleted file mode 100644
index cb93a3d294..0000000000
--- a/yacc/main.c
+++ /dev/null
@@ -1,388 +0,0 @@
-#include <signal.h>
-#include "defs.h"
-
-char dflag;
-char lflag;
-char rflag;
-char tflag;
-char vflag;
-char sflag;
-char big_endian;
-
-char *file_prefix = 0;
-char *myname = "yacc";
-#ifdef NO_UNIX
-char temp_form[] = "yacc.X";
-#else
-char temp_form[] = "yacc.XXXXXXX";
-#endif
-
-int lineno;
-int outline;
-
-char *action_file_name;
-char *entry_file_name;
-char *code_file_name;
-char *interface_file_name;
-char *defines_file_name;
-char *input_file_name = "";
-char *output_file_name;
-char *text_file_name;
-char *union_file_name;
-char *verbose_file_name;
-
-FILE *action_file; /* a temp file, used to save actions associated */
- /* with rules until the parser is written */
-FILE *entry_file;
-FILE *code_file; /* y.code.c (used when the -r option is specified) */
-FILE *defines_file; /* y.tab.h */
-FILE *input_file; /* the input file */
-FILE *output_file; /* y.tab.c */
-FILE *text_file; /* a temp file, used to save text until all */
- /* symbols have been defined */
-FILE *union_file; /* a temp file, used to save the union */
- /* definition until all symbol have been */
- /* defined */
-FILE *verbose_file; /* y.output */
-FILE *interface_file;
-
-int nitems;
-int nrules;
-int ntotalrules;
-int nsyms;
-int ntokens;
-int nvars;
-
-int start_symbol;
-char **symbol_name;
-short *symbol_value;
-short *symbol_prec;
-char *symbol_assoc;
-char **symbol_tag;
-char *symbol_true_token;
-
-short *ritem;
-short *rlhs;
-short *rrhs;
-short *rprec;
-char *rassoc;
-short **derives;
-char *nullable;
-
-extern char *mktemp();
-extern char *getenv();
-
-
-done(k)
-int k;
-{
- if (action_file) { fclose(action_file); unlink(action_file_name); }
- if (entry_file) { fclose(entry_file); unlink(entry_file_name); }
- if (text_file) { fclose(text_file); unlink(text_file_name); }
- if (union_file) { fclose(union_file); unlink(union_file_name); }
- if (output_file && k > 0) {
- fclose(output_file); unlink(output_file_name);
- }
- if (interface_file && k > 0) {
- fclose(interface_file); unlink(interface_file_name);
- }
- exit(k);
-}
-
-
-void onintr(dummy)
- int dummy;
-{
- done(1);
-}
-
-
-set_signals()
-{
-#ifdef SIGINT
- if (signal(SIGINT, SIG_IGN) != SIG_IGN)
- signal(SIGINT, onintr);
-#endif
-#ifdef SIGTERM
- if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
- signal(SIGTERM, onintr);
-#endif
-#ifdef SIGHUP
- if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
- signal(SIGHUP, onintr);
-#endif
-}
-
-
-usage()
-{
- fprintf(stderr, "usage: %s [-vs] [-b file_prefix] [-el|-eb] filename\n",
- myname);
- exit(1);
-}
-
-getargs(argc, argv)
-int argc;
-char *argv[];
-{
- register int i;
- register char *s;
-
- if (argc > 0) myname = argv[0];
- for (i = 1; i < argc; ++i)
- {
- s = argv[i];
- if (*s != '-') break;
- switch (*++s)
- {
- case '\0':
- input_file = stdin;
- if (i + 1 < argc) usage();
- return;
-
- case '-':
- ++i;
- goto no_more_options;
-
- case 'b':
- if (*++s)
- file_prefix = s;
- else if (++i < argc)
- file_prefix = argv[i];
- else
- usage();
- continue;
-
- case 'v':
- vflag = 1;
- break;
-
- case 's':
- sflag = 1;
- break;
-
- default:
- usage();
- }
-
- for (;;)
- {
- switch (*++s)
- {
- case '\0':
- goto end_of_option;
-
- case 'v':
- vflag = 1;
- break;
-
- case 's':
- sflag = 1;
- break;
-
- default:
- usage();
- }
- }
-end_of_option:;
- }
-
-no_more_options:;
- if (i + 1 != argc) usage();
- input_file_name = argv[i];
- if (file_prefix == 0) {
- int len;
- len = strlen(argv[i]);
- file_prefix = malloc(len + 1);
- if (file_prefix == 0) no_space();
- strcpy(file_prefix, argv[i]);
- while (len > 0) {
- len--;
- if (file_prefix[len] == '.') {
- file_prefix[len] = 0;
- break;
- }
- }
- }
-}
-
-
-char *
-allocate(n)
-unsigned n;
-{
- register char *p;
-
- p = NULL;
- if (n)
- {
- p = CALLOC(1, n);
- if (!p) no_space();
- }
- return (p);
-}
-
-
-create_file_names()
-{
- int i, len;
- char *tmpdir;
-
-#ifdef NO_UNIX
- len = 0;
- i = sizeof(temp_form);
-#else
- tmpdir = getenv("TMPDIR");
- if (tmpdir == 0) tmpdir = "/tmp";
- len = strlen(tmpdir);
- i = len + sizeof(temp_form);
- if (len && tmpdir[len-1] != '/')
- ++i;
-#endif
-
- action_file_name = MALLOC(i);
- if (action_file_name == 0) no_space();
- entry_file_name = MALLOC(i);
- if (entry_file_name == 0) no_space();
- text_file_name = MALLOC(i);
- if (text_file_name == 0) no_space();
- union_file_name = MALLOC(i);
- if (union_file_name == 0) no_space();
-
-#ifndef NO_UNIX
- strcpy(action_file_name, tmpdir);
- strcpy(entry_file_name, tmpdir);
- strcpy(text_file_name, tmpdir);
- strcpy(union_file_name, tmpdir);
-
- if (len && tmpdir[len - 1] != '/')
- {
- action_file_name[len] = '/';
- entry_file_name[len] = '/';
- text_file_name[len] = '/';
- union_file_name[len] = '/';
- ++len;
- }
-#endif
-
- strcpy(action_file_name + len, temp_form);
- strcpy(entry_file_name + len, temp_form);
- strcpy(text_file_name + len, temp_form);
- strcpy(union_file_name + len, temp_form);
-
- action_file_name[len + 5] = 'a';
- entry_file_name[len + 5] = 'e';
- text_file_name[len + 5] = 't';
- union_file_name[len + 5] = 'u';
-
-#ifndef NO_UNIX
- mktemp(action_file_name);
- mktemp(entry_file_name);
- mktemp(text_file_name);
- mktemp(union_file_name);
-#endif
-
- len = strlen(file_prefix);
-
- output_file_name = MALLOC(len + 7);
- if (output_file_name == 0)
- no_space();
- strcpy(output_file_name, file_prefix);
- strcpy(output_file_name + len, OUTPUT_SUFFIX);
-
- code_file_name = output_file_name;
-
- if (vflag)
- {
- verbose_file_name = MALLOC(len + 8);
- if (verbose_file_name == 0)
- no_space();
- strcpy(verbose_file_name, file_prefix);
- strcpy(verbose_file_name + len, VERBOSE_SUFFIX);
- }
-
- interface_file_name = MALLOC(len + 8);
- if (interface_file_name == 0)
- no_space();
- strcpy(interface_file_name, file_prefix);
- strcpy(interface_file_name + len, INTERFACE_SUFFIX);
-
-}
-
-
-open_files()
-{
- create_file_names();
-
- if (input_file == 0)
- {
- input_file = fopen(input_file_name, "r");
- if (input_file == 0)
- open_error(input_file_name);
- }
-
- action_file = fopen(action_file_name, "w");
- if (action_file == 0)
- open_error(action_file_name);
-
- entry_file = fopen(entry_file_name, "w");
- if (entry_file == 0)
- open_error(entry_file_name);
-
- text_file = fopen(text_file_name, "w");
- if (text_file == 0)
- open_error(text_file_name);
-
- if (vflag)
- {
- verbose_file = fopen(verbose_file_name, "w");
- if (verbose_file == 0)
- open_error(verbose_file_name);
- }
-
- if (dflag)
- {
- defines_file = fopen(defines_file_name, "w");
- if (defines_file == 0)
- open_error(defines_file_name);
- union_file = fopen(union_file_name, "w");
- if (union_file == 0)
- open_error(union_file_name);
- }
-
- output_file = fopen(output_file_name, "w");
- if (output_file == 0)
- open_error(output_file_name);
-
- if (rflag)
- {
- code_file = fopen(code_file_name, "w");
- if (code_file == 0)
- open_error(code_file_name);
- }
- else
- code_file = output_file;
-
-
- interface_file = fopen(interface_file_name, "w");
- if (interface_file == 0)
- open_error(interface_file_name);
-}
-
-
-main(argc, argv)
-int argc;
-char *argv[];
-{
- set_signals();
- getargs(argc, argv);
- open_files();
- reader();
- lr0();
- lalr();
- make_parser();
- verbose();
- output();
- done(0);
- /*NOTREACHED*/
-}