Last active
May 10, 2025 12:32
-
-
Save eikopf/7c9a66f2b0a5e8695d08a31948548902 to your computer and use it in GitHub Desktop.
Conventional Compiler Architecture Diagram
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #import "@preview/fletcher:0.5.2" as fletcher: diagram, node, edge | |
| // global style rules | |
| #set page(paper: "presentation-16-9") | |
| #set text(size: 22pt) | |
| #show raw: set text(font: "Berkeley Mono") | |
| // creates an outline over the given row, with the given color | |
| #let group(row, color) = node( | |
| enclose: ((0, row), (2, row)), | |
| snap: false, | |
| inset: 10pt, | |
| stroke: stroke( | |
| paint: color, | |
| thickness: 1pt, | |
| dash: (6pt, 3pt), | |
| join: "bevel", | |
| ), | |
| ) | |
| // define colors for front, middle, and back ends | |
| #let front_color = red.darken(10%) | |
| #let middle_color = green.darken(30%) | |
| #let back_color = blue | |
| // define diagram | |
| #let compiler_architecture_diagram = diagram( | |
| debug: 0, // debug level | |
| cell-size: (8em, 4em), // row/column sizes | |
| node-stroke: 0.6pt, // node border stroke weight | |
| node-shape: rect, // node border shape | |
| node-outset: 4pt, // node/edge gap size | |
| spacing: (3em, 2em), // row/column gutter sizes | |
| node((0, 0), `Lexing`, height: 3em, width: 6em), | |
| edge("r", "->", `tokens`), | |
| node((1, 0), `Parsing`, height: 3em, width: 6em), | |
| edge("r", "->", `CST`), | |
| node((2, 0), `Abstraction`, height: 3em, width: 6em), | |
| edge("d", "->", `AST`, label-side: left), | |
| node((2, 1), `Name Resolution`, height: 3em, width: 6em), | |
| edge("l", "->", `AST`), | |
| node((1, 1), `Type Checking`, height: 3em, width: 6em), | |
| edge("l", "->", `AST`), | |
| node((0, 1), [`Static Analysis`], height: 3em, width: 6em), | |
| edge("d", "->", `AST`), | |
| node((0, 2), `Lowering`, height: 3em, width: 6em), | |
| edge("r", "->", `IR`), | |
| node((1, 2), `Code Generation`, height: 3em, width: 6em), | |
| edge("r", "->", `IR`), | |
| node((2, 2), `Rendering`, height: 3em, width: 6em), | |
| // node groups | |
| group(0, front_color), | |
| group(1, middle_color), | |
| group(2, back_color), | |
| ) | |
| // display diagram | |
| #align(center + horizon)[ | |
| #figure(compiler_architecture_diagram) | |
| ] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment