1

質問の名前はあまりわかりませんが、すぐに説明する方法がわからなかったので、ここに長いバージョンを示します。

まず、これが私の現在のコードです:

#! /usr/bin/perl

use strict;
use warnings;

my $input;
while (<>) {
        $input .= $_;
}
$input =~ s/ |\n//g;

print "\n";

私がやりたいのは計算機を作ることです。例えば、ユーザーecho "8 * 5 + 21-15" | calculateが計算すると正しく計算されます。これが私の思考の進歩です。まず、文字列全体を取得して、すべての空白文字を取り除きます。次に、*、+、/、または-の発生に対してindex()を実行したいと思いました。次に、これらの演算子の前にあるすべての文字を文字列に追加してから(int)文字列に追加し、演算子の後の部分に同じことを行ってから、それらの間で操作を実行したいと思いました。しかし、私は実際にこれを行う方法について多くの手がかりを持っていません。また、私はPerlに非常に慣れていないので(3日間の経験)、可能であればゆっくりと進んでください。

どうもありがとう。

4

1 に答える 1

0

電卓が括弧を処理できないことを受け入れることができる場合は、正規表現を使用して文字列を解析します。

#!/usr/bin/env perl
use strict;
use warnings;

my @tokens = <STDIN> =~ /(\d+|\+|-|\*|\/)/g;
print "$_\n" for @tokens;

これにより、作業可能なトークンの配列が提供されます。

echo "8 * 5 + 21-15" | script.pl

印刷します

8
*
5
+
21
-
15

トークンに対して正しい計算を行うコードを作成するのはあなた次第です。パーレンの解析を試みない場合はそれほど難しくありませんが、そうする場合は、再帰的なパーサーを作成する必要があります。これははるかに困難です。

于 2012-04-21T19:49:10.463 に答える