あなたが私の新しいスタックベースの言語を実装する時間です!StackyMathと呼ばれます。これは、スタック上の8つの操作とスタックに番号を追加する方法を備えたスタックベースの言語になります。
操作のリスト:
/:部門。スタックの上位2桁で実行されます。結果をスタックにプッシュします。*:乗算。スタックの上位2桁で実行されます。結果をスタックにプッシュします-:減算。スタックの上位2桁で実行されます。結果をスタックにプッシュします+:追加。スタックの上位2桁で実行されます。結果をスタックにプッシュします^:べき乗。スタックの上位2桁で実行されます。結果をスタックにプッシュします%:モジュロ。スタックの上位2桁で実行されます。結果をスタックにプッシュします!:階乗。スタックの一番上の番号で実行されます。結果をスタックにプッシュしますD:スタックの一番上の番号を複製します
擬似コードで定義された操作:
/:push(pop divided by pop)*:push(pop times pop)-:push(pop minus pop)+:push(pop plus pop)^:push(pop to the pop)%:push(pop mod pop)!:push(factorial pop)D:t = pop; push(t); push(t)
数字をスタックにプッシュする方法:
スタックに番号を追加するのは簡単です。必要な場所にプログラムに生の番号を入れるだけです。スタックに複数の数字を配置する必要がある場合は、コンマ(,)で区切ることができます。あなたのプログラムは-入力の数字を処理する必要はありません。ユーザーが数字を望むなら、否定したい数字、ゼロ、-。プログラムの入力の数値も正の整数に制限されます。
入力:
プログラムは、コマンドラインで入力するか、標準入力から入力する必要があります。入力は,、必要に応じて区切られた数字(科学表記法または小数なし)と上記で定義された操作のみで構成されます。
出力:
プログラムは、スタックの一番上に番号を印刷する必要があります。
エラーの場合:
- プログラムがスタックをオーバーポップしようとする場合、印刷する必要があります
StackUnderflowException!!!。 - ゼロによる除算がある場合は、印刷します 
DivisionByZeroException!!! - プログラムの実行中または入力内の数値の処理中に、64ビットを超える数値の場合、印刷 
NumberOverflowException!!! - どういうわけか、スタックの一番上の負の数を取得し、階乗を行う必要がある場合、印刷 
NegativeFactorialException!!! - スタックの最上部に浮動小数点数があり、次の演算が階乗である場合、印刷 
FloatingFactorialException!!! - プログラムの終了時にスタックに数字がない場合(つまり、プログラムが空だった場合) 
EmptyProgram!!! 
ノート:
- へのすべてのエラー出力は、yo std errまたは最も近い同等のものになるはずです。
 - すべての数値は64ビット浮動小数点に制限されます。
 
サンプルプログラム:
50,47*                 -> 2350
50,47/                 -> 0.94
100,8!                 -> 40320  
100D*                  -> 10000
!                      -> StackUnderflowException!!!
5,2/!                  -> FloatingFactorialException!!!  
4,3!2*/                -> 3 
654,489,48,43/5*7D+-*% -> 77.68749999999909
                       -> EmptyProgram!!!
(必要に応じて追加できます)
654,489,48,43/5*7D+-*%返す必要があります77.6875。(43/48*5-(7+7)なければならない(7+7)-43/48*5)
                
!を除くF)。