Skip to content

Instantly share code, notes, and snippets.

@eikopf
Last active May 10, 2025 12:32
Show Gist options
  • Select an option

  • Save eikopf/7c9a66f2b0a5e8695d08a31948548902 to your computer and use it in GitHub Desktop.

Select an option

Save eikopf/7c9a66f2b0a5e8695d08a31948548902 to your computer and use it in GitHub Desktop.
Conventional Compiler Architecture Diagram
#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