From 5c66c4b6455220719cbf346b621f58fb463bc80f Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Wed, 8 Jul 2026 13:32:32 +0200 Subject: [PATCH] docs: update syntax railroad diagrams --- syntax/midas.typ | 93 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 17 deletions(-) diff --git a/syntax/midas.typ b/syntax/midas.typ index b0b6438..b05c2a5 100644 --- a/syntax/midas.typ +++ b/syntax/midas.typ @@ -27,20 +27,40 @@ svg.railroad .terminal rect { {[`reference` 'primary' ]} ``` +#let call-args = ``` +{[`call-args` "(" *","#`Same rules as Python`> ")"]} +``` + +#let call = ``` +{[`call` 'reference' ]} +``` + #let unary = ``` -{[`unary` <[ 'unary'], 'reference'>]} +{[`unary` <[<"+", "-", "!"> 'unary'], 'call'>]} +``` + +#let factor = ``` +{[`factor` 'unary'*<"*", "/">]} +``` + +#let term = ``` +{[`term` 'factor'*<"+", "-">]} ``` #let comparison = ``` -{[`comparison` 'unary'*<">", "<", ">=", "<=">]} +{[`comparison` 'term'*<">", "<", ">=", "<=">]} ``` #let equality = ``` {[`equality` 'comparison'*<"==", "!=">]} ``` +#let expression = ``` +{[`expression` 'equality'*"&"]} +``` + #let constraint = ``` -{[`constraint` 'equality'*"&"]} +{[`constraint` 'expression']} ``` #let template-param = ``` @@ -63,12 +83,16 @@ svg.railroad .terminal rect { {[`named-type` 'identifier']} ``` -#let type-params = ``` -{[`type-params` "[" "]"]} +#let type-args = ``` +{[`type-args` "[" "]"]} +``` + +#let frame-schema = ``` +{[`frame-schema` "[" "]"]} ``` #let generic-type = ``` -{[`generic-type` 'named-type' ]} +{[`generic-type` <["Frame" 'frame-schema'], ['named-type' ]>]} ``` #let grouped-type = ``` @@ -83,28 +107,48 @@ svg.railroad .terminal rect { {[`constraint-type` 'base-type' ]} ``` +#let pos-param = ``` +{[`pos-param` 'type' ]} +``` + +#let kw-param = ``` +{[`kw-param` 'identifier' ":" 'type' ]} +``` + +#let param-spec = ``` +{[`param-spec` "(" *",">#`Same rules as Python` ")"]} +``` + +#let func-type = ``` +{[`func-type` "fn" 'param-spec' "->" 'type']} +``` + #let type = ``` -{[`type` 'constraint-type']} +{[`type` <'func-type', 'constraint-type'>]} +``` + +#let alias-statement = ``` +{[`alias-statement` "alias" 'identifier' "=" 'type']} ``` #let type-statement = ``` {[`type-statement` "type" 'identifier' "=" 'type']} ``` -#let op-definition = ``` -{[`op-definition` "op" 'identifier' "(" 'type' ")" "->" 'type']} +#let member-stmt = ``` +{[`member-stmt` <"prop", "def"> 'identifier' ":" 'type']} ``` #let extend-statement = ``` -{[`extend-statement` "extend" 'type' "{" "}"]} +{[`extend-statement` "extend" 'type' "{" "}"]} ``` #let predicate-statement = ``` -{[`predicate-statement` "predicate" 'identifier' "(" 'identifier' ":" 'type' ")" "=" 'constraint']} +{[`predicate-statement` "predicate" 'identifier' "=" 'constraint']} ``` #let statement = ``` -{[`statement` <'type-statement', 'extend-statement', 'predicate-statement'>]} +{[`statement` <'alias-statement', 'type-statement', 'extend-statement', 'predicate-statement'>]} ``` #let rules = ( @@ -112,23 +156,33 @@ svg.railroad .terminal rect { grouping: grouping, primary: primary, reference: reference, + call-args: call-args, + call: call, unary: unary, + factor: factor, + term: term, comparison: comparison, equality: equality, + expression: expression, constraint: constraint, template-param: template-param, template: template, type-property: type-property, complex-type: complex-type, named-type: named-type, - type-params: type-params, + type-args: type-args, generic-type: generic-type, grouped-type: grouped-type, base-type: base-type, constraint-type: constraint-type, + pos-param: pos-param, + kw-param: kw-param, + param-spec: param-spec, + func-type: func-type, type: type, + alias-statement: alias-statement, type-statement: type-statement, - op-definition: op-definition, + member-stmt: member-stmt, extend-statement: extend-statement, predicate-statement: predicate-statement, statement: statement, @@ -140,14 +194,19 @@ svg.railroad .terminal rect { "template-param", "template", "type-property", + "call-args", "complex-type", - "type-params", + "type-args", "named-type", "grouped-type", "generic-type", "base-type", "constraint-type", - "op-definition", + "pos-param", + "kw-param", + "func-type", + "member-stmt", + "alias-statement", "type-statement", "extend-statement", "predicate-statement", @@ -164,7 +223,7 @@ svg.railroad .terminal rect { 2, outline(title: none), ), - height: 9cm, + height: 15cm, stroke: 1pt, inset: 1em, )