i. Introduction

Lexi translates a description of a lexical analyser into C code implementing that analyser. It aims to provide simple, straightforward features for lexical analysis, and to leave more complex behaviour to its calling program.

This document describes how to use the Lexi lexer generator. It was written for Lexi version 2.0.

This version of Lexi (trunk pre 2.0) is the current working version. Once all new features have been added, we will tag a 2.0-proto-1 release. The 2.0 release will happen once we have frozen the syntax. Backward compatibility is not preserved with regards to 1.3. However, we are currently working on an option switch that would emulate old behavior.

This document is a modification of the userguide for Lexi 1.3. Lexi 1.3 was an interim release to mark a stable release before forthcoming API changes scheduled for the next release. This provides no features over 1.2 save for some minor points (listed under the change history below); it serves mostly to collate the restructuring of the codebase during development; 1.3 is the first release of Lexi as a stand-alone product, separate to the TenDRA distribution.

Any original documentation Lexi once had previous to version 1.3 is lost. Since there is no surviving documentation, this guide has been written from scratch, based from observations of the source code. It is difficult to distinguish between obscure features and undefined behaviour; we are taking the opportunity here to explicitly state which features are undefined behaviour and which are intentional. We try to maintain backwards compatibility with these features, based on the Lexi files present in the TenDRA repository.