A livello di parser, non è poi così difficile. Il parser ha solo bisogno di una variabile per tenere traccia del livello di indentazione del blocco corrente. E quando va a leggere una nuova riga, conta gli spazi iniziali (o le schede) e confronta il valore con il rientro del blocco corrente, quindi applica un algoritmo simile a questo:
if currentIndent = currentBlock.indent then
parse line in the context of currentBlock
else if currentIndent > currentBlock.indent then
create sub-block of currentBlock and parse line in that context
else finish currentBlock and run this same comparison on currentBlock.parent