W3C home > Mailing lists > Public > public-ixml@w3.org > April 2021

Re: design question? or puzzle?

From: Steven Pemberton <steven.pemberton@cwi.nl>
Date: Tue, 13 Apr 2021 13:06:46 +0000
Message-Id: <1618319018513.1762484216.4118606381@cwi.nl>
To: "C. M. Sperberg-McQueen" <cmsmcq@blackmesatech.com>, public-ixml@w3.org
Cc: "C. M. Sperberg-McQueen" <cmsmcq@blackmesatech.com>
Sorry, it got sent by accident before I was finished.  Continuing:
> This may be a design question for ixml, or it may be just a puzzle about how to use ixml to achieve the goal. I’m not sure.

I think the latter. People are pressurising me to do something on ixml for Declarative Amsterdam (advert: 4 and 5 November 2021), and maybe I should do a tutorial. Which means I have to finish a releasable implementation. Oh well, at least I have something to do over the summer.

 I was sure I already published an example of doing the sort of thing you are asking for here, but I don't seem to be able to find it. Did I dream it? Or do I have to search harder. I'll do the latter.

> > First, consider a simple grammar for arithmetic expressions:
> >
> > expression: sum.
> > sum: product+addop.
> > product: factor+mulop.
> > factor: number; identifier; ‘(‘, expression, ‘).
> > addop: ‘+’; ‘-‘.
> > mulop: ‘/‘; ‘*’; ‘×’; ‘÷’.
> > …
> >
> > An XML representation of this, as an ixml parser would produce it, works nicely to exhibit the structure of an expression like 2 x^3 + 17 x^2 -5x + 7:
>

The above grammar neither recognises this expression, nor produces the following serialisation, since it doesn't accept an implicit multiply sign, nor convert x^2 to x x.

> > But this XML representation for the number 3 might feel ... a bit heavy in some contexts:
> >
> > <expression>
> > <sum>
> > <product>
> > <factor>
> > <number>3</number>
> > </factor>
> > </product>
> > </sum>
> > </expression>
>
> True, but you can elide all of the unnecessary bits: you never need product or factor, since they are there for syntactic reasons, not semantic:

expression: expr. 
-expr: term; sum.
sum: term, "+", term+"+".
-term: factor; prod.
prod: factor, "×", factor+"×".
-factor: id; number; "(", expr, ")".
id: ["a"-"z"]+.
number: ["0"-"9"]+, (".", ["0"-"9"]+)?.

would give

<expression><number>3</number></expression>

Steven
Received on Tuesday, 13 April 2021 13:07:06 UTC

This archive was generated by hypermail 2.4.0 : Tuesday, 13 April 2021 13:07:07 UTC