Skip to content

Latest commit

 

History

History
81 lines (73 loc) · 5.5 KB

architecture.md

File metadata and controls

81 lines (73 loc) · 5.5 KB
layout title category tags order
developer-doc
Parser Architecture Overview
parser
parser
architecture
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│
                │            │                    │            │
                └────────────┘                    └────────────┘