

.help xyacc
.nf
This directory contains the source for the Yacc compiler compiler (Stephen C.
Johnson), as modified to produce SPP language parsers. You should have a
UNIX source license to use this software on your machine. For the most part,
the operation of SPP/Yacc is as described in the Yacc reference manual, with
the important differences noted below. A complete working example of a desk
calculator program may be found in the subdirectory debug, file dc.y.
Notes on SPP Yacc
(1) The Yacc input syntax is unmodified, except that the comment convention
is now as in SPP, rather than C (i.e., use #, rather than /*..*/).
All defines, actions, etc. are of course given in the SPP language.
(2) The Yacc output file is "ytab.x", rather than "y.tab.c". The token
defs file "y.tab.h" now contains SPP defines, rather than C #defines.
The states file "y.output" is completely unmodified.
(3) The global declarations section %{ .. %} had to be changed somewhat
because SPP does not have global variables. The section is now
divided into two subsections. The first is for global defines,
includes, etc. which go into the header area of the ytab.x file.
Then follows a %L, telling Yacc that the local declarations for
the parser procedure follow. This second section should contain
variable and function declarations required for the user supplied
actions (code fragments to be executed when a rule of the grammar
is recognized) in the yyparse procedure.
(4) The global declarations section MUST contain the following two
defines:
YYMAXDEPTH Depth of the parser stacks; determines
the maximum complexity of a language
construct which can be parsed. A typical
value is 150.
YYOPLEN The length, in struct units, of a token
operand value structure. You define the
operand structure to be whatever you wish;
all the parser needs to know is how big an
element is. The lexical analyzer and the
actions, both of which are supplied by the
user, use the operand structure for
communications. Operand structures are
always referred to by a Mem pointer.
(5) The calling sequence for the parser is as follows
status = yyparse (fd, debug, yylex)
where
status is OK, EOF, or ERR (syntax error)
fd is the text stream to be parsed
debug is a boolean, true to print debugging info
yylex is the user supplied lexical analysis procedure.
The calling sequence for the lexical analysis procedure is as
follows (the name "yylex" may be anything):
token = yylex (fd, yylval)
where
Token is the integer code for the token. The tokens are
named in the Yacc grammar, and are defined either by
the user or by Yacc in the header area of ytab.x.
If Yacc is permitted to assign codes to tokens, the
token defininitions file ytab.h is written out.
fd is the file to be read
yylval is a POINTER to the token value structure to be
returned by yylex.
(6) The SPP version of Yacc, unlike the C version, does not use any
external or global variables for communication between routines,
and hence it is possible for several distinct parsers to coexist
in the same image. If this is done, the user supplied yylex
procedures should be named something else, and the name of the
parser procedure (yyparse) should be changed. This can be done
by putting a "define yyparse" in the global definitions area.
(7) Token values (i.e., $$, $1, $2, yyval, yylval, etc.) are always
pointers to structures in the SPP version, as opposed to structures
in the C version. Thus actions like
{ $$ = $1; }
which are common in the C version, are programmed like this in SPP:
{ YYMOVE ($1, $$) }
where YYMOVE is a Yacc supplied macro which copies an operand
structure.
(8) The source for the language independent part of the parser is given
in "lib$yaccpar.x".
Doug Tody, 21 Feb 84.
20Jan85:
y.tab.x -> ytab.x (etc), added EOF token
20Apr85:
lib$yaccpar.x, deleted entry points for examining parser stack and
other context state variables.
Search Form · STSDAS
Maintained by the Science Software Group at STScI
This file last updated on 15 Dec 1985