Software and Languages

I have developed a number of software systems and languages since graduating in 1985.

STRATA and KERIS

The first system was a demonstrator for the PCTE that turned into the AI toolkit called STRATA, later renamed KERIS. This started as a knowledge representation and reasoning system for the Knowledge Based Programmer's Assistant demonstrator on the PCTE based on McAllister's constraint satisfaction system. We extended this with emerging technologies from Knowledge Representation such as frames and rule systems (both forward - OPS5 and backward - Prolog) and I was responsible for one of the first CLOS implementations outside the West Coast. The resulting STRATA system was branded as the first UK AI toolkit. We ported it to Poplog Common Lisp and used the graphical toolkit to create a system in the style of KEE and KnowledgeCraft. STRATA was renamed KERIS and developed as a commercial product.

Home.

EBG

EBG was developed as a lazy functional language that compiled to the Java VM. The aim of EBG was to construct a hybrid language system that benefited from the declarative features of FP and could easily drop in and out of Java when required.

Home.

MML, MMF and MMT

The language MML was defined as part of the UML 2.0 initiative from the OMG. MML is a meta-modelling language based on the idea of capturing reusable patterns for language definition. MML is part of a general approach to modelling language definition called MMF that advocates a semantics driven approach in terms of modelling concrete, abstract and semantic domains with relationships between them. MMF is supported by a tool called MMT that allowed all the modelling components to be constructed in a high-level programming language. Patterns are supported in MMT by parametric packages that can be stamped out by supplying modelling elements as arguments.

Home.

XMF and XMF-Mosaic

XMF

XMF is a programming language for Language Oriented Programming and developing Domain Specific Languages. XMF is a fully featured language that can be used to process XML, interface to Java (including EMF) and connect to input/output data streams. XMF is a very high-level OO language and supports a number of features that abstract away from implementation details including: dynamic typing; dynamically loaded definitions; sets and sequences; first-class functions; continuations; pattern matching. XMF provides first-class grammars that are used to define new language features which become immediately integrated into the core language. XMF is based on a small VM written in Java. Most of XMF is written in XMF.

XMF is available open-source under the Eclipse Public License. XMF has extensive tutorial and reference documentation. XMF can be downloaded by following this link. You can get the source code for XMF as a collection of Eclipse projects by clicking on this link.

XMF-Mosaic is an Eclipse-based IDE for developing XMF applications. On first inspection, XMF-Mosaic provides similar functionality to most modelling tools that offer information modelling based on class diagrams. However, because XMF-Mosaic is based on XMF, models can be made executable through the XMF language. Furthermore, XMF-Mosaic provides an open-architecture since it is all written in XMF on top of a small collection of GEF primitives. Virtually all aspects of the modelling IDE can be redefined and extended by loading new XMF code.

XMF-Mosaic is available open-source under the Eclipse Public License. XMF-Mosaic includes an extensive help system including tutorials and walkthroughs. XMF-Mosaic can be downloaded by clicking on this link. You can get the source code for XMF-Mosaic (including the appropriate version of XMF) as a collection of Eclipse projects by clicking on this link.

Home.

XML Parsing

XMF supports an XML parser that uses SAX events in conjunction with a BNF-style XML grammar language. A grammar consists of clauses that match elements and actions in clauses synthesize results. The grammar can be exported as Java code that runs on a stand-alone implementation of the parser. The actions are translated into Java stubs that are called as the parse progresses.

Home.