[om] OM class

Alberto Gonz ález Palomo Alberto.Gonzalez at matracas.org
Mon Apr 19 22:07:08 CEST 2004


On Mon, 19 Apr 2004 15:01:40 +0100
Mike Dewar <miked at nag.co.uk> wrote:

> On Mon, Apr 19, 2004 at 10:03:12AM +0200, Cédric Vidrequin wrote:
> > Hello,
> > I'm looking for a class (or a set of classes) that allows me to generate 
> > an XML file (or XML tree object) from an input string.
> > 
> > For example : I have the string y = a*x+b
> > I'm looking for something like that : 
> > String str = "y=a*x+b";
> > // in the next line, types are imaginated to explain better what I'm 
> > looking for
> > OpenMathObject omo = nex OpenMathObjetc(str);
> > omo.writeXML(new outputStream("myFile.xml"));
> >[...]
> 
> What you are asking for isn't really practical since it requires
> knowledge of the syntax of your string, and that probably depends to the
> application area that you are working in.
>[...]

	This point is very important, but easy to overlook.
	Just look at the variety of ways of doing even elementary tasks
among CAS systems:

http://www.univ-orleans.fr/EXT/ASTEX/astex/doc/fr/rosetta/htmla/roseta.htm

	And this is within a single class of software that shares many
conventions, such as using a dot as decimal separator instead of comma,
and covers more or less the same concepts.

> 
> You can find a class library for creating and manipulating OpenMath
> objects by following the links from www.openmath.org/software to "the
> RIACA OpenMath Library".  Alternativey, if your string uses the syntax
> of a mathematical package such as GAP, Maple or Mathematica, you might
> want to look at the phrasebooks for those systems.  I believe that those
> from RIACA (linked from the above page) are written in Java.

	As a part of the new exercise system in ActiveMath [1], I've
written a parser library that produces a JDOM [2] XML tree with the
OpenMath representation from a string written in a selectable syntax.
	The parser creation is like this:

parser = CasParser.newCasParser(userInput, userInputSyntax);

	Where "userInput" is the input string, and "userInputSyntax"
the identifier for the grammar you want to use. So far, there are 10
parsers, that allow the user to choose among the syntaxes of the
CAS systems Yacas, Maxima, Axiom, Maple(tm), Mathematica(R), MuPAD,
Derive and REDUCE, and then a custom grammar for a specific application
(that uses comma as decimal separator), and XML-encoded OpenMath.
	They only deal with the symbols we expect users to employ in their
answers, not things like "for" loops, procedure or pattern definitions,
etc.
	The parsers are made by the parser generator JavaCC. The article
I used for learning how to use it is at:

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-cooltools.html

	Instead of operating on the parsed objects, you build the OM
tree. For example, instead of the rule for <NUMBER> (second page, bottom):

    t=<NUMBER>          { return Double.parseDouble(t.toString()); }

	I have this (once split NUMBER into DOUBLE and INTEGER):

    t=<INTEGER>         { return omi(t.image); }
|   t=<DOUBLE>          { return omf(t.image); }

	The function "omi()", for example, could be as follows:

static Element omi(String n)
{
    return (new Element("OMI", omNamespaceUri)).addContent(n);
}

	Similarly, the line for "*" (arith1.times) is:

    |   "*" exp=exprPrec3()    { om = oma(oms("*"), om, exp); }

	The only special thing here is that oms() uses a dictionary
for translating the abbreviated name of the symbol into the "cd" and
"name" needed for building the "OMS" element, for convenience. It
also works as 'om = oma(oms("arith1", "times"), om, exp)'.

	So I would advise you (Cédric) to write your own parser.
	It's going to give you much more flexibility than the existing
software, and it's really quick to do, without having to care about
licences or bloating your code with functionality you don't need. Unless
you really want to connect to, say, Maple or Mathematica, in which case
using for example the RIACA libraries (written in Java, as Mike noted),
would make sense. But for quick building of OpenMath from linear syntax,
it's being so far a good solution for us.

[1] http://www.activemath.org
[2] http://www.jdom.org

	Cheers,
-- 
	Alberto González Palomo
	Toledo, España / Saarbrüecken, Deutschland.
	http://www.matracas.org
--
om at openmath.org  -  general discussion on OpenMath
Post public announcements to om-announce at openmath.org
Automatic list maintenance software at majordomo at openmath.org
Mail om-owner at openmath.org for assistance with any problems



More information about the Om mailing list