mirror of
https://github.com/enso-org/enso.git
synced 2024-11-30 05:35:09 +03:00
5.5 KiB
5.5 KiB
layout | title | category | tags | order | ||
---|---|---|---|---|---|---|
developer-doc | Parser Architecture Overview | parser |
|
2 |
Parser Architecture Overview
The Enso parser is designed in a highly modular fashion, with separate crates responsible for the component's various responsibilities. The overall architecture for the parser is described in this document.
Overall Architecture
The overall architecture of the parser subsystem can be visualised as follows.
┌───────────────┐
│ Source Code │
└───────────────┘
│
│
▽
┌─────────────────────────────────────────────────────────────────────────┐
│ ┌──────────────┐ Parser │
│ │ UTF-X Reader │ │
│ └──────────────┘ │
│ │ │
│ │ Character │
│ │ Stream │
│ ▽ │
│ ┌────────┐ │
│ │ Lexer │ │
│ │┌──────┐│ │
│ ││Flexer││ │
│ │└──────┘│ │
│ └────────┘ │
│ │ │
│ │ Structured │
│ │ Token Stream │
│ ▽ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ │ │ │ │ │ │
│ │ Macro │ Rust AST │ Operator │ Rust AST │ Construct │ │
│ │ Resolution │─────────────▷│ Resolution │─────────────▷│ Resolution │ │
│ │ │ │ │ │ │ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ │ │
│ Rust AST │ │
│ ▽ │
│ ┌────────────┐ │
│ │ AST Output │ │
│ └────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│
┌───────────────┤ Rust AST
▽ │
┌────────────┐ │
│ │ │
│ JVM Object │ └─────────────────┐
│ Generator │ │
│ │ │
└────────────┘ │
│ │
JVM AST │ │
▽ ▽
┌────────────┐ ┌────────────┐
│ │ │ │
│ Use in JVM │ │ Direct Use │
│ Code │ │in Rust Code│
│ │ │ │
└────────────┘ └────────────┘