Как я могу создать интерпретатор, который читает набор команд и присваивает переменные? - PullRequest
0 голосов
/ 06 декабря 2018

Я пишу программу-интерпретатор на Java, которая принимает строку, представляющую набор команд для назначения переменных, и возвращает переменную, отображаемую в последней строке.Так что

A = 2
B = 4
C = A + B
C

при подаче в код должно возвращать 6, что является значением C. Пока у меня есть следующий код:

public class Interpreter2 {

public static int Scanner() {
    int returnStatement = 0;
    //Input instruction set in the quotation marks below
    String input = "A = 2\n B = 8\n C = A + B\n C";
    String[] lines = input.split("\n");
    for (String i : lines) {
        i = i.replaceAll("\\s", "");
        if (i.contains("=")) {
            String[] sides = i.split("=");
            String leftHand = sides[0];
            String rightHand = sides[1];
            int a = Integer.parseInt(leftHand);

            if (rightHand.contains("+")) {
                String[] add = rightHand.split("+");
                String num1 = add[0];
                String num2 = add[1];
                int num3 = Integer.parseInt(num1);
                int num4 = Integer.parseInt(num2);
                int sum = num3 + num4;
                a = sum;

            }else {
                int b = Integer.parseInt(rightHand);
                a += b;
                return a;
            }
        }else {
            returnStatement = Integer.parseInt(i);
            return returnStatement;
        }

    }
    return returnStatement;

}


public static void main(String[] args) {
        System.out.println(Scanner());
    }
}

В настоящее время, однако, это возвращает

Exception in thread "main" java.lang.NumberFormatException: For input string: "A"

Это означает, что если в наборе команд есть буква, она не будет работать.Если int a просто назначено как 0, код возвращает 2.Кто-нибудь знает, как я могу это исправить?

1 Ответ

0 голосов
/ 06 декабря 2018

Здесь

int a = Integer.parseInt (leftHand);

у вас есть значение "A", поэтому вы не сможете его проанализироватьв целое число.

...