(
,
)
y los operadores
+
,
-
,
*
y
/
.
Se trata de producir a partir de la cadena de entrada una lista
con los tokens y sus valores. Por ejemplo, la cadena
3*4-2
generará la lista:
('num', 3, 'op', '*', 'num', 4, 'op', '-', 'num', 2)
.
Las versiones mas recientes de Perl disponen de una opción
/c
que afecta a las operaciones de emparejamiento
con /g
en el contexto escalar. Normalmente, cuando una
búsqueda global escalar tiene lugar y no ocurre casamiento,
la posición \G
es reestablecida al comienzo de
la cadena.
La opción /c
hace que la posición inicial de
emparejamiento permanezca donde la dejó el último
emparejamiento con éxito.
combinando \G
y /c
es posible escribir
con cierta comodidad un analizador léxico:
{ # Con el redo del final hacemos un bucle "infinito" if (\G(\d+)/gc) { push @tokens, 'num', $1; } elsif (m|\G([-+*()/])|gc) { push @tokens, 'pun', $1; } elsif (/\G./gc) { die 'Caracter invalido'; } else { last; } redo; }