---
name: "pbyacc"
section: "1"
platform: "linux"
package: "perl-byacc"
version: "2.0-10"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/pbyacc"
---

# pbyacc(1)

an LALR(1) parser generator

## 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)](/flex/1.md), [**lex**(1)](/lex/1.md)

*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
