Baroque is essentially a collection of two different sort of modules:
Baroque can already generate something like this:
SELECT B.bookID, B.title FROM Books B WHERE POSITION('C++' IN B.title) > 0; |
Input and output modules work in pipe: in this case the SQL input module translates the SQL source code into the intermediate TML code; the HTML output module takes the TML code and produces the HTML data that you see rendered above.
It's quite easy to write input and output modules: they are
essentially lexical analyzers which can be automatically generated
using flex, and most languages share a big part of the lexical
definitions.
The real challenge is to support all languages (I eventually intend to
write or mantain modules for any language having at least one free
implementation) in a coherent way, making user configuration
essentially independent from the language. This is one big issue.
Configuration files for output modules (if needed I will extend this also to input modules) are Scheme programs binding values to variables which output modules can easily read. Scheme support is implemented with the excellent GNU Guile.
A version of all these modules is already working:
Input modules | Output modules |
---|---|
Ada C C++ Java Lisp Pascal Scheme SQL |
HTML text with ANSI terminal sequences |
I also plan to write modules for:
Input modules | Output modules |
---|---|
BASIC (?) HTML lex (hard) make (hard?) ML Python yacc (hard) |
Dot-matrix and ink-jet text printer |
Input modules for flex and bison (and also make?) would be very attractive but they would also need syntactic knowledge apart from lexical knowledge; they can't be created using flex alone, they would need both it and bison. I'm going to investigate and see whether it's worth the trouble.
There are many interesting and widely-used languages that I don't know
or don't know yet; I need help for this. If the language doesn't
require syntactic analysis (all common programming languages don't)
then helping is very easy: a flex scanner is all it's
needed. Extensive documentation is near to come.
I need help to support:
Input modules | Output modules |
---|---|
Assembly languages (AT&T syntax) FORTRAN Perl Tcl XML XUL |
PostScript (via GNU Enscript?) Latex |
.pl
stands for both Prolog and Perl,
and .h
is used for both C and C++ headers.
I also would like very much:
$Author: positrone $
$Date: 2003/06/11 22:04:06 $