⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xml.pm

📁 这是一个DFA简化和生成LL(1)分析表的程序,自动生成表格及图形
💻 PM
字号:
#: xml/XML.pm#: Regexp emitter for xml#: Copyright (c) 2006 Agent Zhang#: 2006-05-13 2006-05-17package re::XML;use strict;use warnings;#use Data::Dumper::Simple;use re::Parser;use re::AST;use Language::AttributeGrammar;#use Scalar::Util qw( looks_like_number );sub translate {    my ($self, $src) = @_;    #warn $src;    my $parser = re::Parser->new() or die "Can't construct the parser!\n";    my $ptree = $parser->program($src) or return undef;    return $self->emit($ptree);}sub emit {    my ($self, $ptree) = @_;    #warn Dumper($ptree);    $xml::xml::emit::grammar ||= new Language::AttributeGrammar <<'END_GRAMMAR';program:    $/.xml = { "<expression>\n" . $<expression>.xml . "</expression>\n" }expression: $/.xml = { "<alternation>\n" . $<alternation>.xml . "</alternation>\n"; }alternation:     $/.xml = { $<alternation>.xml . "<concat>\n" . $<concat>.xml . "</concat>\n"; }concat:     $/.xml = { $<concat>.xml . $<modified_atom>.xml; }modified_atom:  $/.xml = { "<modified_atom>\n" . $<atom>.xml . $<modifier>.xml . "</modified_atom>\n"; }atom:           $/.xml = { re::XML::emit_atom( $/, $<child>.xml ); }modifier:       $/.xml = { "<modifier>" . $<__VALUE__> . "</modifier>\n"; }char:           $/.xml = { "<char>" . re::XML::escape( $<__VALUE__> ) . "</char>\n"; }nil:        $/.xml = { '' }END_GRAMMAR    $xml::xml::emit::grammar->apply($ptree, 'xml');}sub emit_atom {    my ($self, $re) = @_;    my $xml = '';    #warn "YEAH YEAH YEAH $self";    if (defined $self->{expression}) {        #warn "HERE!!!!";        $xml .= "<expression>\n$re</expression>\n";    } else {        $xml .= $re;    }    "<atom>\n$xml</atom>\n";}sub escape {    my $s = shift;    #warn "++ ESCAPE: $s";    $s =~ s/\&/\&amp;/g;    $s =~ s/</\&lt;/g;    $s =~ s/>/\&gt;/g;    $s =~ s/"/&quot;/g;    $s =~ s/'/&apos;/g;    #$s =~ s/ /&nbsp;/g;    #warn "-- ESCAPE: $s";    return $s;}1;__END__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -