fix: update midas syntax definitions
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user