assistance-engine/ingestion/code/n01_BNF.txt

42 lines
2.0 KiB
Plaintext

<program> ::= ( <line> | <block_comment> )*
<line> ::= [ <statement> ] [ <line_comment> | <doc_comment> ] <EOL>
| ( <line_comment> | <doc_comment> ) <EOL>
<EOL> ::= /* Retorno de carro / Salto de línea (\n o \r\n) */
<statement> ::= <assignment>
| <method_call_stmt>
| <function_call_stmt>
| <function_decl>
| <return_stmt>
| <system_command>
| <io_command>
| <control_flow>
| <async_command>
| <connector_cmd>
| <db_command>
| <http_command>
| <util_command>
| <modularity_cmd>
<assignment> ::= <identifier> "=" <expression>
/* Llamada a función global (sin receptor de objeto) */
<function_call_stmt> ::= <identifier> "(" [<argument_list>] ")"
/* Llamada a método sobre un objeto conector (con receptor) */
<method_call_stmt> ::= <identifier> "=" <identifier> "." <identifier> "(" [<argument_list>] ")"
<system_command> ::= <register_cmd> | <addvar_cmd>
<register_cmd> ::= "registerEndpoint(" <stringliteral> "," <stringliteral> "," <list_display> "," <stringliteral> "," <identifier> "," <identifier> ")"
/* addVar asigna un valor a una variable. Acepta (valor, variable) o (variable, valor).
Si ambos argumentos son identificadores, el valor del segundo se asigna al primero.
No está permitido pasar dos literales como argumentos. */
<addvar_cmd> ::= "addVar(" <addvar_arg> "," <addvar_arg> ")"
<addvar_arg> ::= <identifier> | <literal> | "$" <identifier>
/* Restricción semántica: al menos uno de los dos <addvar_arg> debe ser <identifier> */
<identifier> ::= [a-zA-Z_] [a-zA-Z0-9_]*
/* Variables de sistema reservadas — accesibles y asignables desde cualquier scope:
_status — código HTTP de respuesta (ej. addVar(_status, 401) o _status = 404) */
<system_variable> ::= "_status"