What is "Open Language"?

Mark Waddingham mark at livecode.com
Tue Oct 27 05:50:34 EDT 2015


On 2015-10-24 21:12, Richard Gaskin wrote:

> My favorite example is the "export snapshot" command - even with the
> Dictionary guidance we all need to turn to for that no matter how many
> times we've used it, it's so complex with such a combinatorial
> explosion of options that I defy anyone to make a readable BNF for it.
> :)

The 'export snapshot' command is rather unfortunate. It was augmented by 
me to add the ability to snapshot an object directly (rather than the 
screen) and because (to be blunt) the actual code for the syntax of the 
export command was always a complete 'botched' job I did the best that I 
was able to do.

Indeed, I'd defy anyone to make truly accurate BNF for *any* of the 
language's current syntax - this is actually a tremendous problem which 
limits a great deal. The parser is very poorly implemented in this 
regard. It was never done with any amount of rigour, nor following any 
standard structured techniques for such things (it dates back from long 
before my tenure). Indeed, having spent many years studying programming 
language design and implementation before I joined RunRev (as it was 
then), when I actually saw how it was implemented to say I was 
'surprised' would be an understatement.

(It is extremely important to understand that perturbing the parsing 
code in any way runs the risk of breaking existing scripts... Precisely 
because it was never written to a high enough specification standard).

Now, that being said, it obviously does work - and given the amount of 
code out there which is run through its internals the outward effects of 
however it is implemented internally is not necessarily affected. What 
is hugely affected though are things which are incredibly important if 
you want to do describe, extend or do any 'clever' processing of the 
language.

The problem is that because the parser is so lax, and almost impossible 
to pin down to a tight specification of what it recognizes, the actual 
definition of what LiveCode Script currently is syntax-wise, is entirely 
defined by the implementation of the parser.

After the refactor work we did for 7, however, we can actually finally 
do something to clean this up. We have 'unhooked' the execution of 
parsed commands from the representation of the parsed commands in 
memory, and thus this means that it will make it possible to implement a 
tool which maps an existing parsed script to a cleaner syntax.

Before anyone gets concerned, I'm not proposing anything drastic here at 
all. Each piece of syntax the current engine understands will have a 
representative form chosen which will then be used for the 'unparsing'. 
The original parser would be used to compile each line, and then the 
result put through a reverse operation to generate string matching a 
normalized form in each case. For example, one of my favourite examples 
of the unwieldy parser is 'accept connections' as you can do this:

    accept accept accept accept 1000 with empty "callbackMessage"

The (normalized) representative form would be:

    accept connections on port 1000 with message "callbackMessage"

If the syntax of the language can be pinned down to a simple variant of 
Backus-Naur Form (BNF) then a great deal of things become a great deal 
easier.

> For example, if "export snapshot" were an R command it might look
> something like:
...
> ...gives you a gorgeous scatter plot with useful x- and y-axis labels
> and well-placed tick marks, without having to specify anything; you
> can specify as much or as little as you like with most commands and
> expect a useful result.

That's great. I'm glad R does things like that - I'm sure it has 
developed its ideas and forms as appropriate to its explicit very 
restricted domain (and a great great deal more restricted than  
LiveCode).

> I'm not proposing LiveCode switch to name-value pair arguments, but in
> some cases it would be a nice option, "export snapshot" being among
> them.

Well it is a possibility - but, like adding 'dot' notation - I have to 
ask is that the right thing for LiveCode (xTalks)... Surely it would be 
better to work out how the English-like nature is best preserved, and 
implement a system which means it can be done easily...

Oh wait - that's the point of Open Language :)

Warmest Regards,

Mark.

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list