NAME
antlr - ANother Tool for Language Recognition
SYNTAX
antlr [options] grammar_files
DESCRIPTION
Antlr converts an extended form of context-free grammar
into a set of C functions which directly implement an efficient
form of deterministic recursive-descent LL(k) parser. Context-free
grammars may be augmented with predicates to allow semantics to
influence parsing; this allows a form of context-sensitive parsing.
Selective backtracking is also available to handle non-LL(k) and
even non-LALR(k) constructs. Antlr also produces a
definition of a lexer which can be automatically converted into C
code for a DFA-based lexer by dlg. Hence, antlr
serves a function much like that of yacc, however, it is
notably more flexible and is more integrated with a lexer generator
(antlr directly generates dlg code, whereas
yacc and lex are given independent descriptions).
Unlike yacc which accepts LALR(1)
grammars, antlr accepts LL(k) grammars in an extended BNF
notation --- which eliminates the need for precedence rules.
Like yacc grammars, antlr grammars can use
automatically-maintained symbol attribute values referenced as
dollar variables. Further, because antlr generates top-down
parsers, arbitrary values may be inherited from parent rules
(passed like function parameters). Antlr also has a
mechanism for creating and manipulating abstract-syntax-trees.
There are various other niceties in antlr, including the
ability to spread one grammar over multiple files or even multiple
grammars in a single file, the ability to generate a version of the
grammar with actions stripped out (for documentation purposes), and
lots more.
OPTIONS
- -ck n
- Use up to n symbols of lookahead when using compressed
(linear approximation) lookahead. This type of lookahead is very
cheap to compute and is attempted before full LL(k) lookahead,
which is of exponential complexity in the worst case. In general,
the compressed lookahead can be much deeper (e.g, -ck 10)
than the full lookahead (which usually must be less than 4).
- -CC
- Generate C++ output from both ANTLR and DLG.
- -cr
- Generate a cross-reference for all rules. For each rule, print
a list of all other rules that reference it.
- -e1
- Ambiguities/errors shown in low detail (default).
- -e2
- Ambiguities/errors shown in more detail.
- -e3
- Ambiguities/errors shown in excruciating detail.
- -fe file
- Rename err.c to file.
- -fh file
- Rename stdpccts.h header (turns on -gh) to file.
- -fl file
- Rename lexical output, parser.dlg, to file.
- -fm file
- Rename file with lexical mode definitions, mode.h, to
file.
- -fr file
- Rename file which remaps globally visible symbols,
remap.h, to file.
- -ft file
- Rename tokens.h to file.
- -ga
- Generate ANSI-compatible code (default case). This has not been
rigorously tested to be ANSI XJ11 C compliant, but it is close. The
normal output of antlr is currently compilable under both
K&R, ANSI C, and C++---this option does nothing because
antlr generates a bunch of #ifdef's to do the right thing
depending on the language.
- -gc
- Indicates that antlr should generate no C code, i.e.,
only perform analysis on the grammar.
- -gd
- C code is inserted in each of the antlr generated
parsing functions to provide for user-defined handling of a
detailed parse trace. The inserted code consists of calls to the
user-supplied macros or functions called zzTRACEIN and
zzTRACEOUT. The only argument is a char * pointing to
a C-style string which is the grammar rule recognized by the
current parsing function. If no definition is given for the trace
functions, upon rule entry and exit, a message will be printed
indicating that a particular rule as been entered or exited.
- -ge
- Generate an error class for each non-terminal.
- -gh
- Generate stdpccts.h for non-ANTLR-generated files to
include. This file contains all defines needed to describe the type
of parser generated by antlr (e.g. how much lookahead is
used and whether or not trees are constructed) and contains the
header action specified by the user.
- -gk
- Generate parsers that delay lookahead fetches until needed.
Without this option, antlr generates parsers which always
have k tokens of lookahead available.
- -gl
- Generate line info about grammar actions in C parser of the
form # line "file" which makes error
messages from the C/C++ compiler make more sense as they will point
into the grammar file not the resulting C file. Debugging is easier
as well, because you will step through the grammar not C file.
- -gs
- Do not generate sets for token expression lists; instead
generate a ||-separated sequence of LA(1)==token_number.
The default is to generate sets.
- -gt
- Generate code for Abstract-Syntax Trees.
- -gx
- Do not create the lexical analyzer files (dlg-related). This
option should be given when the user wishes to provide a customized
lexical analyzer. It may also be used in make scripts to
cause only the parser to be rebuilt when a change not affecting the
lexical structure is made to the input grammars.
- -k n
- Set k of LL(k) to n; i.e. set tokens of look-ahead
(default==1).
- -o dir
- Directory where output files should go (default="."). This is
very nice for keeping the source directory clear of ANTLR and DLG
spawn.
- -p
- The complete grammar, collected from all input grammar files
and stripped of all comments and embedded actions, is listed to
stdout. This is intended to aid in viewing the entire
grammar as a whole and to eliminate the need to keep actions
concisely stated so that the grammar is easier to read. Hence, it
is preferable to embed even complex actions directly in the
grammar, rather than to call them as subroutines, since the
subroutine call overhead will be saved.
- -pa
- This option is the same as -p except that the output is
annotated with the first sets determined from grammar analysis.
- -prc on
- Turn on the computation and hoisting of predicate context.
- -prc off
- Turn off the computation and hoisting of predicate context.
This option makes 1.10 behave like the 1.06 release with option
-pr on. Context computation is off by default.
- -rl n
- Limit the maximum number of tree nodes used by grammar analysis
to n. Occasionally, antlr is unable to analyze a
grammar submitted by the user. This rare situation can only occur
when the grammar is large and the amount of lookahead is greater
than one. A nonlinear analysis algorithm is used by PCCTS to handle
the general case of LL(k) parsing. The average complexity of
analysis, however, is near linear due to some fancy footwork in the
implementation which reduces the number of calls to the full LL(k)
algorithm. An error message will be displayed, if this limit is
reached, which indicates the grammar construct being analyzed when
antlr hit a non-linearity. Use this option if antlr
seems to go out to lunch and your disk start thrashing; try
n=10000 to start. Once the offending construct has been
identified, try to remove the ambiguity that antlr was
trying to overcome with large lookahead analysis. The introduction
of (...)? backtracking blocks eliminates some of these
problems --- antlr does not analyze alternatives that
begin with (...)? (it simply backtracks, if necessary, at run
time).
- -w1
- Set low warning level. Do not warn if semantic predicates
and/or (...)? blocks are assumed to cover ambiguous alternatives.
- -w2
- Ambiguous parsing decisions yield warnings even if semantic
predicates or (...)? blocks are used. Warn if predicate context
computed and semantic predicates incompletely disambiguate
alternative productions.
- -
- Read grammar from standard input and generate stdin.c as
the parser file.
SPECIAL CONSIDERATIONS
Antlr works... we think. There is no implicit guarantee
of anything. We reserve no legal rights to the software
known as the Purdue Compiler Construction Tool Set (PCCTS) ---
PCCTS is in the public domain. An individual or company may do
whatever they wish with source code distributed with PCCTS or the
code generated by PCCTS, including the incorporation of PCCTS, or
its output, into commercial software. We encourage users to develop
software with PCCTS. However, we do ask that credit is given to us
for developing PCCTS. By "credit", we mean that if you incorporate
our source code into one of your programs (commercial product,
research project, or otherwise) that you acknowledge this fact
somewhere in the documentation, research report, etc... If you like
PCCTS and have developed a nice tool with the output, please
mention that you developed it using PCCTS. As long as these
guidelines are followed, we expect to continue enhancing this
system and expect to make other tools available as they are
completed.
FILES
- *.c
- output C parser.
- *.cpp
- output C++ parser when C++ mode is used.
- parser.dlg
- output dlg lexical analyzer.
- err.c
- token string array, error sets and error support routines. Not
used in C++ mode.
- remap.h
- file that redefines all globally visible parser symbols. The
use of the #parser directive creates this file. Not used in C++
mode.
- stdpccts.h
- list of definitions needed by C files, not generated by PCCTS,
that reference PCCTS objects. This is not generated by default. Not
used in C++ mode.
- tokens.h
- output #defines for tokens used and function prototypes
for functions generated for rules.
SEE ALSO
dlg(1), pccts(1)