mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-18 16:53:02 +00:00
entered into RCS
This commit is contained in:
167
doc/bison.rnh
Normal file
167
doc/bison.rnh
Normal file
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
160
src/vmsgetargs.c
Normal file
160
src/vmsgetargs.c
Normal file
@@ -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 <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user