Nutthead-ebnf 0.3.1/0.3.2

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

2 Likes