Hi all,
I just released version 0.3.2 of nutthead-ebnf, a package for rendering EBNF grammars. It conforms to the ISO/IEC 14977:1996(E) specification, with some minor changes and additions.
Here’s a usage example:
#context [
#ebnf[
#[
#syntax-rule(
meta-id: [Function],
rule-example: [```rust fn main() { }```],
definition-list: (
(indent: 1),
[
#single-definition[FunctionQualifiers]
#terminal[fn]
#single-definition[IDENTIFIER]
#single-definition(illumination: "dimmed", qualifier: "opt")[GenericParams]
],
(indent: 2),
[
#terminal[(]
#single-definition(qualifier: "opt")[FunctionParameters]
#terminal[)]
],
[
#single-definition(illumination: "dimmed", qualifier: "opt")[FunctionReturnType]
#single-definition(illumination: "dimmed", qualifier: "opt")[WhereClause]
],
[
#grouped-sequence(
single-definition[BlockExpression],
terminal(illumination: "dimmed")[;],
)
],
),
)
#syntax-rule(
meta-id: [FunctionQualifiers],
rule-example: [```rust const```],
definition-list: (
(indent: 1),
[
#terminal(qualifier: "opt")[const]
#terminal(qualifier: "opt")[async]
#single-definition(qualifier: "opt")[ItemSafety]
#grouped-sequence(
qualifier: "opt",
[
#terminal[extern]
#single-definition(qualifier: "opt")[Abi]
],
)
],
),
)
]
]
]
Which renders into:
It is work in progress and contributions are very welcome.
- Version 0.3.1 will soon get merged into the universe at nutthead-ebnf – Typst Universe
- Version 0.3.2 is functionally identical to 0.3.1 and I may get it published on the universe soon, or wait for 0.3.3 which will include some minor improvements/additions and then publish that.
Regards,
Behrang
