mighty

The mighty programming language, compiler and tools (WIP)
Log | Files | Refs

parsing.md (943B)



Parse order
-----------

```
expr
conditional
pipe
logic
compare
range
add
mul
pow
unary
postfix
primary
```


```yaml

parseExpr
  calls parseConditional

  parseConditional
  parses parsePipe
  optionally parses: if parseExpr else parseExpr

parsePipe
  parses parseLogic
  loops pipe stages: | expr or | @(expr)

parseLogic
  parses parseCompare
  loops and / or

parseCompare
  parses parseRange
  loops == != < <= > >=

parseRange
  parses parseAdd
  optionally parses .. parseAdd

parseAdd
  parses parseMul
  loops + -

parseMul
  parses parsePow
  loops * /

parsePow
  parses parseUnary
  loops or recurses on ^

parseUnary
  handles - and #
  handles reduce/scan prefixes like +/xs, +\xs
  otherwise calls parsePostfix

parsePostfix
  parses parsePrimary
  loops:
    call (...)
    selector [...]
    field .name

parsePrimary
  parses:
    literal
    path
    subject .
    array [...]
    record Type(...)
    grouped (expr)
```