assistance-engine/ingestion/code/BNF/n03_BNF.txt

28 lines
1.2 KiB
Plaintext

<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>*