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

📄 tap::parser::grammar.3

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 3
字号:
.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05).\".\" Standard preamble:.\" ========================================================================.de Sh \" Subsection heading.br.if t .Sp.ne 5.PP\fB\\$1\fR.PP...de Sp \" Vertical space (when we can't use .PP).if t .sp .5v.if n .sp...de Vb \" Begin verbatim text.ft CW.nf.ne \\$1...de Ve \" End verbatim text.ft R.fi...\" Set up some character translations and predefined strings.  \*(-- will.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left.\" double quote, and \*(R" will give a right double quote.  \*(C+ will.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,.\" nothing in troff, for use with C<>..tr \(*W-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'.ie n \{\.    ds -- \(*W-.    ds PI pi.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch.    ds L" "".    ds R" "".    ds C` "".    ds C' ""'br\}.el\{\.    ds -- \|\(em\|.    ds PI \(*p.    ds L" ``.    ds R" '''br\}.\".\" Escape single quotes in literal strings from groff's Unicode transform..ie \n(.g .ds Aq \(aq.el       .ds Aq '.\".\" If the F register is turned on, we'll generate index entries on stderr for.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index.\" entries marked with X<> in POD.  Of course, you'll have to process the.\" output yourself in some meaningful fashion..ie \nF \{\.    de IX.    tm Index:\\$1\t\\n%\t"\\$2"...    nr % 0.    rr F.\}.el \{\.    de IX...\}.\".\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2)..\" Fear.  Run.  Save yourself.  No user-serviceable parts..    \" fudge factors for nroff and troff.if n \{\.    ds #H 0.    ds #V .8m.    ds #F .3m.    ds #[ \f1.    ds #] \fP.\}.if t \{\.    ds #H ((1u-(\\\\n(.fu%2u))*.13m).    ds #V .6m.    ds #F 0.    ds #[ \&.    ds #] \&.\}.    \" simple accents for nroff and troff.if n \{\.    ds ' \&.    ds ` \&.    ds ^ \&.    ds , \&.    ds ~ ~.    ds /.\}.if t \{\.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u".    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'.\}.    \" troff and (daisy-wheel) nroff accents.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'.ds 8 \h'\*(#H'\(*b\h'-\*(#H'.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#].ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#].ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#].ds ae a\h'-(\w'a'u*4/10)'e.ds Ae A\h'-(\w'A'u*4/10)'E.    \" corrections for vroff.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'.    \" for low resolution devices (crt and lpr).if \n(.H>23 .if \n(.V>19 \\{\.    ds : e.    ds 8 ss.    ds o a.    ds d- d\h'-1'\(ga.    ds D- D\h'-1'\(hy.    ds th \o'bp'.    ds Th \o'LP'.    ds ae ae.    ds Ae AE.\}.rm #[ #] #H #V #F C.\" ========================================================================.\".IX Title "TAP::Parser::Grammar 3".TH TAP::Parser::Grammar 3 "2008-01-23" "perl v5.10.0" "User Contributed Perl Documentation".\" For nroff, turn off justification.  Always turn off hyphenation; it makes.\" way too many mistakes in technical documents..if n .ad l.nh.SH "NAME"TAP::Parser::Grammar \- A grammar for the Test Anything Protocol..SH "VERSION".IX Header "VERSION"Version 3.07.SH "DESCRIPTION".IX Header "DESCRIPTION"\&\f(CW\*(C`TAP::Parser::Grammar\*(C'\fR tokenizes lines from a \s-1TAP\s0 stream and constructsTAP::Parser::Result subclasses to represent the tokens..PPDo not attempt to use this class directly.  It won't make sense.  It's mainlyhere to ensure that we will be able to have pluggable grammars when \s-1TAP\s0 isexpanded at some future date (plus, this stuff was really cluttering theparser)..Sh "Class Methods".IX Subsection "Class Methods"\fI\f(CI\*(C`new\*(C'\fI\fR.IX Subsection "new".PP.Vb 1\&  my $grammar = TAP::Grammar\->new($stream);.Ve.PPReturns \s-1TAP\s0 grammar object that will parse the specified stream..Sh "Instance Methods".IX Subsection "Instance Methods"\fI\f(CI\*(C`set_version\*(C'\fI\fR.IX Subsection "set_version".PP.Vb 1\&  $grammar\->set_version(13);.Ve.PPTell the grammar which \s-1TAP\s0 syntax version to support. The lowestsupported version is 12. Although '\s-1TAP\s0 version' isn't valid version 12syntax it is accepted so that higher version numbers may be parsed..PP\fI\f(CI\*(C`tokenize\*(C'\fI\fR.IX Subsection "tokenize".PP.Vb 1\&  my $token = $grammar\->tokenize;.Ve.PPThis method will return a TAP::Parser::Result object representing thecurrent line of \s-1TAP\s0..PP\fI\f(CI\*(C`token_types\*(C'\fI\fR.IX Subsection "token_types".PP.Vb 1\&  my @types = $grammar\->token_types;.Ve.PPReturns the different types of tokens which this grammar can parse..PP\fI\f(CI\*(C`syntax_for\*(C'\fI\fR.IX Subsection "syntax_for".PP.Vb 1\&  my $syntax = $grammar\->syntax_for($token_type);.Ve.PPReturns a pre-compiled regular expression which will match a chunk of \s-1TAP\s0corresponding to the token type.  For example (not that you should really payattention to this, \f(CW\*(C`$grammar\->syntax_for(\*(Aqcomment\*(Aq)\*(C'\fR will return\&\f(CW\*(C`qr/^#(.*)/\*(C'\fR..PP\fI\f(CI\*(C`handler_for\*(C'\fI\fR.IX Subsection "handler_for".PP.Vb 1\&  my $handler = $grammar\->handler_for($token_type);.Ve.PPReturns a code reference which, when passed an appropriate line of \s-1TAP\s0,returns the lexed token corresponding to that line.  As a result, the basic\&\s-1TAP\s0 parsing loop looks similar to the following:.PP.Vb 10\& my @tokens;\& my $grammar = TAP::Grammar\->new;\& LINE: while ( defined( my $line = $parser\->_next_chunk_of_tap ) ) {\&     foreach my $type ( $grammar\->token_types ) {\&         my $syntax  = $grammar\->syntax_for($type);\&         if ( $line =~ $syntax ) {\&             my $handler = $grammar\->handler_for($type);\&             push @tokens => $grammar\->$handler($line);\&             next LINE;\&         }\&     }\&     push @tokens => $grammar\->_make_unknown_token($line);\& }.Ve.SH "TAP GRAMMAR".IX Header "TAP GRAMMAR"\&\fB\s-1NOTE:\s0\fR  This grammar is slightly out of date.  There's still some discussionabout it and a new one will be provided when we have things better defined..PPThe TAP::Parser does not use a formal grammar because \s-1TAP\s0 is essentially astream-based protocol.  In fact, it's quite legal to have an infinite stream.For the same reason that we don't apply regexes to streams, we're not using aformal grammar here.  Instead, we parse the \s-1TAP\s0 in lines..PPFor purposes for forward compatability, any result which does not match thefollowing grammar is currently referred to asTAP::Parser::Result::Unknown.  It is \fInot\fR a parse error..PPA formal grammar would look similar to the following:.PP.Vb 4\& (*\&     For the time being, I\*(Aqm cheating on the EBNF by allowing\&     certain terms to be defined by POSIX character classes by\&     using the following syntax:\&\&       digit ::= [:digit:]\&\&     As far as I am aware, that\*(Aqs not valid EBNF.  Sue me.  I\&     didn\*(Aqt know how to write "char" otherwise (Unicode issues).\&     Suggestions welcome.\& *)\&\& tap            ::= version? { comment | unknown } leading_plan lines\&                    |\&                    lines trailing_plan {comment}\&\& version        ::= \*(AqTAP version \*(Aq positiveInteger {positiveInteger} "\en"\&\& leading_plan   ::= plan skip_directive? "\en"\&\& trailing_plan  ::= plan "\en"\&\& plan           ::= \*(Aq1..\*(Aq nonNegativeInteger\&\& lines          ::= line {line}\&\& line           ::= (comment | test | unknown | bailout ) "\en"\&\& test           ::= status positiveInteger? description? directive?\&\& status         ::= \*(Aqnot \*(Aq? \*(Aqok \*(Aq\&\& description    ::= (character \- (digit | \*(Aq#\*(Aq)) {character \- \*(Aq#\*(Aq}\&\& directive      ::= todo_directive | skip_directive\&\& todo_directive ::= hash_mark \*(AqTODO\*(Aq \*(Aq \*(Aq {character}\&\& skip_directive ::= hash_mark \*(AqSKIP\*(Aq \*(Aq \*(Aq {character}\&\& comment        ::= hash_mark {character}\&\& hash_mark      ::= \*(Aq#\*(Aq {\*(Aq \*(Aq}\&\& bailout        ::= \*(AqBail out!\*(Aq {character}\&\& unknown        ::= { (character \- "\en") }\&\& (* POSIX character classes and other terminals *)\&\& digit              ::= [:digit:]\& character          ::= ([:print:] \- "\en")\& positiveInteger    ::= ( digit \- \*(Aq0\*(Aq ) {digit}\& nonNegativeInteger ::= digit {digit}.Ve

⌨️ 快捷键说明

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