Data-DFA
view release on metacpan or search on metacpan
lib/Data/DFA.pm view on Meta::CPAN
is_deeply parseDtdElement(q(a, b*, c))->printAsExpr, $e;
}
if (1) #TprintAsExpr #TprintAsRe #TparseDtdElement
{my $e = q/element(q(a)), zeroOrMore(choice(element(q(b)), element(q(c)))), element(q(d))/;
my $d = eval qq/fromExpr($e)/;
confess $@ if $@;
my $E = $d->printAsExpr;
ok $e eq $E;
my $R = $d->printAsRe;
ok $R eq q(a (b | c)* d);
my $D = parseDtdElement(q(a, (b | c)*, d));
my $S = $D->printAsExpr;
ok $e eq $S;
}
if (1) # bypass
{my $n = Data::NFA::newNfa;
Data::NFA::addNewState($n) for 0..2;
$$n{0}->jumps->{$_}++ for 1..2;
$$n{1}->transitions->{a} = 2;
$$n{2}->final = 1;
my $d = fromNfa($n);
ok $d->print eq <<END;
State Final Symbol Target Final
1 0 1 a 1 1
2 1 1 1
END
}
if (1) {
my $d = fromExpr(zeroOrMore(choice(map{element("$_")} 'a'..'b')));
ok $d->print("(a|b)*") eq <<END;
(a|b)*
State Final Symbol Target Final
1 0 1 a 0 1
2 b 0 1
END
}
if (1) {
my $d = fromExpr(zeroOrMore(choice(map{element("$_")} 'a'..'e')));
is_deeply $d->print("(a|b|c|d|e)*"), <<END;
(a|b|c|d|e)*
State Final Symbol Target Final
1 0 1 a 0 1
2 b 0 1
3 c 0 1
4 d 0 1
5 e 0 1
END
}
if (0) {
my $d = parseDtdElement('(#PCDATA | dl | parml | div | equation-block | fig | imagemap | syntaxdiagram | equation-figure | image | lines | lq | note | hazardstatement | object | ol | pre | codeblock | msgblock | screen | simpletable | sl | table | ...
is_deeply $d->print("p"), <<END;
p
State Final Symbol Target Final
1 0 1 PCDATA 0 1
2 abbreviated-form 0 1
3 apiname 0 1
4 b 0 1
5 boolean 0 1
6 cite 0 1
7 cmdname 0 1
8 codeblock 0 1
9 codeph 0 1
10 data 0 1
11 data-about 0 1
12 div 0 1
13 dl 0 1
14 draft-comment 0 1
15 equation-block 0 1
16 equation-figure 0 1
17 equation-inline 0 1
18 fig 0 1
19 filepath 0 1
20 fn 0 1
21 foreign 0 1
22 hazardstatement 0 1
23 i 0 1
24 image 0 1
25 imagemap 0 1
26 indexterm 0 1
27 indextermref 0 1
28 keyword 0 1
29 line-through 0 1
30 lines 0 1
31 lq 0 1
32 markupname 0 1
33 mathml-d-foreign 0 1
34 menucascade 0 1
35 msgblock 0 1
36 msgnum 0 1
37 msgph 0 1
38 note 0 1
39 numcharref 0 1
40 object 0 1
41 ol 0 1
42 option 0 1
43 overline 0 1
44 parameterentity 0 1
45 parml 0 1
46 parmname 0 1
47 ph 0 1
48 pre 0 1
49 q 0 1
50 required-cleanup 0 1
51 screen 0 1
52 simpletable 0 1
53 sl 0 1
54 sort-as 0 1
55 state 0 1
56 sub 0 1
57 sup 0 1
58 svg-d-foreign 0 1
59 synph 0 1
60 syntaxdiagram 0 1
61 systemoutput 0 1
62 table 0 1
63 term 0 1
64 text 0 1
65 textentity 0 1
66 tm 0 1
67 tt 0 1
68 u 0 1
69 uicontrol 0 1
70 ul 0 1
71 unknown 0 1
72 userinput 0 1
73 varname 0 1
74 wintitle 0 1
75 xmlatt 0 1
76 xmlelement 0 1
77 xmlnsname 0 1
78 xmlpi 0 1
79 xref 0 1
END
}
if (1)
{my sub test($@)
{my ($e, @t) = @_;
is_deeply printAsRe(fromExpr(@t)), $e;
};
my $a = element("a");
my $b = element("b");
my $sab = sequence($a, $b);
test q(a*), zeroOrMore($a);
test q(a+), oneOrMore($a);
( run in 1.372 second using v1.01-cache-2.11-cpan-df04353d9ac )