Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Alexander Onokhov                    2:5020/400     21 Apr 2004  15:15:18
 To : Ivan Frolcov
 Subject : Re: Парсинг "формулы"
 -------------------------------------------------------------------------------- 
 
 "Ivan Frolcov" <lala@mail.ge> writes:
 
 > Мне же, в свою очередь, внутренний голос говорит, что проще выписать
 > все  возможные варианты и написать 
 > несколько подстановок - что-то около 10.
 
 Да? А можно посмотреть на что это будет похоже?
 
 Hа Perl я могу сказать  так:
 
 #-----------------------------------
 #!/usr/bin/perl -l
 
 use strict;
 use warnings;
 
 my $prn = qr{\((?:(?>[^()]+)|(??{$prn}))*\)};
 my $tok = qr{(?:\w+|$prn)};
 my $sgn = qr{[+-]};
 
 sub tokenize {
   local $_ = shift;
 
   no warnings qw(uninitialized);
 
   if( /^($sgn)?($prn)$/ ) {
     my $s = $1 || '+';
     my $t = $2;
     $t =~ s/^\((.*)\)$/$1/;
     return
       map {
         s/^(\+)?(?=[^+-])/-/ || s/^-/+/ if $s eq '-';
         $_
       }
       tokenize($t);  
   }
 
   return /\(/ ? _tkz_mul($_) : $_ if /^[+-]?$tok(?:\*$tok)*$/;
 
   my @r;
 
   push @r,  ($1 || '+') . $2 while m/\G($sgn)?($tok(?:\*$tok)*)/g;
 
   return map {tokenize( $_ )} @r;
 
 }
 
 sub _tkz_mul {
   local $_ = shift;
 
   my @r;
 
   my $sign = s/^([+-])// ? $1 : '+';  
 
   /^($tok)\*(.+)/;
 
   foreach  my $a (tokenize($1)) {
     foreach  my $b (tokenize($2)) {
       my ($sa, $va, $sb, $vb) =
         map {/^($sgn)?(.+)$/; (($1 || '+'), $2)} $a, $b;
       my  $s = $sa eq $sb ? '+' : '-';
       $s =~ tr/+-/-+/ if $sign eq '-';
       push @r, "$s$va*$vb";
     }
   }
 
   return @r;
 }
 
 sub foo {
   my $f = shift;
   $f =~ tr/ //d;
 
   my $res;
   for ($res = join ' ', map {split ''} tokenize($f)) {
     s/ \* /*/g;
     s/^\+ //;
   }
 
   return $res;
 }
 
 my $f = '1 - (1 + x*(a-b)*(a+b)))';
 
 print for $f, foo($f);
 
 #-----------------------------------
 Комментарии не писал, чтоб человеку, сдающему зачет веселее было.
 Оно даже вложенные скобки понимает (с оговорками). 
 Hе думаю, что калька с лисповского решения получится лучше.
 -- 
 Alexander Onokhov
 --- ifmail v.2.15dev5.3
  * Origin: What me? (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Парсинг "формулы"   Sergey Ermakov   15 Apr 2004 00:30:26 
 Re: Парсинг "формулы"   Alexey Mahotkin   15 Apr 2004 12:10:41 
 Re: Парсинг "формулы"   Ivan Frolcov   15 Apr 2004 12:28:25 
 Re: Парсинг "формулы"   Artem Chuprina   15 Apr 2004 13:05:08 
 Re: Парсинг "формулы"   Alexey Mahotkin   16 Apr 2004 09:29:49 
 Re: Парсинг "формулы"   …. Љ®ў «м   19 Apr 2004 17:07:07 
 Re: Парсинг "формулы"   Artem Chuprina   19 Apr 2004 18:14:05 
 Re: Парсинг "формулы"   …. Љ®ў «м   19 Apr 2004 18:16:42 
 Re: Парсинг "формулы"   Artem Chuprina   19 Apr 2004 19:46:50 
 Re: Парсинг "формулы"   Ivan Frolkov   19 Apr 2004 21:55:43 
 Re: Парсинг "формулы"   Serge Chervjakov   19 Apr 2004 23:23:15 
 Re: Парсинг "формулы"   Alexey Mahotkin   19 Apr 2004 23:34:35 
 Re: Парсинг "формулы"   Ivan Frolcov   20 Apr 2004 11:56:14 
 Re: Парсинг "формулы"   Alexander Onokhov   21 Apr 2004 15:15:18 
 Re: Парсинг "формулы"   Ivan Frolcov   21 Apr 2004 16:15:02 
 Re: Парсинг "формулы"   …. Љ®ў «м   20 Apr 2004 09:23:25 
 Re: Парсинг "формулы"   Artem Chuprina   20 Apr 2004 12:10:46 
 Re: Парсинг "формулы"   …. Љ®ў «м   20 Apr 2004 12:37:56 
 Re: Парсинг "формулы"   Artem Chuprina   20 Apr 2004 16:31:02 
 Парсинг "формулы"   Kirill Joss   21 Apr 2004 19:54:08 
 Re: Парсинг "формулы"   Alexey Mahotkin   19 Apr 2004 23:34:35 
 Re: Парсинг "формулы"   Ivan Frolcov   20 Apr 2004 11:46:53 
 Re: Парсинг "формулы"   Alexey Mahotkin   15 Apr 2004 23:36:57 
 Re: Парсинг "формулы"   Ivan Frolcov   16 Apr 2004 11:19:29 
 Re: Парсинг "формулы"   Alexey Mahotkin   17 Apr 2004 00:20:28 
 Парсинг "формулы"   Sergey Ermakov   16 Apr 2004 19:09:24 
 Re: =?koi8-r?b?8MHS08nOxyAixs/SzdXM2SI=?=   Yuri Kostylev   21 Apr 2004 21:55:22 
 Парсинг "формулы"   Sergey Ermakov   16 Apr 2004 19:06:34 
 Re: Парсинг "формулы"   Alexey Mahotkin   17 Apr 2004 15:19:10 
 Re: =?koi8-r?b?8MHS08nOxyAixs/SzdXM2SI=?=   Yuri Kostylev   21 Apr 2004 22:08:17 
 Парсинг "формулы"   Bulat Ziganshin   15 Apr 2004 13:47:40 
 Парсинг "формулы"   Sergey Ermakov   16 Apr 2004 19:13:04 
 Re: Парсинг "формулы"   Andrei Protasovitski   17 Apr 2004 12:39:30 
 Парсинг "формулы"   Alexander Kostiuchenko   19 Apr 2004 02:12:51 
 Re: Парсинг "формулы"   Anatoly Moskovsky   19 Apr 2004 16:55:43 
Архивное /ru.perl/1022908f33d03.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional