Aflex is a lexical analyzer generating tool similar to the Unix tool lex.
The first implementation was written by John Self of the Arcadia project at the University of California, Irvine. The last version that was released appeared to be the aflex 1.4a released in 1994.
Aflex was used and improved by P2Ada, the Pascal to Ada translator. This version of Aflex is derived from the P2Ada aflex implementation released in August 2010.
This version brings a number of improvements:
- Aflex generates the spec and body files as separate files so that there is no need to use gnatchop to split the DFA and IO files.
- Aflex uses the lex file name to generate the package name and it supports child package.
- Fix #5: Ada.Text_IO. missing in a template
- Feature #6: Maybe support larger integer types for
yylineno
Add%option yylinenotype=TYPE
and%yydfa
code block to customize the type of theyylineno
variable. - Fix #8: %reentrant causes a syntax error in parser-lexer_io.ads
- Fix #2: Missing
Input_Line
function when-E
option is used - Support the flex options
%option output
,%option nooutput
,%option yywrap
,%option noinput
,%option noyywrap
,%option unput
,%option nounput
,%option bufsize=NNN
to better control the generated_IO
package. - Aflex templates provide more control for tuning the code generation and they are embedded with Advanced Resource Embedder
- Support to define Ada code block in the scanner that is inserted in the generated scanner
- New option -P to generate a private Ada package for DFA and IO
- New directive
%option reentrant
and%yyvar
to generate a recursive scanner - New directive
%yydecl
to allow passing parameters toYYLex
or change the default function name - Reformat code using
gnatpp
- Fix crash when the scanner file uses characters in range 128..255,
- Fixed various compilation warnings,
- Use
gprbuild
to build and supportalr
, - Reduced number of style compilation warnings in generated code
- Aflex now supports the %option definition in lex files to control the scanner. The following keywords are recognized: case-insensitive, casefull, case-insensitive, caseless, debug, interactive, full.
make
make install prefix=/usr
aflex doc/example.l
gnatmake example.ada
-
Man page: aflex (1)
-
Aflex 1.5 and Ayacc 1.3.0 explains how to use Aflex and Ayacc together, Aflex 1.5 et Ayacc 1.3.0 is the French translation.