- From: Steven Pemberton <steven.pemberton@cwi.nl>
- Date: Tue, 13 Apr 2021 13:06:46 +0000
- 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