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 )