# `Grammar.VM.Program`
[🔗](https://github.com/joetjen/ichor/blob/v0.3.0/lib/grammar/vm/program.ex#L1)

Linked PEG bytecode: every token (or every rule) in a grammar, compiled
into one shared instruction tuple so `:call` can jump between them by
index, plus a name -> entry-index map for looking up where to start.

`Grammar.VM` compiles two of these per grammar -- one over tokens
(character-level, run by the lexer) and one over rules (token-stream
level, run by the parser), since Aether grammars are a genuine two-stage
Lexer -> Parser, not a single scannerless recognizer.

# `t`

```elixir
@type t() :: %Grammar.VM.Program{
  entry_points: %{required(atom()) =&gt; non_neg_integer()},
  instructions: tuple()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
