From 22a89eeddc866c59d6e067fadcfca5e198fbe387 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 22 Jun 1992 04:07:24 +0000 Subject: [PATCH] entered into RCS --- doc/bison.rnh | 167 +++++++++++++++++++++++++++++++++++++++++++++++ src/vmsgetargs.c | 160 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 327 insertions(+) create mode 100644 doc/bison.rnh create mode 100644 src/vmsgetargs.c diff --git a/doc/bison.rnh b/doc/bison.rnh new file mode 100644 index 00000000..54417814 --- /dev/null +++ b/doc/bison.rnh @@ -0,0 +1,167 @@ +.! +.! RUNOFF source file for BISON.HLP +.! +.! This is a RUNOFF input file which will produce a VMS help file +.! for the VMS HELP library. +.! +.! Date of last revision: June 21, 1992 +.! +.! +.! Eric Youngdale +.! +.literal +.end literal +.no paging +.no flags all +.right margin 70 +.left margin 1 + +.indent -1 +1 BISON +.skip + The BISON command invokes the GNU BISON parser generator. +.skip +.literal + BISON file-spec +.end literal +.skip +.indent -1 +2 Parameters +.skip + file-spec +.skip +Here file-spec is the grammar file name, which usually ends in +.y. The parser file's name is made by replacing the .y +with _tab.c. Thus, the command bison foo.y yields +foo_tab.c. + +.skip +.indent -1 +2 Qualifiers +.skip + The following is the list of available qualifiers for BISON: +.literal + /DEBUG + /DEFINES + /FILE_PREFIX=prefix + /FIXED_OUTFILES + /NAME_PREFIX=prefix + /NOLINES + /OUTPUT=outfilefile + /VERBOSE + /VERSION + /YACC +.end literal +.skip +.indent -1 +2 /DEBUG +.skip +Output a definition of the macro YYDEBUG into the parser file, +so that the debugging facilities are compiled. +.skip +.indent -1 +2 /DEFINES +.skip +Write an extra output file containing macro definitions for the token +type names defined in the grammar and the semantic value type +YYSTYPE, as well as a extern variable declarations. +.skip +If the parser output file is named "name.c" then this file +is named "name.h". +.skip +This output file is essential if you wish to put the definition of +yylex in a separate source file, because yylex needs to +be able to refer to token type codes and the variable +yylval. +.skip +.indent -1 +2 /FILE_PREFIX +.skip +.literal + /FILIE_PREFIX=prefix +.end literal +.skip + Specify a prefix to use for all Bison output file names. The names are +chosen as if the input file were named prefix.c + +.skip +.indent -1 +2 /FIXED_OUTFILES +.skip +Equivalent to /OUTPUT=y_tab.c; the parser output file is called +y_tab.c, and the other outputs are called y.output and +y_tab.h. The purpose of this switch is to imitate Yacc's output +file name conventions. The /YACC qualifier is functionally equivalent +to /FIXED_OUTFILES. The following command definition will +work as a substitute for Yacc: + +.literal +$YACC:==BISON/FIXED_OUTFILES +.end literal +.skip +.indent -1 +2 /NAME_PREFIX +.skip +.literal + /NAME_PREFIX=prefix +.end literal +.skip +Rename the external symbols used in the parser so that they start with +"prefix" instead of "yy". The precise list of symbols renamed +is yyparse, yylex, yyerror, yylval, yychar and yydebug. + +For example, if you use /NAME_PREFIX="c", the names become cparse, +clex, and so on. + +.skip +.indent -1 +2 /NOLINES +.skip +Don't put any "#line" preprocessor commands in the parser file. +Ordinarily Bison puts them in the parser file so that the C compiler +and debuggers will associate errors with your source file, the +grammar file. This option causes them to associate errors with the +parser file, treating it an independent source file in its own right. + +.skip +.indent -1 +2 /OUTPUT +.skip +.literal + /OUTPUT=outfile +.end literal +.skip +Specify the name "outfile" for the parser file. +.skip +.indent -1 +2 /VERBOSE +.skip +Write an extra output file containing verbose descriptions of the +parser states and what is done for each type of look-ahead token in +that state. +.skip +This file also describes all the conflicts, both those resolved by +operator precedence and the unresolved ones. +.skip +The file's name is made by removing _tab.c or .c from +the parser output file name, and adding .output instead. +.skip +Therefore, if the input file is foo.y, then the parser file is +called foo_tab.c by default. As a consequence, the verbose +output file is called foo.output. +.skip +.indent -1 +2 /VERSION +.skip +Print the version number of Bison. + +.skip +.indent -1 +2 /YACC +.skip +See /FIXED_OUTFILES. +.skip +.indent -1 + + + diff --git a/src/vmsgetargs.c b/src/vmsgetargs.c new file mode 100644 index 00000000..c7e738bb --- /dev/null +++ b/src/vmsgetargs.c @@ -0,0 +1,160 @@ +/* VMS version of getargs; Uses DCL command parsing. + Copyright (C) 1989 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + + +#include +#include +#include "files.h" + +/* + * VMS version of getargs(): Uses DCL command parsing + * (argc and argv are ignored) + */ +int verboseflag; +int definesflag; +int debugflag; +int nolinesflag; +extern int fixed_outfiles; +extern char * version_string; + +/* Allocate storgate and initialize, since bison uses them elsewhere. */ +char *spec_name_prefix; +char *spec_file_prefix; + +getargs(argc,argv) + int argc; + char *argv[]; +{ + register char *cp; + static char Input_File[256]; + static char output_spec[256], name_prefix_spec[256], file_prefix_spec[256]; + extern char *infile; + + verboseflag = 0; + definesflag = 0; + debugflag = 0; + fixed_outfiles = 0; + nolinesflag = 0; + /* + * Check for /VERBOSE qualifier + */ + if (cli_present("BISON$VERBOSE")) verboseflag = 1; + /* + * Check for /DEFINES qualifier + */ + if (cli_present("BISON$DEFINES")) definesflag = 1; + /* + * Check for /FIXED_OUTFILES qualifier + */ + if (cli_present("BISON$FIXED_OUTFILES")) fixed_outfiles = 1; + if (cli_present("BISON$YACC")) fixed_outfiles = 1; + /* + * Check for /VERSION qualifier + */ + if (cli_present("BISON$VERSION")) printf("%s",version_string); + /* + * Check for /NOLINES qualifier + */ + if (cli_present("BISON$NOLINES")) nolinesflag = 1; + /* + * Check for /DEBUG qualifier + */ + if (cli_present("BISON$DEBUG")) debugflag = 1; + /* + * Get the filename + */ + cli_get_value("BISON$INFILE", Input_File, sizeof(Input_File)); + /* + * Lowercaseify the input filename + */ + cp = Input_File; + while(*cp) + { + if (isupper(*cp)) *cp = tolower(*cp); + cp++; + } + infile = Input_File; + /* + * Get the output file + */ + if (cli_present("BISON$OUTPUT")) + { + cli_get_value("BISON$OUTPUT", output_spec, sizeof(output_spec)); + for (cp = spec_outfile = output_spec; *cp; cp++) + if (isupper(*cp)) + *cp = tolower(*cp); + } + /* + * Get the output file + */ + if (cli_present("BISON$FILE_PREFIX")) + { + cli_get_value("BISON$FILE_PREFIX", file_prefix_spec, + sizeof(file_prefix_spec)); + for (cp = spec_file_prefix = file_prefix_spec; *cp; cp++) + if (isupper(*cp)) + *cp = tolower(*cp); + } + /* + * Get the output file + */ + if (cli_present("BISON$NAME_PREFIX")) + { + cli_get_value("BISON$NAME_PREFIX", name_prefix_spec, + sizeof(name_prefix_spec)); + for (cp = spec_name_prefix = name_prefix_spec; *cp; cp++) + if (isupper(*cp)) + *cp = tolower(*cp); + } +} + +/************ DCL PARSING ROUTINES **********/ + +/* + * See if "NAME" is present + */ +int +cli_present(Name) + char *Name; +{ + struct {int Size; char *Ptr;} Descr; + + Descr.Ptr = Name; + Descr.Size = strlen(Name); + return((cli$present(&Descr) & 1) ? 1 : 0); +} + +/* + * Get value of "NAME" + */ +int +cli_get_value(Name,Buffer,Size) + char *Name; + char *Buffer; +{ + struct {int Size; char *Ptr;} Descr1,Descr2; + + Descr1.Ptr = Name; + Descr1.Size = strlen(Name); + Descr2.Ptr = Buffer; + Descr2.Size = Size-1; + if (cli$get_value(&Descr1,&Descr2,&Descr2.Size) & 1) { + Buffer[Descr2.Size] = 0; + return(1); + } + return(0); +} -- 2.47.2