38e505c3e5
Add Caldera license. Approved by: David Taylor <davidt@caldera.com> Make roughly buildable under FreeBSD. The results are not perfect: the original Makefile referred to a refer file papers/Ind, which doesn't seem to have been kept, so the references to other publications are missing. In addition, the pagination is not correct, with the result that some .DS/.DE blocks leave large amounts of white space empty before them. Possibly this could be fixed by putting the (blank) footnotes at the end. PR: 35345 Requested by: Tony Finch <fanf@dotat.at>
131 lines
4.4 KiB
Plaintext
131 lines
4.4 KiB
Plaintext
.\" Copyright (C) Caldera International Inc. 2001-2002. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions are
|
|
.\" met:
|
|
.\"
|
|
.\" Redistributions of source code and documentation must retain the above
|
|
.\" copyright notice, this list of conditions and the following
|
|
.\" disclaimer.
|
|
.\"
|
|
.\" Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\"
|
|
.\" This product includes software developed or owned by Caldera
|
|
.\" International, Inc. Neither the name of Caldera International, Inc.
|
|
.\" nor the names of other contributors may be used to endorse or promote
|
|
.\" products derived from this software without specific prior written
|
|
.\" permission.
|
|
.\"
|
|
.\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
|
|
.\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
.\" DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
|
.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
.\" OR OTHERWISE) RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
|
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
.\"
|
|
.\" @(#)ss8 8.1 (Berkeley) 6/8/93
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.SH
|
|
8: The Yacc Environment
|
|
.PP
|
|
When the user inputs a specification
|
|
to Yacc, the output is a file of C programs, called
|
|
.I y.tab.c
|
|
on most
|
|
systems
|
|
(due to local file system conventions, the names may differ from
|
|
installation to installation).
|
|
The function produced by Yacc is called
|
|
.I yyparse \|;
|
|
it is an integer valued function.
|
|
When it is called, it in turn repeatedly calls
|
|
.I yylex ,
|
|
the lexical analyzer
|
|
supplied by the user (see Section 3)
|
|
to obtain input tokens.
|
|
Eventually, either an error is detected, in which case
|
|
(if no error recovery is possible)
|
|
.I yyparse
|
|
returns the value 1,
|
|
or the lexical analyzer returns the endmarker token
|
|
and the parser accepts.
|
|
In this case,
|
|
.I yyparse
|
|
returns the value 0.
|
|
.PP
|
|
The user must provide a certain amount of environment for this
|
|
parser in order to obtain a working program.
|
|
For example, as with every C program, a program called
|
|
.I main
|
|
must be defined, that eventually calls
|
|
.I yyparse .
|
|
In addition, a routine called
|
|
.I yyerror
|
|
prints a message
|
|
when a syntax error is detected.
|
|
.PP
|
|
These two routines must be supplied in one form or another by the
|
|
user.
|
|
To ease the initial effort of using Yacc, a library has been
|
|
provided with default versions of
|
|
.I main
|
|
and
|
|
.I yyerror .
|
|
The name of this library is system dependent;
|
|
on many systems the library is accessed by a
|
|
.B \-ly
|
|
argument to the loader.
|
|
To show the triviality of these default programs, the source is
|
|
given below:
|
|
.DS
|
|
main(){
|
|
return( yyparse() );
|
|
}
|
|
.DE
|
|
and
|
|
.DS
|
|
# include <stdio.h>
|
|
|
|
yyerror(s) char *s; {
|
|
fprintf( stderr, "%s\en", s );
|
|
}
|
|
.DE
|
|
The argument to
|
|
.I yyerror
|
|
is a string containing an error message, usually
|
|
the string ``syntax error''.
|
|
The average application will want to do better than this.
|
|
Ordinarily, the program should keep track of the input line number, and print it
|
|
along with the message when a syntax error is detected.
|
|
The external integer variable
|
|
.I yychar
|
|
contains the lookahead token number at the time the error was detected;
|
|
this may be of some interest in giving better diagnostics.
|
|
Since the
|
|
.I main
|
|
program is probably supplied by the user (to read arguments, etc.)
|
|
the Yacc library is useful only in small
|
|
projects, or in the earliest stages of larger ones.
|
|
.PP
|
|
The external integer variable
|
|
.I yydebug
|
|
is normally set to 0.
|
|
If it is set to a nonzero value, the parser will output a
|
|
verbose description of its actions, including
|
|
a discussion of which input symbols have been read, and
|
|
what the parser actions are.
|
|
Depending on the operating environment,
|
|
it may be possible to set this variable by using a debugging system.
|