Operador léxico “não ganancioso”
Por omissão, a análise léxica é “gananciosa”.
Isto é, os tokens são gerados com o maior tamanho possível.
Esta particularidade é em geral a desejada, mas pode trazer problemas em alguns casos.
Por exemplo, se quisermos reconhecer um string:
STRING: ' " ' .* ' " ';
(No analisador léxico o ponto (.) reconhece qualquer carácter excepto o EOF.)
Esta regra não funciona, porque, uma vez reconhecido o primeiro carácter ", o analisador léxico vai reconhecer todos os caracteres como pertencendo ao STRING até ao último carácter ".
Este problema resolve-se com o operador non-greedy:
STRING: ' " ' .*? ' " '; // match all chars until a " appears !
Last updated