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 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.