pbyacc - an LALR(1) parser generator
pbyacc [ -CPcdlrtv ] [ -b file_prefix ] [ -p
symbol_prefix ] filename
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;
- 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)
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.
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.
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.