Reference
Shortcuts, commands, menus, file formats, the grammar and vocabulary — the things you look up rather than read.
Keyboard shortcuts
| Keys | Action |
|---|---|
| Ctrl + N | New workspace |
| Ctrl + O | Open |
| Ctrl + S | Save |
| Ctrl + B | Toggle the blocks sidebar |
| Ctrl + J | Toggle the bottom tools |
| Ctrl + Shift + F | Search blocks |
| Ctrl + F5 | Run the program |
| Ctrl + Shift + P | Command palette |
| Esc | Close the palette or an open menu |
Command palette
Ctrl + Shift + P, with keyword matching. Four groups:
| Group | Commands |
|---|---|
| File | New · Open · Save · Export MiniJava source · Autosave settings |
| Run | Run program (Ctrl + F5) |
| Analysis | CESK machine · Model A vs B compare · Rewrite semantics |
| View | Panel toggles and perspectives |
Menu map
| Menu | Contents |
|---|---|
| File | New · Open · Save · Export · autosave recovery |
| Examples | The twelve programs listed in Overview |
| View | Blocks sidebar · MiniJava inspector · Bottom tools · Perspective picker · Dark theme · Autosave interval slider |
| More | Command palette… · About B-MJ |
The activity bar on the far left holds Blocks and Search blocks. The workspace title bar holds undo/redo, zoom, the visualization-dock toggle and ▶ Run.
File formats
| Format | Holds |
|---|---|
.bml |
A B-MJ workspace. Saved and opened locally — nothing is uploaded. |
| MiniJava source | Exported or opened as text. The parser and generator round-trip, so source can leave and come back as blocks. |
| Local storage | The autosave backup and your layout, theme and interval settings, under
block-minijava.* keys. |
The grammar
B-MJ implements the CSE 401 MiniJava BNF, published as BNF for MiniJava, plus two additions: the String extension, and the block editor's operator families (one block with a dropdown where the BNF has a production per operator).
Notable absences, all inherited from MiniJava rather than chosen here: no interfaces, no overloading,
no constructors, no static beyond main, no char, no
for, and every method returns a value.
Glossary
| Term | Means |
|---|---|
| Activation frame | One entry on the call stack: a method invocation and its locals. |
| Aliasing | Two names referring to one object, so a write through one is visible through the other. Real under Model A; impossible under Model B. |
| BMJ-Thrasos | B-MJ's renderer. Blockly Thrasos plus grammar-aware connector shapes. |
| CESK machine | Control, Environment, Store, Kontinuation. The store is the heap — the letter B-Lambda's CEK machine does not have. |
| Hole type | The type of a block that cannot be typed yet. Consistent with everything, so unfinished work does not cascade errors. |
| Kontinuation | Pending work — what happens to the value being computed. ◻
marks the hole it will fill. |
| Model A | Objects on a heap, variables hold references, field update mutates. This is Java. |
| Model B | Inline structural values, no heap, functional field update. |
| Nominal subtyping | Subtyping by declaration (extends), not by structure. |
| Pure fragment | The part of MiniJava the Rewrite tab can handle — no mutation. |
| Salient rule | A human-visible rewrite. The unit the Rewrite tab counts, as against the machine's every-transition count. |
| Store | The heap: the S in CESK. |
| Stuck | A state with no transition available — how a small-step machine expresses what
Java would throw. Out-of-bounds charAt and division by zero both get
stuck. |
WF-* / T-* |
Statement well-formedness rules and expression typing rules. |
B-Lambda help — the λ-calculus workbench, where the machine has no store and the interesting question is evaluation order. MnL help — the functional language whose Call-by-Structure strategy both of the others inherit.