/* Jerarquía de Expresiones (Precedencia de menor a mayor) */ ::= ::= ( "or" )* ::= ( "and" )* ::= "not" | ::= ( )* ::= "==" | "!=" | "<" | ">" | "<=" | ">=" | "in" | "is" ::= ( ( "+" | "-" ) )* ::= ( ( "*" | "/" | "%" ) )* ::= ( "+" | "-" ) | ::= [ "**" ] /* Primarios y Átomos (Accesos, Castings, Slicing, Métodos y Funciones) La regla cubre también el acceso a métodos de objetos conector (conector.metodo(...)) y el acceso por clave a sus resultados (resultado["key"]) */ ::= | "." | "[" "]" | "[" [] ":" [] [":" []] "]" | "(" [] ")" ::= | "$" | | "(" ")" | | /* Estructuras de Datos, Comprensiones y Argumentos */ ::= "[" [] "]" | "[" "for" "in" [] "]" ::= "if" ::= "{" [] "}" ::= ( "," )* ::= ":" ::= ( "," )* /* Tipo numérico unificado */ ::= | /* Literales (Tipos de Datos Primitivos Soportados) */ ::= | | | "None" ::= "True" | "False" ::= [0-9]+ ::= [0-9]+ "." [0-9]* | "." [0-9]+ /* Cadenas de Texto con soporte de secuencias de escape */ ::= "\"" "\"" | "'" "'" ::= "\\" ( "\"" | "'" | "\\" | "n" | "t" | "r" | "0" ) ::= ( [^"\\] | )* ::= ( [^'\\] | )* ::= | /* Reglas de Comentarios para el Lexer El lexer aplica longest-match: /// debe evaluarse ANTES que // */ ::= "///" ::= "//" ::= "/*" "*/" ::= [^\r\n]* ::= /* Cualquier secuencia de caracteres que no contenga la subcadena "*/" */