Могу ли я отделить двойники с помощью парсера?Джава - PullRequest
0 голосов
/ 24 сентября 2018

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

Мне было интересно, будут ли при создании парсера данные, которые вводит пользователь (например, 7/5), уже разделены или мне потребуется каким-то образом отделить данные.

Мне также было интересно, как оператор повлияет на синтаксический анализатор и есть ли способ получить это отдельно.Я пытался использовать input.next ();получить операнд, но я думаю, что из-за того, что я использую парсер, он может не работать.

Вот мой код:

String rawUserInt;
String method;
double answer;
Scanner input = new Scanner(System.in);

        System.out.println("Please input the equation you would like to solve");

        double userInt1 = Double.parseDouble(rawUserInt);
        method = input.next();
        double userInt2 = Double.parseDouble(rawUserInt);

1 Ответ

0 голосов
/ 24 сентября 2018

Обычно.обработка формальных языков (например, выражений) делится на лексический анализ и анализ.Лексический анализатор будет разбивать входные данные на токены, а также игнорировать нерелевантные символы, такие как пробелы.Он также определяет тип токена.В вашем примере это приведет к double(7), operator(/), double(5).

. Следующий шаг выполняется парсером, который собирает токены в абстрактное синтаксическое дерево (AST) в соответствии с грамматикой для формального языка.В этом примере это даст

      "/"
     /   \
    7     5

. Затем легко оценить выражение, используя древовидную структуру.

В простых случаях, таких как ваш, вам могут не понадобиться все слои в качестве явных компонентов.Например, можно вычислить выражение непосредственно после лексического анализа без предварительного построения AST.

...