Interview questions · Mithril
Parse code into operation triads IR
This question evaluates parsing and IR-generation skills, including tokenization, AST or three-address (operation triads) construction, deterministic control-flow serialization, and management of temporaries and labels.
Problem: Operation-Triads Parsing (Mini Language)
You are given a small, line-based programming language consisting of assignment statements and non-nested if–else blocks. Your task is to parse the input program and deserialize it into a deterministic intermediate representation (IR).
You may output either:
- a flat list of operation triads (three-address/triad form), or
- an equivalent structured representation (e.g., AST/JSON).
Language
1) Statements
-
Assignment (one per line)
- Examples:
a = 1x = b + c
- Examples:
-
If–Else (block form)
if (condition) { assignment } else { assignment }
2) Expressions
- Operands: variable identifiers (
a,b,x) or integers (1,2,10) - Binary operators:
+,-,*,/ - Conditions use comparison operators (at least
==), e.g.a + b == 3 - The condition is a binary comparison between two expressions.
3) Control-flow constraints
if–elseblocks cannot be nested.- Every
ifmust have anelse. - Each
{ ... }block contains exactly one assignment statement.
Input
- A list/array of strings, each string is one line of code, in order.
Example input:
[a = 1,
if (a + b == 3) {
x = 10
} else {
x = 20
}
]
Output
Produce an IR that preserves execution order and control flow.
If using operation triads, each instruction is a tuple:
(op, arg1, arg2)
You may introduce temporary values t1, t2, … and labels L1, L2, … as needed.
Example (one acceptable triad-style output for the sample):
(=, 1, a)
(+, a, b) -> t1
(==, t1, 3) -> t2
(if_false, t2, L1)
(=, 10, x)
(goto, L2, _)
(label, L1, _)
(=, 20, x)
(label, L2, _)
Requirements
- Tokenize and parse the input lines.
- Enforce the stated constraints (non-nested
if, must haveelse, exactly one assignment per block). - Output must be deterministic and serializable.
- Clearly define how temporaries and labels are generated.
Community answers
Nothing here yet.
Join in on CSWork →