Al analizar texto, frecuentemente necesito implementar mini-máquinas-estado, en forma genérica siguiendo el siguiente código.¿Hay un buen módulo de CPAN para implementar máquinas de estado al analizar texto?
¿Hay un módulo CPAN que se considera "mejor práctica" y muy adecuado para implementar la lógica máquina de estados como esto de una manera fácil y elegante?
yo preferiría soluciones menos complicado que Parse::RecDescent
pero si no existe ninguno y Parse::RecDescent
es mucho más fácil de aplicar a este problema de lo que pensaba, estoy muy dispuesto a considerarlo en vez de rodar mi propia como si hubiera estado tan lejos.
ejemplo genérico código de análisis:
my $state = 1;
while (my $token = get_next_token()) { # Usually next line
if ($state == 1) {
do_state1_processing();
if (token_matches_transition_1_to_2($token)) {
do_state_1_to_2_transition_processing();
$state == 2;
next;
} elsif (token_matches_transition_1_to_4($token)) {
do_state_1_to_4_transition_processing();
$state == 4;
next;
} else {
do_state1_continuation();
next;
}
} elsif ($state == 5) {
do_state5_processing();
if (token_matches_transition_5_to_6($token)) {
do_state_5_to_6_transition_processing();
$state == 6;
next;
} elsif (token_matches_transition_5_to_4($token)) {
do_state_5_to_4_transition_processing();
$state == 4;
next;
} else {
do_state5_continuation();
next;
}
} else {
}
}
¿Qué hay de 'FSA :: Rules'? (los módulos 'DFA :: *' mencionados [aquí] (http://www.perl.com/pub/2004/09/23/fsms.html) podrían ser otra ventaja). – Ouki
Yo mismo usaría un hash de subs devolviendo el siguiente estado en tal caso. Sin embargo, me gustaría ver qué más se puede usar, también. – Dallaylaen
@Dallaylaen: mi pensamiento exactamente, pero DVK pidió un módulo;) – Ouki