9base

revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log | Files | Refs | README | LICENSE

yacc.1 (3556B)


      1 .TH YACC 1
      2 .SH NAME
      3 yacc \- yet another compiler-compiler
      4 .SH SYNOPSIS
      5 .B yacc
      6 [
      7 .I option ...
      8 ]
      9 .I grammar
     10 .SH DESCRIPTION
     11 .I Yacc
     12 converts a context-free grammar and translation code
     13 into a set of
     14 tables for an LR(1) parser and translator.
     15 The grammar may be ambiguous;
     16 specified precedence rules are used to break ambiguities.
     17 .PP
     18 The output file,
     19 .BR y.tab.c ,
     20 must be compiled by the C compiler
     21 to produce a program
     22 .LR yyparse .
     23 This program must be loaded with a lexical analyzer function,
     24 .B yylex(void)
     25 (often generated by
     26 .IR lex (1)),
     27 with a
     28 .B main(int argc, char *argv[])
     29 program, and with an error handling routine,
     30 .BR yyerror(char*) .
     31 .PP
     32 The options are
     33 .TP "\w'\fL-o \fIoutput\fLXX'u"
     34 .BI -o " output
     35 Direct output to the specified file instead of
     36 .BR y.tab.c .
     37 .TP
     38 .BI -D n
     39 Create file
     40 .BR y.debug ,
     41 containing diagnostic messages.
     42 To incorporate them in the parser, compile it with preprocessor symbol
     43 .B yydebug
     44 defined.
     45 The amount of 
     46 diagnostic output from the parser is regulated by
     47 value
     48 .IR n .
     49 The value 0 reports errors; 1 reports reductions;
     50 higher values (up to 4) include more information about
     51 state transitions.
     52 .TP
     53 .B -v
     54 Create file
     55 .BR y.output ,
     56 containing a description of the parsing tables and of
     57 conflicts arising from ambiguities in the grammar.
     58 .TP
     59 .B -d
     60 Create file
     61 .BR y.tab.h ,
     62 containing
     63 .B #define
     64 statements that associate
     65 .IR yacc -assigned
     66 `token codes' with user-declared `token names'.
     67 Include it in source files other than
     68 .B y.tab.c
     69 to give access to the token codes.
     70 .TP
     71 .BI -s " stem
     72 Change the prefix
     73 .L y 
     74 of the file names
     75 .BR y.tab.c ,
     76 .BR y.tab.h ,
     77 .BR y.debug ,
     78 and
     79 .B y.output
     80 to
     81 .IR stem .
     82 .TP
     83 .B -S
     84 Write a parser that uses
     85 Stdio
     86 instead of the
     87 .B print
     88 routines in libc.
     89 .TP
     90 .BI -l
     91 Disable #line directives in the generated parser.
     92 .TP
     93 .BI -a
     94 Generate a parser that takes an argument of type Yyarg
     95 and passes this argument to each invocation of the lexer
     96 function, yylex.  Yyarg contains per-instance state
     97 and a single user-visible member, arg, of type void*.
     98 .PP
     99 The specification of
    100 .I yacc
    101 itself is essentially the same as the UNIX version
    102 described in the references mentioned below.
    103 Besides the
    104 .B -D
    105 option, the main relevant differences are:
    106 .IP
    107 The interface to the C environment is by default through
    108 .B <libc.h>
    109 rather than
    110 .BR <stdio.h> ;
    111 the
    112 .B -S
    113 option reverses this.
    114 .IP
    115 The parser accepts
    116 .SM UTF
    117 input text (see
    118 .IR utf (7)),
    119 which has a couple of effects.
    120 First, the return value of
    121 .B yylex()
    122 no longer fits in a
    123 .BR short ;
    124 second, the starting value for non-terminals is now 0xE000 rather than 257.
    125 .IP
    126 The generated parser can be recursive: actions can call
    127 .IR yyparse ,
    128 for example to implement a sort of
    129 .B #include
    130 statement in an interpreter.
    131 .IP
    132 Finally, some undocumented inner workings of the parser have been
    133 changed, which may affect programs that know too much about its structure.
    134 .SH FILES
    135 .TF y.debug.xxxxx
    136 .TP
    137 .B y.output
    138 .TP
    139 .B y.tab.c
    140 .TP
    141 .B y.tab.h
    142 .TP
    143 .B y.debug
    144 .TP
    145 .B y.tmp.*
    146 temporary file
    147 .TP
    148 .B y.acts.*
    149 temporary file
    150 .TP
    151 .B \*9/lib/yaccpar
    152 parser prototype
    153 .TP
    154 .B \*9/lib/yaccpars
    155 parser prototype using stdio
    156 .SH SOURCE
    157 .B \*9/src/cmd/yacc.c
    158 .SH "SEE ALSO"
    159 .IR lex (1)
    160 .br
    161 S. C. Johnson and R. Sethi,
    162 ``Yacc: A parser generator'',
    163 .I
    164 Unix Research System Programmer's Manual,
    165 Tenth Edition, Volume 2
    166 .br
    167 B. W. Kernighan and Rob Pike,
    168 .I
    169 The UNIX Programming Environment,
    170 Prentice Hall, 1984
    171 .SH BUGS
    172 The parser may not have full information when it writes to
    173 .B y.debug
    174 so that the names of the tokens returned by
    175 .L yylex
    176 may be missing.