Annotation of 43BSDReno/share/doc/ps1/15.yacc/ss8, revision 1.1.1.1

1.1       root        1: .\"    @(#)ss8 6.1 (Berkeley) 5/8/86
                      2: .\"
                      3: .SH
                      4: 8: The Yacc Environment
                      5: .PP
                      6: When the user inputs a specification
                      7: to Yacc, the output is a file of C programs, called
                      8: .I y.tab.c
                      9: on most
                     10: systems
                     11: (due to local file system conventions, the names may differ from
                     12: installation to installation).
                     13: The function produced by Yacc is called
                     14: .I yyparse \|;
                     15: it is an integer valued function.
                     16: When it is called, it in turn repeatedly calls
                     17: .I yylex ,
                     18: the lexical analyzer
                     19: supplied by the user (see Section 3)
                     20: to obtain input tokens.
                     21: Eventually, either an error is detected, in which case
                     22: (if no error recovery is possible)
                     23: .I yyparse
                     24: returns the value 1,
                     25: or the lexical analyzer returns the endmarker token
                     26: and the parser accepts.
                     27: In this case,
                     28: .I yyparse
                     29: returns the value 0.
                     30: .PP
                     31: The user must provide a certain amount of environment for this
                     32: parser in order to obtain a working program.
                     33: For example, as with every C program, a program called
                     34: .I main
                     35: must be defined, that eventually calls
                     36: .I yyparse .
                     37: In addition, a routine called
                     38: .I yyerror
                     39: prints a message
                     40: when a syntax error is detected.
                     41: .PP
                     42: These two routines must be supplied in one form or another by the
                     43: user.
                     44: To ease the initial effort of using Yacc, a library has been
                     45: provided with default versions of
                     46: .I main
                     47: and
                     48: .I yyerror .
                     49: The name of this library is system dependent;
                     50: on many systems the library is accessed by a
                     51: .B \-ly
                     52: argument to the loader.
                     53: To show the triviality of these default programs, the source is
                     54: given below:
                     55: .DS
                     56: main(){
                     57:        return( yyparse() );
                     58:        }
                     59: .DE
                     60: and
                     61: .DS
                     62: # include <stdio.h>
                     63: 
                     64: yyerror(s) char *s; {
                     65:        fprintf( stderr, "%s\en", s );
                     66:        }
                     67: .DE
                     68: The argument to
                     69: .I yyerror
                     70: is a string containing an error message, usually
                     71: the string ``syntax error''.
                     72: The average application will want to do better than this.
                     73: Ordinarily, the program should keep track of the input line number, and print it
                     74: along with the message when a syntax error is detected.
                     75: The external integer variable
                     76: .I yychar
                     77: contains the lookahead token number at the time the error was detected;
                     78: this may be of some interest in giving better diagnostics.
                     79: Since the
                     80: .I main
                     81: program is probably supplied by the user (to read arguments, etc.)
                     82: the Yacc library is useful only in small
                     83: projects, or in the earliest stages of larger ones.
                     84: .PP
                     85: The external integer variable
                     86: .I yydebug
                     87: is normally set to 0.
                     88: If it is set to a nonzero value, the parser will output a
                     89: verbose description of its actions, including
                     90: a discussion of which input symbols have been read, and
                     91: what the parser actions are.
                     92: Depending on the operating environment,
                     93: it may be possible to set this variable by using a debugging system.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.