Jump to content
TurboMagic

Project to create a language definition in BNF format started

Recommended Posts

Hello,

 

this is to let you know that there was a open source collaboration project started to create a formal specification of
the Delphi language in Backus-Naur format (https://en.wikipedia.org/wiki/Backus–Naur_form).

 

It is hosted on GitHub here: https://github.com/MHumm/DelphiGrammar

David Hoyle contributed his Delphi 10.3 version as a starting point.

If you want to participate in this endeavor, which might help developers of language tools, just
drop me a message with your GitHub account name and I'll give you commit permission.

Either via this forum or as an issue on that GitHub project.

 

Currently I picked Apache 2.0 as license, but if necessary we can discuss to use something else.

 

Cheers

TurboMagic

Share this post


Link to post
10 minutes ago, TurboMagic said:

If you want to participate in this endeavor, which might help developers of language tools, just
drop me a message with your GitHub account name and I'll give you commit permission.

Have you considered keeping the number of direct committers small and let the majority of interested participants provide their contributions via pull requests?

Share this post


Link to post

This would be another approach. At least for the start we should attract many developers to get it started. I know that you're after, but if we make entry barrier as low as possible at the start we might attract more contributors. We can still switch afterwards if we find that some don't do the right things.

 

But: we need people working on it. Otherwise it's useless... 😉

Share this post


Link to post

Now I am. Thanks! But for which version is this? The one our new project already has as starting point is compatible with 10.3 and I guess mostly compatible with that release so I guess it's newer than the one you linked. But you can compare both versions I guess...?

 

Share this post


Link to post
1 hour ago, TurboMagic said:

I know that you're after, but if we make entry barrier as low as possible at the start we might attract more contributors.

Perhaps it is just my take of it, but being a contributor bears some responsibility - for the whole repository and not only for the part you contribute. I wouldn't call that lowering the barrier.

 

On the other hand, forking the repo, doing your thing and creating a pull request seems much less hassle to me. Anyway, everyone can just do so whatever you decide.

  • Like 1

Share this post


Link to post
9 minutes ago, TurboMagic said:

Now I am. Thanks! But for which version is this? The one our new project already has as starting point is compatible with 10.3 and I guess mostly compatible with that release so I guess it's newer than the one you linked. But you can compare both versions I guess...?

My guess would be that the on in the Delphi Wiki is older than Delphi 10.3.

Share this post


Link to post

This BNF was new thing for me.

Is there some easily usable "things" we could benefit from that Grammar. Any cool tools that could use that etc.

Please educate me and others BNF-challenged persons :)

 

-Tee-

Share this post


Link to post

Syntax diagrams are easier to read and understand than BNF or ABNF and they look good in any documentation :classic_rolleyes:, but BNF is better suited for automated parsing and validation.

Share this post


Link to post
2 hours ago, Tommi Prami said:

Please educate me and others BNF-challenged persons 🙂

Didn't you read the wikipedia link on Backus-Naur format?

 

2 hours ago, Alexander Elagin said:

Syntax diagrams are easier to read and understand than BNF or ABNF and they look good in any documentation

There are a few online tools that generates railroad diagrams from EBNF (https://www.bottlecaps.de/rr/ui is probably the best known) but I know of none that operate on BNF. I actually don't think the original BNF is much used outside old textbooks.

  • Like 1

Share this post


Link to post

Re BNF vs diagrams…

as the format should be formal, it would allow for diagrams to be created easily using tools like graphgviz/dot and sexier/modern versions thereof.


Re benefits of a grammar

it can be used as a basis for all kinds of things… once a model is created using a parser generator or manually crafted, you can create things that might be out of scope of the actual compiler. E.g. static code analysis, documentation generation, dependency analysis (between units), search tools, creating diagrams, etc.

 

Writing parsers can take a bit of effort, and to do it correctly, the grammar needs to be right. There is a lot of boiler plate (repeated patterns) when it comes to parsing, so over time people have written parser generation tools to assist with this process more optimally (and avoid bugs). Their input would normally be a bnf type config file. Examples of such tools is yacc (yet another compiler compiler), etc. I personally like the ANTLR framework. Unfortunately, the latest version 4 doesn’t have a Delphi runtime, but version 3 had one. 
 

it would be convenient to update this to fit in with one of those tools as it also makes it easier to instantly validate and create test cases on the grammar.


 

 

 

  • Like 1

Share this post


Link to post
7 hours ago, Anders Melander said:

Didn't you read the wikipedia link on Backus-Naur format?

 

Read parts of it, but did not shed much light on how we could use it. I'll try to read it later with some though.

 

-Tee-

Share this post


Link to post

It's my file using extended backus-naur format.
It's easier for me to maintain these files along side my parsers than using diagrams.
The Object Pascal files started from the grammar that was included in the Delphi 7's Object Pascal Guide.

Share this post


Link to post

I can't find a validator that will accept the Object Pascal Grammar.

Share this post


Link to post

There is one in by Browse and Doc It IDE plug-in.
Its extended because BNF is single line and I needed multi-line and introduced the semi-colon to me line termination detection easier.

  • Like 1

Share this post


Link to post

In the Wikipedia page on EBNF, it does not appear to support ::= as a symbol for definition -- it specifies =.

I would think that for the project to have value, it needs to adhere fully to EBNF. That said, I claim no expertise in language specification.

UPDATE: I note that there is a link on the Wikipedia page for EBNF which offers a zipped PDF of the ISO variant of EBNF: http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip

Unfortunately, the file I received in two separate attempts can't be opened as a zip, but provokes an error saying the file is corrupt.

Edited by Bill Meyer

Share this post


Link to post

I guess the problem is the use of semicolons in the grammar to separate the rules, which seems not to be standard BNF.

Share this post


Link to post
58 minutes ago, Lars Fosdal said:

There is a diagram renderer here: https://www.bottlecaps.de/rr/ui - but it barfs on the first definition.

If you look at https://www.w3.org/TR/2010/REC-xquery-20101214/#EBNFNotation and https://www.w3.org/TR/xml/#sec-notation you will see that it uses some in between format of BNF and EBNF - using the ::= from BNF but not the angle brackets.

Edited by Stefan Glienke

Share this post


Link to post

Yeah, it doesn't look like clean BNF at all. Any BNF parser I tried has had its problems with it.

Share this post


Link to post

 

1 hour ago, Bill Meyer said:

I would think that for the project to have value, it needs to adhere fully to EBNF. That said, I claim no expertise in language specification.

Exactly - and you don't need to be an expert to come to that conclusion.

  • Like 1

Share this post


Link to post
16 minutes ago, Anders Melander said:

 

Exactly - and you don't need to be an expert to come to that conclusion.

No, of course not, but it would not be that difficult for this to become contentious. 😉

Share this post


Link to post
3 hours ago, Uwe Raabe said:

Yeah, it doesn't look like clean BNF at all. Any BNF parser I tried has had its problems with it.

My own casual survey leads me to offer this summary:

  • BNF seems to be considered too limiting, and generally not for new work
  • EBNF, though better, suffers from the extensions being numerous and undisciplined, so there seems to be no "standard" EBNF
  • ABNF appears to be more useful than BNF, and better managed than EBNF -- see IETF RFC 5234

Don't shoot me, I didn't mention "right" and "wrong"!

  • Like 3

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×