Java에서 REPL, JavaScript를 사용하여 컴퓨터 해석기를 사용합니다.

16903 단어 JavaScriptJavaREPL
Java를 사용하여 REPL을 만듭니다.를 참고하십시오.
JavaScript를 사용하여 컴퓨터 해석기를 만듭니다.

Java에서 시작하여 Script Engine Manager 및 ScriptEngine을 사용합니다.
JavaScript 실행
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
scriptEngine.eval("print(eval(¥"1+1¥"))")
REPLBase.java
이미 기본 분류입니다.
파생 측면에서 시작 메시지, 알림 등을 설정할 수 있습니다.
compile () 방법을 추상적인 방법으로 설정하여 파생 측면에서 실시합니다.
REPLBase.java
package replbase;

import java.io.IOException;
import java.io.PrintWriter;
import jline.ConsoleReader;

abstract public class REPLBase {

    protected String COMMAND = ":";
    protected String PROMPT_READLINE = ">>> ";
    protected String PROMPT_INCOMPLETE = "... ";
    protected String START_MESSAGE = "Welcome to REPLBase.(JRE " + System.getProperty("java.runtime.version") + ")\n" +
                                       "Type :help for help, :quit for quit\n";
    private ConsoleReader consoleReader;

    enum STATUS {
        READLINE,
        INCOMPLETE,
        QUIT
    }
    private STATUS status = STATUS.READLINE;

    public void start() {
        try(PrintWriter printwriter = new PrintWriter(System.out);) {
            consoleReader = new ConsoleReader(System.in, printwriter);
            if((START_MESSAGE != null) && (START_MESSAGE.isEmpty() == false)) {
                printString(START_MESSAGE);
            }
            while(status != STATUS.QUIT) {
                String input = readLine();
                analyze(input);
            }
        }
        catch(IOException exception) {
            System.err.println(exception);
        }
    }

    private String readLine() throws IOException{
        String prompt = status == STATUS.READLINE ? PROMPT_READLINE : PROMPT_INCOMPLETE;
        String input = consoleReader.readLine(prompt);
        return input;
    }

    private void analyze(String input) throws IOException {
        if((status != STATUS.INCOMPLETE) &&
           (input.startsWith(COMMAND) == true)) {
            command(input);
        }
        else {
            compile(input);
        }
    }

    abstract protected void compile(String input);

    private void command(String input) {
        String command = input.replaceFirst(COMMAND, "");
        switch(command) {
            case "help":
                printString("Available commands:\n" +
                              ":help    show this help\n" +
                              ":quit    exit the interpreter\n");
                break;
            case "quit":
                status = STATUS.QUIT;
                break;
            default:
                printString("Unknown command\n" +
                              "Type :help for help\n");
                break;
        }
    }

    public void printString(String message) {
        try {
            if((message != null) &&
               (message.isEmpty() == false)) {
                consoleReader.printString(message);
            }
        }
        catch(IOException exception) {
            System.err.println(exception);
        }
    }

}
REPLCalc.java
컴퓨터 해석기 실현류.
JavaScript의 eval() 방법을 사용했기 때문에 컴퓨터 논리를 작성할 필요가 없습니다.
그림을 보면 알 수 있고 변수도 사용할 수 있습니다.
REPLCalc.java
package replcalc;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import replbase.REPLBase;

public class REPLCalc extends REPLBase {

    private final ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
    private final ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");

    public static void main(String[] args) {
        REPLCalc replCalc = new REPLCalc();
        replCalc.PROMPT_READLINE = "[Calc] ";
        replCalc.START_MESSAGE = "Welcome to Calc.(Used JavaScript Engine)\n" +
                                   "Type :help for help, :quit for quit\n";
        replCalc.start();
    }

    @Override
    public void compile(String input) {
        try {
            scriptEngine.eval("print(eval(\"" + input + "\"))");
        }
        catch(ScriptException exception) {
            printString(exception.getMessage() + "\n");
        }
    }

}
compile () 방법은 "scriptEngine.eval (input)"입니다.JavaScript 해석기로 수정합니다.
if문, 함수 정의, 집행 등을 할 수 있다.
해석기 내에서 Java를 호출할 수도 있습니다.
JDK가 준비한 jjs 명령과 변함이 없어...


좋은 웹페이지 즐겨찾기