Как назначить переменные в калькуляторе командной строки с помощью КПК - PullRequest
0 голосов
/ 21 апреля 2019

Я делаю калькулятор, используя Java, и я использую его с помощью 1 Pushdown Automaton и 1 Deterministic Finite Automaton.Вот пример того, как это должно выполняться.Он запускает одну строку за раз.

> 3 5 +
8
> 2 8 *
16
> x = 3
3
> x 2 /
1,5

У меня отлично работает DFA, и он используется для разбора символов и их классификации как Число, Переменная, Оператор, Равные (назначение).Затем он отправляется на КПК, где выполняется фактический расчет.Это не большая часть КПК, за исключением того, что он использует стек для хранения значений, которые готовятся к использованию.Он также имеет хэш-карту, которую он использовал для хранения переменных и их значений.

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

> x = 4 5 *
20

Вместо этого мой код выводит 4.

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

Stack  
Hashmap  

while token != End of Line: 
    get next token

    if token == variable:
        if hashmap.contains(variable):
            stack.push(hashmap.get(variable))
        else:
            hashmap.put(variable, 0.0) # default value
    if token == number: 
        stack.push(number)
    if token == {+ - * /}:
        n1=stack.pop
        n2=stack.pop
        stack.push(n1 {+ - * /} n2)
    if token == Equals:
        # I am having trouble with this. 

У меня проблемы с частью "Равно".Мне интересно, есть ли эффективный способ сделать это.Я заставил его работать, но он запутан, поскольку вам нужно сохранить строку токена, а затем дождаться обработки всей строки.Кажется, что был бы более простой способ сделать это.Я нахожу это сложно, так как число не в стеке, когда он читает в переменной, а затем равно.Вы должны удержать имя переменной и подождать, пока не закончится обработка.

...