Java에서 REPL, JavaScript를 사용하여 컴퓨터 해석기를 사용합니다.
16903 단어 JavaScriptJavaREPL
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 명령과 변함이 없어...
Reference
이 문제에 관하여(Java에서 REPL, JavaScript를 사용하여 컴퓨터 해석기를 사용합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cloudsnow/items/ddf3d89c217f0ab8a6aa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)