- 论坛徽章:
- 7
|
my brick.pl
- #/usr/bin/perl
- use 5.024;
- my @op = qw[ + - * / ^ ~ ];
- my @preass = ( [ 0, 0 ], [ 0, 0 ], [ 1, 0 ], [ 1, 0 ], [ 2, 1 ], [ 3, 1 ] );
- my ( @it, @ass );
- sub that;
- for my $i ( 0 .. $#op ) {
- $it[ $preass[$i][0] ] .= "\\$op[$i]";
- $ass[ $preass[$i][0] ] //= $preass[$i][1];
- }
- @it = map qr/\s*([$_])\s*/, @it;
- sub that {
- my ( $equ, $i ) = @_;
- return @$equ if $i > $#it;
-
- state $at = [ 0, -3 ];
- state $join = [ [ 0 .. 2 ], [ -3 .. -1 ] ];
- local $| = 1;
-
- my @one = map $|-- ? that [ split $it[$i] ], $i + 1 : $_, @$equ;
- my $ass = $ass[ $i - 1 ];
- my $pos = $at->[$ass];
- my $dit = $join->[$ass];
- splice @one, $pos, 3, "(@one[@$dit])" until @one == 1;
- @one;
- }
- sub this { that [shift], 0 }
- while (<DATA>) {
- chomp;
- say $_, ' =>';
- say this $_;
- say '-' x 64;
- }
- __DATA__
- 1+2+3+4+5
- 1*2*3*4 * 5 + 6-7 /8
- 1^2~3*4-5
- 1/2/3/4/5*6*7^8^9-10-11*12
- a + b * c ^ d + e - f * g / h ^ i ~ j
- 3 ^ 4 ^ 5 ^ 6 - 7 / 8 + 9 ^ 10 ^ 11 * 12
- 1 + 2 + 3 - 4 - 5 * 6 * 7 / 8 / 9 ^ 10 ^ 11 ~ 12 ~ 13 - 14
- 1 - 2 ^ 3 ^ 4 + 5 * 6 / 7
复制代码
op:
1+2+3+4+5 =>
((((1 + 2) + 3) + 4) + 5)
----------------------------------------------------------------
1*2*3*4 * 5 + 6-7 /8 =>
((((((1 * 2) * 3) * 4) * 5) + 6) - (7 / )
----------------------------------------------------------------
1^2~3*4-5 =>
(((1 ^ (2 ~ 3)) * 4) - 5)
----------------------------------------------------------------
1/2/3/4/5*6*7^8^9-10-11*12 =>
((((((((1 / 2) / 3) / 4) / 5) * 6) * (7 ^ (8 ^ 9))) - 10) - (11 * 12))
----------------------------------------------------------------
a + b * c ^ d + e - f * g / h ^ i ~ j =>
(((a + (b * (c ^ d))) + e) - ((f * g) / (h ^ (i ~ j))))
----------------------------------------------------------------
3 ^ 4 ^ 5 ^ 6 - 7 / 8 + 9 ^ 10 ^ 11 * 12 =>
(((3 ^ (4 ^ (5 ^ 6))) - (7 / ) + ((9 ^ (10 ^ 11)) * 12))
----------------------------------------------------------------
1 + 2 + 3 - 4 - 5 * 6 * 7 / 8 / 9 ^ 10 ^ 11 ~ 12 ~ 13 - 14 =>
(((((1 + 2) + 3) - 4) - ((((5 * 6) * 7) / / (9 ^ (10 ^ (11 ~ (12 ~ 13)))))) - 14)
----------------------------------------------------------------
1 - 2 ^ 3 ^ 4 + 5 * 6 / 7 =>
((1 - (2 ^ (3 ^ 4))) + ((5 * 6) / 7))
----------------------------------------------------------------
|
评分
-
查看全部评分
|