## Software

The following software packages have been created by members of the Theoretical Computer Science Group, and are available for download from our site.

**Grail**- Grail is a symbolic computation environment for finite-state machines, regular expressions, and other formal language theory objects. Using Grail, one can input machines or expressions, convert them from one form to the other, minimize, make deterministic, complement, and perform many other operations. Grail is intended for use in teaching, for research into the properties of machines, and for efficient computation with machines. Grail is written in C++. It can be accessed either through a process library or through a C++ class library.
**Grama**- GraMa will be a symbolic computation environment for pushdown machines, context-free expressions, context-free grammars and other formal language theory objects. Using GraMa, one can input machines, expressions or grammars, convert them from one form to the other, reduce them, convert them into specified normal forms and perform other operations. GraMa is intended for use in teaching, for research into the properties of grammars, and for efficient computation with grammars and machines. GraMa will be written in C++. It will be accessed either through a process library or through a C++ class library.
**ANN**- ANN is a library written in C++, which supports data structures and algorithms for both exact and approximate nearest neighbor searching in arbitrarily high dimensions.

Web page maintained by Siu-Wing Cheng, HKUST Theoretical Computer Science Group