Cara, eu comecei a ver isso no boost.spirit.
Mas meu problema na época, era que nem eu mesmo sabia
se a entrada tinha acabado ou não. Isso complicava
um pouco, depois de fazer alguns profiles, decidi
que o custo de reiniciar era minimo, e que a necessidade
de faze-lo era ainda menor (a entrada era quase sempre
completa). Entao deixei de lado.
http://mail.google.com/mail/#search/from%3Ame+spirit/1087c327b811a72f
> --
> P.
[snip]
--
Felipe Magno de Almeida
Eu, particularmente, nunca vi algo sobre "parser reiniciável
(agradeceria algumas referências :)
Além de fazer o parser como uma máquinas de estados, acho que vc pode
"memoizar" os resultados. Ou seja, na medida em que a entrada é
aceita, armazenar os resultados de cada regra, a regra em si e a
posição da entrada atual em uma tabela. A reinicialização então usaria
as informações da tabela ao invés de percorrer a entrada, enquanto
tais informações existem (do contrário, o parsing normal volta a
ocorrer). Já que utilizar os resultados anteriores é mais rápido do
que refazer o parsing novamente, isso poderia dar a sensação de
"resume".
[]'s
--
Thiago Silva,
mailto: tsilva at sourcecraft info
jabber: tsi...@jabber.org
http://sourcecraft.info/blog
Sim, eu não vejo muito sentido em tentar casar o que propus com uma
implementação de parser com máquina de estados. Acho que a memoização
seria útil caso vc, por algum motivo, mudasse a abordagem de
implementação do parser para, por exemplo, preditivo recursivo. Ou
seja, uma outra abordagem, por completo.
Por outro lado, se já se tem uma máquina de estados, não estou
entendendo o porquê de buscar uma outra forma de fazer o que procura,
afinal, imagino que manter o registro de elementos como a posição de
entrada, o estado atual e a pilha seja suficiente para reiniciar o
processo de um ponto arbitrário.
E a sua abordagem não está funcionando?