fix: update midas syntax definitions

This commit is contained in:
2026-06-05 11:14:53 +02:00
parent 73b21789d5
commit f182312cd2
2 changed files with 67 additions and 17 deletions

View File

@@ -19,16 +19,24 @@ Comparison ::= Unary (ComparisonOp Unary)*
Equality ::= Comparison (EqualityOp Comparison)* Equality ::= Comparison (EqualityOp Comparison)*
Constraint ::= Equality ("&" Equality)* Constraint ::= Equality ("&" Equality)*
SimpleType ::= Identifier "?"? TemplateParam ::= Identifier ("<:" Type)?
Template ::= "[" Type "]" Template ::= "[" (TemplateParam ("," TemplateParam)*)? "]"
Type ::= Identifier Template? "?"?
TypeProperty ::= Identifier ":" Type
ComplexType ::= "{" TypeProperty* "}"
NamedType ::= Identifier
TypeParams ::= "[" (Type ("," Type)*)? "]"
GenericType ::= NamedType TypeParams?
GroupedType ::= "(" Type ")"
BaseType ::= GroupedType | ComplexType | GenericType
ConstraintType ::= BaseType ("where" Constraint)?
Type ::= ConstraintType
TypeProperty ::= Identifier ":" Type ("where" Constraints)?
ComplexTypeBody ::= "{" TypeProperty* "}"
OpDefinition ::= "op" Identifier "(" Type ")" "->" Type OpDefinition ::= "op" Identifier "(" Type ")" "->" Type
ExtendBody ::= "{" OpDefinition* "}" ExtendBody ::= "{" OpDefinition* "}"
TypeStatement ::= "type" Identifier Template? ("(" Type ")" ("where" Constraint)? | ComplexTypeBody) TypeStatement ::= "type" Identifier Template? "=" Type
ExtendStatement ::= "extend" Type ExtendBody ExtendStatement ::= "extend" Type ExtendBody
PredicateStatement ::= "predicate" Identifier "(" Identifier ":" Type ")" "=" Constraint PredicateStatement ::= "predicate" Identifier "(" Identifier ":" Type ")" "=" Constraint

View File

@@ -47,24 +47,52 @@ svg.railroad .terminal rect {
{[`simple-type` 'identifier' <!, "?">]} {[`simple-type` 'identifier' <!, "?">]}
``` ```
#let template = ``` #let template-param = ```
{[`template` "[" 'type' "]"]} {[`template-param` 'identifier' <!, ["<:" 'type']>]}
``` ```
#let type = ``` #let template = ```
{[`type` 'identifier' <!, 'template'> <!, "?">]} {[`template` "[" <!, 'template-param'*","> "]"]}
``` ```
#let type-property = ``` #let type-property = ```
{[`type-property` 'identifier' ":" 'type' <!, ["where" 'constraint']>]} {[`type-property` 'identifier' ":" 'type']}
``` ```
#let type-body = ``` #let complex-type = ```
{[`type-body` "{" <!, 'type-property'*!> "}"]} {[`complex-type` "{" <!, 'type-property'*!> "}"]}
```
#let named-type = ```
{[`named-type` 'identifier']}
```
#let type-params = ```
{[`type-params` "[" <!, 'type'*","> "]"]}
```
#let generic-type = ```
{[`generic-type` 'named-type' <!, 'type-params'>]}
```
#let grouped-type = ```
{[`grouped-type` "(" 'type' ")"]}
```
#let base-type = ```
{[`base-type` <'grouped-type', 'complex-type', 'generic-type'>]}
```
#let constraint-type = ```
{[`constraint-type` 'base-type' <!, ["where" 'constraint']>]}
```
#let type = ```
{[`type` 'constraint-type']}
``` ```
#let type-statement = ``` #let type-statement = ```
{[`type-statement` "type" 'identifier' <!, 'template'> <[["(" 'type' ")"] <!, ["where" 'constraint']>], 'type-body'>]} {[`type-statement` "type" 'identifier' <!, 'template'> "=" 'type']}
``` ```
#let op-definition = ``` #let op-definition = ```
@@ -93,10 +121,17 @@ svg.railroad .terminal rect {
equality: equality, equality: equality,
constraint: constraint, constraint: constraint,
simple-type: simple-type, simple-type: simple-type,
template-param: template-param,
template: template, template: template,
type: type,
type-property: type-property, type-property: type-property,
type-body: type-body, complex-type: complex-type,
named-type: named-type,
type-params: type-params,
generic-type: generic-type,
grouped-type: grouped-type,
base-type: base-type,
constraint-type: constraint-type,
type: type,
type-statement: type-statement, type-statement: type-statement,
op-definition: op-definition, op-definition: op-definition,
extend-statement: extend-statement, extend-statement: extend-statement,
@@ -107,10 +142,17 @@ svg.railroad .terminal rect {
#let inline = ( #let inline = (
"grouping", "grouping",
"value", "value",
"template-param",
"template", "template",
"simple-type", "simple-type",
"type-property", "type-property",
"type-body", "complex-type",
"type-params",
"named-type",
"grouped-type",
"generic-type",
"base-type",
"constraint-type",
"op-definition", "op-definition",
"type-statement", "type-statement",
"extend-statement", "extend-statement",