NAME
pbyacc - an LALR(1) parser generator
SYNOPSIS
pbyacc [ -CPcdlrtv ] [ -b file_prefix ] [ -p symbol_prefix ] filename
DESCRIPTION
pbyacc reads the grammar specification in the file filename and
generates an LR(1) parser for it. The parsers consist of a set of
LALR(1) parsing tables and a driver routine written in the C or Perl
programming languages. pbyacc normally writes the parse tables and the
driver routine to the file y.tab.c, using the C programming language.
The following options are available:
-b file_prefix
The -b option changes the prefix prepended to the output
file names to the string denoted by file_prefix. The
default prefix is the character y.
-C or -c
Use the C programming language (default).
-d The -d option causes the header file y.tab.h to be
written (or y.tab.ph, for Perl).
-l If the -l option is not specified, pbyacc will insert
#line directives in the generated code. The #line
directives let the C compiler relate errors in the
generated code to the user’s original code. If the -l
option is specified, pbyacc will not insert the #line
directives. #line directives specified by the user will
be retained.
-p symbol_prefix
Change the prefix in symbols in the generated code to the
string denoted by symbol_prefix rather than the default
of "yy". Only symbols generated by pbyacc are affected.
Symbols in the definition and user subroutine sections
are not changed.
The symbol_prefix can contain upper or lower case
letters, digits, or _ (underline or underscore). It must
start with either an underline or a letter and must
contain at least one lower case letter.
All lower case letters in the symbol prefix will be
converted to upper case letters when defined values or
typedefs are generated.
For example, if ’-p ftp_’ is specifed on the pbyacc
command line:
+-------------+--------------+
| old symbol | new symbol |
+-------------+--------------+
| YYABORT | FTP_ABORT |
| YYACCEPT | FTP_ACCEPT |
| YYBYACC | FTP_BYACC |
| YYDEBUG | FTP_DEBUG |
| YYSTYPE | FTP_STYPE |
| yyabort | ftp_abort |
| yyerrok | ftp_errok |
| yylex | ftp_lex |
| yylval | ftp_lval |
| yyparse | ftp_parse |
Note:+The-above-list-is-not-complete.
-P Use the Perl programming language. The output files have
extensions .tab.pl and .tab.ph.
-r The -r option causes pbyacc to produce separate files for
code and tables. The code file is named y.code.c, and
the tables file is named y.tab.c. In Perl mode, the file
name extension is .pl, but the use of this option is not
recommended.
-t The -t option changes the preprocessor directives
generated by pbyacc so that debugging statements will be
incorporated in the compiled code.
-v The -v option causes a human-readable description of the
generated parser to be written to the file y.output.
If the environment variable TMPDIR is set, the string denoted by TMPDIR
will be used as the name of the directory where the temporary files are
created.
In C mode, the user’s code at the end of the PBYACC file is inserted
before the yyparse subroutine, but in Perl mode, it is appended to
yyparse so it can contain the main program. In Perl mode, there is no
library, so the user must supply the yyerror and yylex subroutines and
a main program that calls yyparse. For example:
%%
...grammar...
%%
sub yyerror { print STDERR "$.: $@\n"; }
sub yylex { ... }
exit &yyparse;
FILES
y.code.c output parser code in C
y.tab.c output parser code and tables in C or, if -r switch
specified, output parser tables in C
y.tab.h defines for token names and, if %union used in grammar, the
union definition for C parsers
y.code.pl output parser code in PERL
y.tab.pl output parser code and tables in PERL or, if -r switch
specified, output parser tables in PERL
y.tab.ph PERL assignment statements for token names
y.output description of parser states, state transitions, and
conflicts
/tmp/pbyacc.aXXXXXX, /tmp/byacc.tXXXXXX, /tmp/byacc.uXXXXXX
temporary files
/usr/lib/libby.a
library containing simple versions of main() (calls
yyparse() then exits) and yyerror() (prints message to
stderr then returns)
SEE ALSO
flex(1), lex(1)
Yacc: Yet Another Compiler-Compiler
Stephen C. Johnson
Originally (?) published as Comp. Sci. Tech. Rep. No. 32. Bell
Laboratories, July 1975. Reprinted in many different places.
Introduction to Compiler Construction with UNIX
Axel T. Schreiner and H. George Friedman, Jr.
Prentice Hall, 1985.
lex & yacc, Second Edition
John R. Levine, Tony Mason, and Doug Brown
O’Reilly & Associates, Inc., 1992.
Possibly the best book yet on lex and yacc. (My opinion only.
Others may disagree. - Rick Ohnemus)
comp.compilers monthly message and Frequently Asked Questions
Posted monthly in comp.compilers and news.answers USENET newsgroups.
DIAGNOSTICS
If there are rules that are never reduced, the number of such rules is
reported on standard error.
If there are any LALR(1) conflicts, the number of conflicts is reported
on standard error.
RESTRICTIONS
A symbol prefix specified using the -p switch must contain at least one
lower case character. This is to allow a distinction between variables,
defined values, and typedefs.
BUGS