groff 1.23.0 added .MR to its -man macro package. The NEWS file states
that the inclusion of the macro "was prompted by its introduction to
Plan 9 from User Space's troff in August 2020." From d32deab it seems
that the name for Plan 9 from User Space's implementation was suggested
by groff maintainer G. Brandon Robinson.
Not sure if the intention was to make these definitions compatible, but
it would be nice if they were.
Currently, Plan 9 from User Space's .MR expects its second argument to
be parenthesized. groff's .MR does not. This results in extra
parentheses appearing in manual references when viewing Plan 9 from User
Space's manual pages on a system using groff.
177 lines
3.5 KiB
Groff
177 lines
3.5 KiB
Groff
.TH YACC 1
|
|
.SH NAME
|
|
yacc \- yet another compiler-compiler
|
|
.SH SYNOPSIS
|
|
.B yacc
|
|
[
|
|
.I option ...
|
|
]
|
|
.I grammar
|
|
.SH DESCRIPTION
|
|
.I Yacc
|
|
converts a context-free grammar and translation code
|
|
into a set of
|
|
tables for an LR(1) parser and translator.
|
|
The grammar may be ambiguous;
|
|
specified precedence rules are used to break ambiguities.
|
|
.PP
|
|
The output file,
|
|
.BR y.tab.c ,
|
|
must be compiled by the C compiler
|
|
to produce a program
|
|
.LR yyparse .
|
|
This program must be loaded with a lexical analyzer function,
|
|
.B yylex(void)
|
|
(often generated by
|
|
.MR lex 1 ),
|
|
with a
|
|
.B main(int argc, char *argv[])
|
|
program, and with an error handling routine,
|
|
.BR yyerror(char*) .
|
|
.PP
|
|
The options are
|
|
.TP "\w'\fL-o \fIoutput\fLXX'u"
|
|
.BI -o " output
|
|
Direct output to the specified file instead of
|
|
.BR y.tab.c .
|
|
.TP
|
|
.BI -D n
|
|
Create file
|
|
.BR y.debug ,
|
|
containing diagnostic messages.
|
|
To incorporate them in the parser, compile it with preprocessor symbol
|
|
.B yydebug
|
|
defined.
|
|
The amount of
|
|
diagnostic output from the parser is regulated by
|
|
value
|
|
.IR n .
|
|
The value 0 reports errors; 1 reports reductions;
|
|
higher values (up to 4) include more information about
|
|
state transitions.
|
|
.TP
|
|
.B -v
|
|
Create file
|
|
.BR y.output ,
|
|
containing a description of the parsing tables and of
|
|
conflicts arising from ambiguities in the grammar.
|
|
.TP
|
|
.B -d
|
|
Create file
|
|
.BR y.tab.h ,
|
|
containing
|
|
.B #define
|
|
statements that associate
|
|
.IR yacc -assigned
|
|
`token codes' with user-declared `token names'.
|
|
Include it in source files other than
|
|
.B y.tab.c
|
|
to give access to the token codes.
|
|
.TP
|
|
.BI -s " stem
|
|
Change the prefix
|
|
.L y
|
|
of the file names
|
|
.BR y.tab.c ,
|
|
.BR y.tab.h ,
|
|
.BR y.debug ,
|
|
and
|
|
.B y.output
|
|
to
|
|
.IR stem .
|
|
.TP
|
|
.B -S
|
|
Write a parser that uses
|
|
Stdio
|
|
instead of the
|
|
.B print
|
|
routines in libc.
|
|
.TP
|
|
.BI -l
|
|
Disable #line directives in the generated parser.
|
|
.TP
|
|
.BI -a
|
|
Generate a parser that takes an argument of type Yyarg
|
|
and passes this argument to each invocation of the lexer
|
|
function, yylex. Yyarg contains per-instance state
|
|
and a single user-visible member, arg, of type void*.
|
|
.PP
|
|
The specification of
|
|
.I yacc
|
|
itself is essentially the same as the UNIX version
|
|
described in the references mentioned below.
|
|
Besides the
|
|
.B -D
|
|
option, the main relevant differences are:
|
|
.IP
|
|
The interface to the C environment is by default through
|
|
.B <libc.h>
|
|
rather than
|
|
.BR <stdio.h> ;
|
|
the
|
|
.B -S
|
|
option reverses this.
|
|
.IP
|
|
The parser accepts
|
|
.SM UTF
|
|
input text (see
|
|
.MR utf 7 ),
|
|
which has a couple of effects.
|
|
First, the return value of
|
|
.B yylex()
|
|
no longer fits in a
|
|
.BR short ;
|
|
second, the starting value for non-terminals is now 0xE000 rather than 257.
|
|
.IP
|
|
The generated parser can be recursive: actions can call
|
|
.IR yyparse ,
|
|
for example to implement a sort of
|
|
.B #include
|
|
statement in an interpreter.
|
|
.IP
|
|
Finally, some undocumented inner workings of the parser have been
|
|
changed, which may affect programs that know too much about its structure.
|
|
.SH FILES
|
|
.TF y.debug.xxxxx
|
|
.TP
|
|
.B y.output
|
|
.TP
|
|
.B y.tab.c
|
|
.TP
|
|
.B y.tab.h
|
|
.TP
|
|
.B y.debug
|
|
.TP
|
|
.B y.tmp.*
|
|
temporary file
|
|
.TP
|
|
.B y.acts.*
|
|
temporary file
|
|
.TP
|
|
.B \*9/lib/yaccpar
|
|
parser prototype
|
|
.TP
|
|
.B \*9/lib/yaccpars
|
|
parser prototype using stdio
|
|
.SH SOURCE
|
|
.B \*9/src/cmd/yacc.c
|
|
.SH "SEE ALSO"
|
|
.MR lex 1
|
|
.br
|
|
S. C. Johnson and R. Sethi,
|
|
``Yacc: A parser generator'',
|
|
.I
|
|
Unix Research System Programmer's Manual,
|
|
Tenth Edition, Volume 2
|
|
.br
|
|
B. W. Kernighan and Rob Pike,
|
|
.I
|
|
The UNIX Programming Environment,
|
|
Prentice Hall, 1984
|
|
.SH BUGS
|
|
The parser may not have full information when it writes to
|
|
.B y.debug
|
|
so that the names of the tokens returned by
|
|
.L yylex
|
|
may be missing.
|