It seems they were trying really hard to make EBNF NOT look like the grammar it is representing.
> ISO/IEC 14977:1996 represents “one or more” as { symbol }- which means “0 or more symbols, and then subtract the empty set
It's almost as if they were looking for a special syntax to express "1 or more".
Bizarre ... just bizarre.
(5) -> Once you get it you get it.
Every language specification is odd in its own special way. In any case I haven't really seen BNF/EBNF used in the last few years, so this is probably a moot discussion.
e.g. https://github.com/llvm/llvm-project/blob/llvmorg-20.1.5/cla... and https://github.com/python/cpython/blob/v3.13.3/Grammar/pytho...
Maybe it's a personal thing, but I'd rather something textual that generated a parser than have to hand roll rec decent etc.
"ISO" (International Standards Organization), where you have "national member bodies", should absolutely be a thing of the past for programming languages (or for anything related to computing). My country's national body's own homepage has a huge tirade, aiming to "dispel myths", such as the "myth" that "standards should be available free of charge". Meanwhile, lots of std orgs have published computing standards with various degrees of openness already.
ISO is a relic when it comes to computing. (So are other standards bodies that choose to remain proprietary; like those behind PCI, SCSI, ... Computing is ubiquitous and these bodies should be forced open by law, for the public interest.)
unfortunately i think there us some degree of collusion here. it’s easier to get your existing proprietary standards ratified if there are fewer players in the room and the palms that need to be greased are clearly marked
Software oriented standards are certainly cheaper than metallurgy, machining, manufacturing, building construction, environmental, health & safety, and the other big classes of standards however they still have quite a cost.
Historically the ISO standards development process for software standards (like the C or C++ standards) happened only in small part asynchronously and historically required large, extended-duration committee meetings where all the details were hashed out in person. This process only really started to change during COVID but even then it's still a very in-person synch-heavy process and that's not exactly cheap to run.
And with most standards, the FDIS (final draft international standard) revisions are made public. They can be found online even if they can be annoying to dig up. For 99% of cases the FDIS revision is more than sufficient and is identical to the published standard minus a typo or grammar mistake here and there.
As the average SW dev or engineer of course you don't need to fork over the cost for the published standard but any large company will probably purchase a catalog of standards rather than deal with the overhead of dealing with FDIS (and any legal risk from not following the "true" standard).
It is also worth noting that pretty much every university library (and many public non-university libraries) has some contract or service that provides access to copies of the standard to members free of cost.
- https://github.com/EbookFoundation/free-programming-books/is... -- "The most recent freely available draft of C17/C18 used to be c17_updated_proposed_fdis.pdf, but it's no longer available directly and you need to use Wayback Machine to download it."
- I used to work for a multinational software company whose bread-and-butter was C. The company had indeed purchased a catalog of standards, but that catalog didn't include ISO C. When I formally proposed just that, they rejected it (and kind of made me feel uncomfortable about my proposal, to boot).
For the horrible tedious details, see the “Policy for the distribution of ISO publications and the protection of ISO’s copyright” aka ISO POCOSA 2012.
So is Khronos also a relic? After all if the standards are made available, the contributions are "you have to be this tall to play" kind of entry.
I do agree that ISO should improve itself to modern times, though.
Here is the 2024 update:
https://pubs.opengroup.org/onlinepubs/9799919799/
If you go to the Main Index there is a link to a Downloads page where you can get a tarball of this stuff in some shape or form for local use.
Vast difference between this and the paywalls put up by ISO and their member organizations, and their free PDFs that have only tables of contents.
You mean free pdfs like C and C++ drafts?
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf
https://isocpp.org/files/papers/N4860.pdf
Maybe like Ada,
http://ada-auth.org/standards/ada2y.html
Or Fortran,
https://j3-fortran.org/doc/year/23/23-007r1.pdf
Apparently there is a little more than a table of contents, when people actually know where to look.
Funnily enough, I had ended up contributing to POSIX without trying to. I just participated in mailing list discussions and in the public bug tracker (reporting issues, commenting on tickets etc), for which I only needed to register a no-strings-attached account -- the absolute minimum for participating in any bug tracker. Unexpectedly, I got named in the "Participants" section of the standard. My head is still spinning.
Here are some links for you:
- SUSv2: https://pubs.opengroup.org/onlinepubs/007908775/idx/index.ht...
- SUSv3, 2004 Edition: https://pubs.opengroup.org/onlinepubs/000095399/nfindex.html
- SUSv4, 2024 Edition: https://pubs.opengroup.org/onlinepubs/9799919799/
You can find links to earlier editions of SUSv3 and SUSv4 here: https://en.wikipedia.org/wiki/Single_UNIX_Specification#Exte...
Austin CSRG landing page: https://www.opengroup.org/austin/
Join the group: https://www.opengroup.org/austin/lists.html
Bug tracker: https://austingroupbugs.net/view_all_bug_page.php
I don't know where the SUSv1 PDFs are, I have local copies; but in 2025, they're at best of historical interest.
The programming language standards in particular are the work of "ISO/IEC JTC 1/SC 22 Programming languages, their environments and system software interfaces" which is a sub-committee of the Joint Technical Committee between ISO and the IEC. It's sub-sub-committees all the way down.
I believe ISO processes are ill-suited to this type of work, and that on the whole those languages which still have SC22 working groups would benefit from finding a better home than ISO. The best SDO today (if you can reasonably call the IETF an "organisation" which it says it is not) is the IETF but the IETF doesn't want anything to do with programming languages, so, maybe they could find a home at ECMA where Javascript lives or they could go build their own SDO for purpose.
One option is https://www.oasis-open.org/
> rule = definition; comment CR LF
...so it uses CR/LF as a line terminator as opposed to just LF like POSIX does so you are gonna have text editors and other tools just breaking the format on save.
https://github.com/kstenerud/dogma/blob/master/v1/dogma_v1.0...
That, and also I needed a language that could describe binary data.
Anyway, my go-to tire kicking for any such binary file description format is parsing .pdf files, since they are ferociously hard, and include backreferences
There are definitely going to be horribly convoluted formats that it can't describe without help (which is where custom functions come in). But it's been able to describe most formats I've thrown at it, so that's good enough for Dogma v1.
I was able to get it to describe minidump without function help...
I came across this recently while writing an article that references Lua, Go and Python (3.8) syntax. Each of them uses a slightly different form of EBNF.
To make them more easily comparable, I wanted to convert all three to the same format. Looking for something fairly standard (not entirely ad-hoc but also not as formal as ISO/IEC EBNF or RFC 5234 ABNF), I came across Wirth Syntax Notation [0] [1]:
syntax = { production } .
production = identifier "=" expression "." .
expression = term { "|" term } .
term = factor { factor } .
factor = identifier | literal | "(" expression ")" | "[" expression "]" | "{" expression "}" .
literal = "\"" character {character} "\"" .
It turns out that the Go specification already uses WSN [2]. I converted Lua and Python, and then could work with all three language grammars in a consistent, machine-readable notation.[0] https://en.wikipedia.org/wiki/Wirth_syntax_notation
https://github.com/egberts/vim-syntax-ebnf
And a EBNF format detector:
https://github.com/egberts/filetype-ebnf-grammars
And a master list of all variants of EBNF:
Here is a list of all variants of EBNFs as well as Vim syntax highlighter for EBNF variants:
https://github.com/egberts/vim-syntax-ebnf
And a EBNF format detector:
https://github.com/egberts/filetype-ebnf-grammars
And a master list of all variants of EBNF:
dwheeler•1mo ago
teddyh•1mo ago
ggm•1mo ago
Commentaries say its different, but the differences might not matter?
ucarion•1mo ago
dwheeler•1mo ago
90s_dev•1mo ago
dwheeler•1mo ago
arh68•1mo ago
Q: what's your ideal way to write Unicode characters clearly? In the W3C/XML spec they'll have stuff like [#x200C-#x200D] but I have no idea what those are, without like a dictionary on hand. Points for specificity, but it doesn't scream "readable".
Your point about standards-not-publicly-available is unfortunately similar to, well, laws. In some areas, "the laws" themselves are not public (!) though perhaps it's a digression better to not get into
pedantically, s/unabiguously/unambiguously/g
dwheeler•1mo ago
alfiedotwtf•1mo ago
I’ve never seen PCRE used for grammars and not sure if it would be powerfully enough for all cases, but personally I think it would be pretty cool since I find it easier to read than EBNF and it’s so widely used people can slot a specification right into code and it should just work
dwheeler•1mo ago
alfiedotwtf•1mo ago