を残すここでピュアJava 8の実装です:私たちはvariables
マップ(彼らは整数であると仮定)で変数を格納
import java.io.*;
import java.util.*;
import java.util.function.*;
public class Calculator {
Map<String, Integer> variables = new HashMap<>();
Map<String, Consumer<String>> commands = new HashMap<>();
Scanner scanner = new Scanner(System.in);
PrintStream out = System.out;
private Consumer<String> twoArgs(BiConsumer<String, String> bc) {
return args -> {
String[] fields = args.split(",\\s*", 2);
bc.accept(fields[0], fields[1]);
};
}
public Calculator() {
commands.put("READ", name -> variables.put(name, scanner.nextInt()));
commands.put("PRINT", name -> out.println(variables.get(name)));
commands.put("ADD", twoArgs((var1, var2) ->
variables.merge(var1, variables.getOrDefault(var2, 0), Integer::sum)));
}
public void process(BufferedReader input) {
input.lines()
.map(line -> line.split("\\s+", 2))
.filter(fields -> fields.length == 2)
.forEach(fields ->
commands.getOrDefault(fields[0].toUpperCase(), s -> {})
.accept(fields[1]));
}
public static void main(String[] args) {
new Calculator().process(new BufferedReader(new StringReader(
"READ A\nREAD B\n\n\nADD A, B\n\nPRINT A")));
}
}
とcommands
地図のコマンド。コマンドは単一文字列パラメータを受け入れ、2つのパラメータコマンド(ADDなど)を単一のパラメータに変換するアダプタメソッドがあります。コンストラクタでさらにコマンドを追加することができます。
外部ソースファイル、リソースなどからプログラムのソースコードを読み込むメインメソッドを更新します。この実装にはエラー処理がありません。誤った入力は無視されるか、プログラムがクラッシュする可能性があります。
まだコードを書いていませんか?もしそうなら、具体的な問題点を示して説明してください。 – Jeremy
私はコアJavaの基礎といくつかの概念を事前にJavaで知っていますが、これはインタプリタのコーディングを試みるのは初めてです。私はコードを理解しようと多くの努力をしましたが、answer.doを見つけることができませんでした。 – Jey
これは小さな問題ではありません。一般的には、使用する言語の構文と文法を定義し、パーサーと実行コードを記述する必要があります。あなたのために重労働を行う可能性が最も高いライブラリがあります。 (JavaCC http://javacc.java.net/)を見てみたいかもしれません。 – Carsten