Mercurial > pub > Impl
comparison Lib/IMPL/Text/Parser/Player.pm @ 40:ac21a032e7a9
bnf parser in progress
| author | Sergey |
|---|---|
| date | Thu, 10 Dec 2009 17:43:39 +0300 |
| parents | 4f5a6a1bfb0e |
| children | c442eb67fa22 |
comparison
equal
deleted
inserted
replaced
| 39:4f5a6a1bfb0e | 40:ac21a032e7a9 |
|---|---|
| 17 IMPL::Text::Parser::Chunk::OP_REPEAT , &MatchRepeat | 17 IMPL::Text::Parser::Chunk::OP_REPEAT , &MatchRepeat |
| 18 ); | 18 ); |
| 19 | 19 |
| 20 BEGIN { | 20 BEGIN { |
| 21 private _direct property _data => prop_all; | 21 private _direct property _data => prop_all; |
| 22 private _direct property _position => prop_all; | 22 private _direct property _current => prop_all; |
| 23 public _direct property Punctuation => prop_all; | 23 public _direct property Punctuation => prop_all; |
| 24 public _direct property Delimier => prop_all; | 24 public _direct property Delimier => prop_all; |
| 25 } | 25 } |
| 26 | 26 |
| 27 sub LoadString { | 27 sub LoadString { |
| 28 my ($this,$string) = @_; | 28 my ($this,$string) = @_; |
| 29 | 29 |
| 30 while ($string =~ /($rxDelim)|($rxPunct)|(.*?)/g) { | 30 my $rxDelim = /(\s+|[.,;!-+*~$^&|%()`@\\\/])/; |
| 31 | |
| 32 | 31 |
| 33 } | 32 my $line = 0; |
| 33 | |
| 34 $this->{$_data} = [ | |
| 35 map { | |
| 36 $line++; | |
| 37 map { | |
| 38 [$line,$_] | |
| 39 } split $rxDelim, $_ | |
| 40 } split /\n/, $string | |
| 41 ] | |
| 34 } | 42 } |
| 35 | 43 |
| 36 sub PlayChunk { | 44 sub PlayChunk { |
| 37 my ($this,$chunk) = @_; | 45 my ($this,$chunk) = @_; |
| 38 | 46 |
| 40 } | 48 } |
| 41 | 49 |
| 42 sub MatchRegexp { | 50 sub MatchRegexp { |
| 43 my ($this,$rx) = @_; | 51 my ($this,$rx) = @_; |
| 44 | 52 |
| 45 if ($this->{$_data} =~ $rx) { | 53 if ($this->{$_current}{token} =~ $rx) { |
| 46 | 54 |
| 47 } | 55 } |
| 48 } | 56 } |
| 49 | 57 |
| 58 sub moveNext { | |
| 59 my ($this) = @_; | |
| 60 | |
| 61 my $pos = $this->{$_current}{pos}; | |
| 62 | |
| 63 $pos ++; | |
| 64 | |
| 65 if ($pos < @{$this->{$_data}}) { | |
| 66 | |
| 67 $this->{$_current} = { | |
| 68 pos => $pos | |
| 69 }; | |
| 70 | |
| 71 } else { | |
| 72 return undef; | |
| 73 } | |
| 74 } | |
| 75 | |
| 50 1; | 76 1; |
