LALR(1)

NAME
lalr - LALR(1) parser generator

SYNOPSIS
lalr [-c|-m|-eiffel] [-b][-d][-e][-h][-l][-p][-s][-g]
     [-v][-f][-t] [-eiffelsupport] [-cs][n] <file>

DESCRIPTION
Lalr is a parser generator for highly efficient parsers which processes the class of LALR(1) grammar. The grammars may be written using EBNF constructs. Each grammar rule may be associated with a semantic action consisting of arbitrary statements written in the target language. Whenever a grammar rule is recognized by the generated parser the associated semantic action is executed. A mechanism for S-attribution (only synthesized attributes) is provided to allow communication between the semantic actions. Ambiguities in the grammar may be solved by specifying precedence and associativity for tokens and grammar rules.

In case of LR-conflicts a derivation tree is printed to ease the location of the problem. The conflict can be resolved by specifying precedence and associativity for terminals and rules. Syntactic errors are handled fully automatically by the generated parsers including error reporting, recovery, and repair. The generated parsers are table-driven.

The generated parser needs a scanner, an error handler, and a few modules from a library of reusable modules. A primitive scanner can be requested with the option -s. The option -e produces a prototype error handler. Errors detected during the analysis of the grammar are reported on standard error. If the generator finds LR-conflicts and option -v is given the file _Debug will be produced. This file will give detailed informations about the conflicts. If any conflict has been repaired using precedence and associativity a conflict description is written to the file _Debug, too.

OPTIONS

c   generate C source code

m   generate Modula-2 source code (default)

eiffel
    generate Eiffel source code

a   generate all = -d -e -p -s

b   run the preprocessor bnf and feed its output into lalr

d   generate definition module

e   generate module for error handling

p   generate parser driver

s   generate mini scanner

eiffelsupport
    generate support modules for Eiffel

g   generate # line directives

v   verbose: produce debugging information in file _Debug (long and slow)

f   fast : produce debugging information in file _Debug (short and fast)

cs  reduce the number of case labels in switch or case statements by mapping so-called read-reduce to reduce states (increases run time a little bit but decreases code size, might be necessary due to compiler restrictions)

<n> generate switch or case statements with at most n case labels (might be necessary due to compiler restrictions)

t   print statistics about the generated parser

h   print further help information

l   print complete (error) listing

FILES
_Debug	file containing the debug information if grammar is not
	LALR(1) and option -v is given

if output is in C:

<Parser>.h	specification of the generated parser
<Parser>.c	body of the generated parser
<Parser>Drv.c	body of the parser driver
Errors.h	specification of error handler
Errors.c	body of error handler
<Scanner>.h	specification of scanner
<Scanner>.c	body of scanner

if output is in Modula-2:

<Parser>.md	definition module of the generated parser
<Parser>.mi	implementation module of the generated parser
<Parser>Drv.mi	implementation module of the parser driver
Errors.md	definition module of error handler
Errors.mi	implementation module of error handler
<Scanner>.md	definition module of scanner
<Scanner>.mi	implementation module of scanner

if output is in Eiffel:

<parser>.e	class of the generated parser
<parser>drv.e	class of the test driver (main program)
<parser>.txt	tables to control the generated parser in ASCII form
errors.e	class of error handler
<scanner>.e	class of scanner
attribute.e	support class
scanattribute.e	ditto
sets.e	ditto
lsarray.e	ditto
statecontrol.e	ditto

SEE ALSO
J. Grosch, B. Vielsack: "The Parser Generators Lalr and Ell", GMD Forschungsstelle an der Universitaet Karlsruhe, Compiler Generation Report No. 8, 1991

J. Grosch: "Lalr - a Generator for Efficient Parsers", Software - Practice & Experience, 20 (11), 1115-1135, Nov. 1990