Compact Grammar
Compact language version 0.5.0.
Notational note: In the grammar productions below, ellipses are used to specify repetition. The notation X ... X, where X is a grammar symbol, represents zero or more occurrences of X. The notation X s ... s X, where X is a grammar symbol and s is a separator such as a comma or or semicolon, represents zero or more occurrences of X separated by s. In either case, when the ellipsis is marked with the superscript 1, the notation represents a sequence containing at least one X. For example, id … id represents zero or more ids, and expr , …¹ , expr represents one or more comma-separated exprs.
identifiers have the same syntax as Typescript identifiers
identifier that names one of the Ledger ADTs
a field literal is 0 or a natural number formed from a sequence of digits starting with 1-9, e.g. 723, whose value does not exceed the maximum field value
a string literal has the same syntax as a Typescript string
a version literal takes the form nat or nat.nat or nat.nat.nat, e.g., 1.2 or 1.2.3, representing major, minor, and bugfix versions
The productions on each line of this group have lower precedence than those on the lines that follow and are either left or right associative as marked.
version-expr | → | version-expr || version-expr | (left) |
| → | version-expr && version-expr | (left) |
| → | version-term |
xdecl | → | export { id , … , id } ;opt |
Midnight ledger ADTs are described here.
return-type | → | Void |
| → | type |
type | → | tref |
| → | Boolean |
| → | Field |
| → | Unsigned Integer [ nat ] |
| → | Unsigned Integer [ <= nat ] |
| → | Bytes [ tsize ] |
| → | Opaque [ str ] |
| → | Vector [ tsize , type ] |
The productions on each line of this group have lower precedence than those on the lines that follow and are either left or right associative as marked.
expr0 | → | expr0 || expr0 | (left) |
| → | expr0 && expr0 | (left) |
| → | expr0 == expr0 | expr0 != expr0 | expr0 < expr0 | expr0 > expr0 | expr0 <= expr0 | expr0 >= expr0 | (left) |
| → | expr1 |
The productions on each line of this group have lower precedence than those on the lines that follow and are either left or right associative as marked.
expr2 | → | expr2 + expr2 | expr2 - expr2 | (left) |
| → | expr2 * expr2 | (left) |
| → | expr3 |
term | → | lit |
| → | id |
| → | null ( type ) |
| → | null ( ledger-adt ) |
| → | fun ( expr , … , expr ) |
| → | new tref ( expr , … , expr ) |
| → | [ expr , … , expr ,opt ] |
| → | ( expr ) |
| → | ( expr , …¹ , expr , expr ) |
| → | ledger ledger-accessor |
| → | ledger . id ledger-accessor … ledger-accessor |