Perl 6 no hace ninguna promesa sobre las alteraciones de orden se utilizarán?

StackOverflow https://stackoverflow.com/questions/766480

  •  12-09-2019
  •  | 
  •  

Pregunta

Dada una alternancia como /(foo|foobar|foobaz)/ no Perl 6 prometer nada acerca de cuál de los tres se van a utilizar en primer lugar, y si lo hace, donde en la documentación ¿tiene esa promesa?

Ver la pregunta relacionada ¿Tiene actualmente Perl (5.8 y 5.10) hacer promesas sobre las alteraciones de orden se utilizarán? .

¿Fue útil?

Solución 2

S05 dice

  

A tal fin, cada expresión regular en Perl 6 se requiere para poder distinguir sus patrones "puros" de sus acciones, y volver a su lista de patrones de fichas iniciales (transitivamente incluyendo los patrones de fichas de cualquier subregla llamados por la "pura "parte de esa expresión regular, pero sin incluir ninguna subregla más de una vez, ya que ello implicaría autorreferencia, que no está permitido en las expresiones regulares tradicionales). Una alternancia lógica usando | luego toma dos o más de estas listas y envía a la alternativa que coincide con el prefijo símbolo más larga. Esto puede o no ser la alternativa que es lo primero léxico.

     

Sin embargo, si dos alternativas coinciden en la misma longitud, el lazo se rompe por primera vez por la especificidad. La alternativa que se inicia con el más largo de victorias cadena fija; es decir, una coincidencia exacta cuenta como más cerca que una pareja hecha usando las clases de caracteres. Si eso no funciona, el lazo roto por uno de dos métodos. Si las alternativas son en diferentes gramáticas, estándar MRO (método de resolución de orden) determina cuál probar primero. Si las alternativas están en el mismo archivo de gramática, la alternativa textual anterior tiene prioridad. (Si las reglas de una gramática se definen en más de un archivo, el orden es indefinido, y una afirmación explícita debe ser usado para forzar fracaso si el mal se trató en primer lugar.)

Esto parece ser una promesa muy diferente de la realizada en Perl 5.

Otros consejos

Para decirlo sólo unas pocas palabras: las alternativas deben coincidir (al menos teóricamente) en paralelo, y el partido más largo gana. Si quieres alternancias sucesivas, se puede utilizar la barra doble ||, que promete una orden de izquierda a derecha al igual que | hace en Perl 5 expresiones regulares.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top