Am Java編程的新手,想知道如何編寫解釋器程序來在java中添加兩個數字。解釋器程序在java中添加兩個數字
解釋器程序應該讀取源文件中的行並根據源文件中的行執行必要的操作。
示例:如果在源文件中的第一行被讀取然後解釋應該要求用於從用戶(鍵盤)輸入值將它存儲到A.
同樣要爲READ B和用於進行ADD A,B,PRINT A操作。
以下是我的要求的源文件示例。
READ A
READ B
ADD A, B
PRINT A
RESULT:
10
20
30
Am Java編程的新手,想知道如何編寫解釋器程序來在java中添加兩個數字。解釋器程序在java中添加兩個數字
解釋器程序應該讀取源文件中的行並根據源文件中的行執行必要的操作。
示例:如果在源文件中的第一行被讀取然後解釋應該要求用於從用戶(鍵盤)輸入值將它存儲到A.
同樣要爲READ B和用於進行ADD A,B,PRINT A操作。
以下是我的要求的源文件示例。
READ A
READ B
ADD A, B
PRINT A
RESULT:
10
20
30
你要做的是做一個scripting language。我與你聯繫的維基百科文章應該讓你開始,進一步的谷歌搜索將爲您提供更多的細節。 (一個好的JavaWorld文章腳本語言。)
你要做的就是打破這個問題在幾件的第一件事,這是我會怎樣處理這(假設你已經有Java的知識):
希望,可以讓你開始,我在這裏給您留下short example on how to read text files
這裏是純Java 8實現:
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")));
}
}
我們存儲在variables
地圖變量(假定他們是整數)和命令在commands
映射。該命令接受單個字符串參數,並且有適配器方法可以將兩個參數命令(如ADD)轉換爲單個參數。你可以在構造函數中添加更多的命令。
更新從外部文件,資源等讀取程序源代碼的主要方法。還要注意,此實現沒有錯誤處理:不正確的輸入將被忽略或導致程序崩潰。
你有寫過任何代碼嗎?如果是這樣,請展示並描述您遇到的任何具體問題。 – Jeremy
我知道java中的核心基礎知識和一些概念,但是這是我第一次嘗試解釋器編碼。我嘗試了很多方法來找出代碼,但無法找到答案。如果你有java.can中的任何解釋器編碼,那麼你可以幫我解決問題。 – Jey
這不是一個小問題。一般來說,您需要定義語言的語法和語法,然後編寫解析器和執行代碼。那裏最有可能的圖書館會爲你做繁重的工作。你可能想看看(JavaCC http://javacc.java.net/)。 – Carsten