Notation
This reference uses a BNF dialect for grammar productions. The notation is intentionally close to the Rust Reference so readers familiar with Rust documentation can read it without a separate primer.
Grammar productions
A production has the form LHS ::= RHS, where the right-hand side is a
sequence of terminals, non-terminals, and meta-operators. Productions are
written in text-tagged code blocks:
EventDecl ::= 'Event' ident carriers? ':' stmt* 'end'
carriers ::= carrier_group+
carrier_group ::= '.' '|' param (',' param)* '|'
param ::= ident ':' type
Meta-operators
| Form | Meaning |
|---|---|
'literal' | A literal token (keyword, symbol). Matches verbatim. |
ident | An identifier, defined in the lexical structure chapter. |
X? | Zero or one of X. |
X* | Zero or more of X. |
X+ | One or more of X. |
| `X | Y` |
(X Y) | Grouping; otherwise meta-operators bind tighter than juxtaposition. |
Whitespace between symbols in a production is significant only when called out — most productions allow inter-token whitespace and comments, exactly as the lexer does.
Inline references
- A non-terminal in prose is written in italics (e.g. event, process).
- A literal token in prose is written in backticks (e.g.
Event,->). - A type-level reference into the AST uses backticks plus the Rust path
fragment when it disambiguates (
Event::CPEvent,Process::Choice { branches, default }).
Examples
Examples render in text-tagged code blocks, not rust-tagged: the Fiducia
source language is not Rust, and text keeps mdBook’s syntax-highlighter
neutral. Example:
Event handle_irq:
eth.handle_irq();
end
Where an example references symbols declared elsewhere (a channel from the
.fis file, a function from an imported .c file, a process declared in
the same section), the surrounding prose names the dependency.
Stability markers
A construct flagged with the 🚧 marker is not yet implemented by the parser. The form appears in the reference because it is part of the designed grammar, but the parser will reject it today. The marker links to the tracking issue:
🚧 Not yet implemented — see #105.