如何使用PDA在命令行计算器中分配变量

时间:2019-04-21 16:29:44

标签: calculator pseudocode pushdown-automaton

我正在使用Java制作计算器,并且正在使用1个下推自动机和1个确定性有限自动机来实现它。 这是应该如何执行的示例。它一次只运行一行。

  

> 3 5 +
  8
  > 2 8 *
  16
  > x = 3
  3
  > x 2 /
  1.5

我拥有的DFA工作正常,它用于解析字符并将其分类为数字,变量,运算符,等于(赋值)。然后将其发送到PDA,在此完成实际计算。它不是PDA的一部分,只是它使用堆栈来存储准备使用的值。它还具有用于存储变量及其值的哈希图。

上面示例中的所有内容,我都可以使用我的代码开始工作。但是,我无法执行以下操作。

  

> 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. 

我在“等于”部分遇到麻烦。我想知道是否有一种有效的方法。我确实使它起作用,但是它很麻烦,因为您必须存储令牌的字符串,然后等待直到处理完整个行。似乎会有一种更简单的方法。我发现它很棘手,因为当它先读变量然后等于时,它不在堆栈上。您必须保留变量名,然后等待处理结束。

0 个答案:

没有答案