Name
Data::NFA - Non deterministic finite state machine from regular expression.
Synopsis
Create a non deterministic finite state machine from a regular expression which can then be converted into a deterministic finite state machine by Data::DFA and used to parse sequences of symbols.
For example, the regular expression:
((a|b)*)**4
produces the following machine:
use Data::NFA qw(:all);
use Data::Table::Text qw(:all);
use Test::More qw(no_plan);
my $N = 4;
my $s = q(zeroOrMore(choice(element("a"), element("b"))));
my $nfa = eval qq(fromExpr(($s)x$N));
ok $nfa->printNws("((a|b)*)**$N: ") eq nws <<END;
((a|b)*)**4:
Location F Transitions Jumps
0 1 { a => 1 } [2, 4, 6, 8, 10, 12, 14, 16]
1 1 undef [0, 2, 3, 4, 6, 8, 10, 12, 14, 16]
2 0 { b => 3 } undef
3 1 undef [0, 2, 4, 6, 8, 10, 12, 14, 16]
4 1 { a => 5 } [6, 8, 10, 12, 14, 16]
5 1 undef [4, 6, 7, 8, 10, 12, 14, 16]
6 0 { b => 7 } undef
7 1 undef [4, 6, 8, 10, 12, 14, 16]
8 1 { a => 9 } [10, 12, 14, 16]
9 1 undef [8, 10, 11, 12, 14, 16]
10 0 { b => 11 } undef
11 1 undef [8, 10, 12, 14, 16]
12 1 { a => 13 } [14, 16]
13 1 undef [12, 14, 15, 16]
14 0 { b => 15 } undef
15 1 undef [12, 14, 16]
16 1 undef undef
END
Description
Non deterministic finite state machine from regular expression.
Version "20181027".
The following sections describe the methods in each functional area of this module. For an alphabetic listing of all methods by name see Index.
Index
Installation
This module is written in 100% Pure Perl and, thus, it is easy to read, comprehend, use, modify and install via cpan:
sudo cpan install Data::NFA
Author
Copyright
Copyright (c) 2016-2018 Philip R Brenan.
This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.