/* Nota: las funciones utilizan llaves {} como delimitadores de bloque por decisión
   arquitectónica explícita, diferenciándose de las estructuras de control (if, loop, try)
   que usan palabras clave de cierre (end(), endLoop()). Ambos patrones coexisten
   en la gramática y el parser los distingue por el token de apertura. */
<function_decl>   ::= "function" <identifier> "(" [<param_list>] ")" "{" <EOL>
                        <block>
                      "}" <EOL>
<param_list>      ::= <identifier> ("," <identifier>)*
<return_stmt>     ::= "return(" [<expression>] ")"