<control_flow>    ::= <if_stmt> | <loop_stmt> | <try_stmt>

<if_stmt>         ::= "if(" <if_condition> ")" <EOL>
                        <block>
                      [ "else()" <EOL> <block> ]
                      "end()" <EOL>

/* if() soporta dos modos:
   Modo 1 — comparación estructurada: los dos primeros argumentos deben ser
             identificadores simples o literales, nunca expresiones de acceso.
             Si se necesita comparar un valor extraído de una estructura (ej. dict['clave']),
             debe asignarse previamente a una variable.
   Modo 2 — expresión libre: None, None, expresión compleja como string */
<if_condition>    ::= <if_atom> "," <if_atom> "," <stringliteral>
                    | "None" "," "None" "," <stringliteral>
<if_atom>         ::= <identifier> | <literal>

<loop_stmt>       ::= "startLoop(" <identifier> "," <expression> "," <expression> ")" <EOL>
                        <block>
                      "endLoop()" <EOL>

<try_stmt>        ::= "try()" <EOL>
                        <block>
                      "exception(" <identifier> ")" <EOL>
                        <block>
                      "end()" <EOL>

<block>           ::= <line>*