-2

入力文字列に対して次の変換を実行できるコードを既に作成しました

3(7x-1)+10x-4+3x=90x+1
(3*(7x-1)+10x-4+3x)-(90x+1)
37x1-*10x+4-3x+90x1+-

しかし今、私はこの最後のものに少し行き詰まっています。X を使用せずに RPN を解決するコードの書き方を知っています。ただし、関連する x でこれを解析する方法がわかりません。

EIDT: 誤った RPN エラーを修正し、次のように表示されるようになりました

3 7 x * 1 - * 10 x * + 4 - 3 x * + 90 x * 1 + -
4

3 に答える 3

2

関連する x でこれを解析する方法がわかりません。

次の形式の文法を処理するパーサーを作成したようです。

stmt : expr '=' expr

expr : sum  

sum  : prod '+' sum
     | prod '-' sum
     | prod

prod : term prod
     | term

term : '(' expr ')'
     | NUM

変更する必要があるのはterm.

term : '(' expr ')'
     | NUM
     | VAR
于 2015-05-01T15:49:41.333 に答える
1

数学::RPN :

 use Math::RPN;
 $value=rpn(expr...);
 @array=rpn(expr...);

expr... は、RPN 式を含む 1 つ以上のスカラーまたはスカラーのリストです。RPN 式は、コンマで区切られた一連の数値および/または演算子です。(コンマはスカラー内でのみ必要です)。

于 2015-05-01T15:49:43.810 に答える