Skip to content
B-MJ HelpBlock-based MiniJava
07 / Reference

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 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.
Elsewhere in the workshop

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.

B-MJ is developed at L-Workshop. This help was written against the build running at b-mj.l-workshop.my.id.