Instruções restringidas por contexto

Algumas linguagens de programação restringem a utilização de certas instruções a determinados contexto.

Por exemplo, em Java as instruções break e continue só podem ser utilizadas dentro de ciclos ou da instrução condicional switch.

A verificação semântica desta condição é muito simples de implementar, podendo ser feita durante a análise sintáctica recorrendo a predicados semânticos e um contador (ou uma pilha) que registe o contexto.

@parser::members {
    int acceptBreak=0;
}
...
forLoop: 'for''(' expr ';' expr ';' expr ')'
    {acceptBreak++}
    instruction
    {accpetBreak--}
    ;
break: {acceptBreak > 0}? 'break'';'
    ;
instructions: forLoop | break | ...
    ;

Last updated