Introduction
Awali is a software platform for computing with finite automata, in the broadest meaning of the term. It includes classical finite automata (rather called here Boolean automata); finite weighted automata with the instantiation of a large panel of weight semirings, finite (weighted) transducers, that is, automata over tuples of words rather than over words; and rational expressions for all these.
Awali is organised into three layers: the static layer, the dynamic layer, and the interface layers. This doxygen documentation is about the former two. (The documentation of Cora may be found with the help
command; the documentation of the Python interface is directly available in the docstrings).
- The static layer is part of namespace awali::sttc. It focuses on efficiency rather than user-friendlyness. As a result all types and functions are highly templated. Experts only.
- The dynamic layer is contained in namespace awali::dyn. All types are erased in order to have only a few types. Recommended for C++ programmers.
- A few constructs that are common to both layers (mostly enums and hash functions) are directly in namespace awali.
Executive summary of the dynamical layer
Getting started
- It is recommended to use the following lines in your programs (it is usually assumed in examples).
#include <awali/dyn.hh>
using namespace awali::dyn;
using namespace awali; // Mostly useful with the Options mechanism
- Compile with option
-lawalidyn
- Take a look at files in directory
awali/dyn/examples
for a few examples.
- At runtime, static modules are compiled the very first time an algorithm is executed in a given context. It takes up to twenty seconds.
Brief description of content