comparison Lib/IMPL/Text/Parser/Chunk.pm @ 39:4f5a6a1bfb0e

Text parser
author Sergey
date Tue, 08 Dec 2009 17:28:06 +0300
parents c529d386d80e
children 16ada169ca75
comparison
equal deleted inserted replaced
38:d660fb38b7cc 39:4f5a6a1bfb0e
1 package IMPL::Text::Parser::Chunk; 1 package IMPL::Text::Parser::Chunk;
2 use strict; 2 use strict;
3 use warnings; 3 use warnings;
4 4
5 use base qw(IMPL::Object); 5 use base qw(IMPL::Object IMPL::Object::Autofill);
6 6
7 use IMPL::Class::Property; 7 use IMPL::Class::Property;
8 use IMPL::Class::Property::Direct; 8 use IMPL::Class::Property::Direct;
9 9
10 use constant { 10 use constant {
11 OP_REGEXP => 1, 11 OP_REGEXP => 1,
12 OP_STRING => 2, 12 OP_STRING => 2,
13 OP_REFERENCE => 3, 13 OP_REFERENCE => 3,
14 OP_CHUNK => 4, 14 OP_CHUNK => 4,
15 OP_THROW => 5, 15 OP_SWITCH => 5,
16 OP_TRYCATCH => 6 16 OP_REPEAT => 7
17 }; 17 };
18 18
19 BEGIN { 19 BEGIN {
20 public _direct property chunkName => prop_get; 20 public _direct property chunkName => prop_get;
21 public _direct property opStream => prop_get; 21 public _direct property opStream => prop_get;
57 die new IMPL::InvalidArgumentException unless UNIVERSAL::isa($chunk,'IMPL::Text::Parser::Chunk'); 57 die new IMPL::InvalidArgumentException unless UNIVERSAL::isa($chunk,'IMPL::Text::Parser::Chunk');
58 58
59 push @{$this->{$opStream}}, [OP_CHUNK, $chunk]; 59 push @{$this->{$opStream}}, [OP_CHUNK, $chunk];
60 } 60 }
61 61
62 sub Throw { 62 sub Switch {
63 my ($this, $msg) = @_; 63 my $this = shift;
64 64
65 push @{$this->{$opStream}}, [OP_THROW, $msg]; 65 push @{$this->{$opStream}}, [OP_SWITCH, @_];
66 } 66 }
67 67
68 sub TryCatch { 68 sub Repeat {
69 my ($this,$chunkTry,$chunkCatch) = @_; 69 my ($this,$chunk,$min,$max) = @_;
70 70
71 push @{$this->{$opStream}}, [OP_TRYCATCH, $chunkTry, $chunkCatch]; 71 die new IMPL::InvalidArgumentException unless UNIVERSAL::isa($chunk,'IMPL::Text::Parser::Chunk');
72 }
73
74 sub compile {
75 my ($this) = @_;
76 72
77 my $text = ''; 73 push @{$this->{$opStream}}, [OP_REPEAT, $chunk, $min, $max ];
78
79 if ($this->{$opStream}) {
80 foreach my $op (@{$this->{$opStream}}) {
81 my $code = shift @$op;
82
83 if ($code == OP_REGEXP) {
84
85 } elsif ($code == OP_STRING) {
86
87 } elsif ($code == OP_REFERENCE) {
88
89 } elsif ($code == OP_CHUNK) {
90
91 } elsif ($code == OP_THROW) {
92
93 } elsif ($code == OP_TRYCATCH) {
94
95 }
96 }
97 }
98 } 74 }
99 75
100 1; 76 1;
77
78 __END__
79
80 =pod
81
82 =head1 DESCRIPTION
83 Именованный поток операций
84
85 =head1 MEMBERS
86
87 =level
88
89 =item C<<$obj->>>
90
91 =back
92
93 =cut