Automaton Definition Language (ADL) is a new language created for the needs of my school project – finite automaton compiler. Syntax of ADL is really simple and everyone with a decent theoretical background should be able to read and understand it.

ATools is a set of tools for working with automata defined using ADL. The set consists of a compiler (called AC) and a debugger (called AD). The compiler is able to compile ADL into 32bit relocatable object module format (OBJ), which can be then linked into Windows EXE or DLL. AD allows you to debug linked executables and follow the word recognition process of compiled automaton.

Brief look at ADL

ADL was designed to be a definition language for describing many kinds of automata – from finite automata, through mealy machines to pushdown automata. Today, only deterministic finite automata are supported by ATools, but this can change in the future.

An automaton defined in ADL looks like this:

automaton EvenACount: FiniteAutomaton { 
    initial final state q1; // even 'a' count 
    state q2;               // odd 'a' count 
    transition(q1, 'a') = q2; 
    transition(q2, 'a') = q1; 

This automaton accepts words containig the symbol “a”, but only if the length of the word is an even number.

Brief look at ATools

AD is a debugger for automata compiled using AC, the Automaton Compiler. AD can only debug executables compiled using the /DEBUG command line option.

AD is only able to debug EXE files. It is not suitable for debugging DLL files.

AC is a lightweight compiler for ADL – the automaton definition language. It allows you to compile *.AUT files into relocatable object module format – *.OBJ. The object files can then be linked into Windows EXE or Windows DLL files. Microsoft’s Incremental Linker (from Windows 98 DDK) is included in the package.

Both AD and AC are written in Delphi (with a touch of x86 assembler) and their source code is a part of the distribution package. They are both distributed under the terms of the MIT license.

Featured project

This is a personal web page, with personal opinions.
Content posted herein does not establish the official position of my employer.