0

我只是希望得到一些关于如何开始我的作业的提示。内容如下:

“实现一个行为类似于 'dc' 实用程序的程序,它以后缀表示法计算表达式,并且还支持使用变量和宏字符串的额外计算。随意尝试现有实用程序并查阅其手册页。作业将仅支持完整实用程序的一个子集: -- 所有数值都是整数,仅使用基数 10

-- 可以假定数字在 32 位有符号数字的范围内

-- 所有寄存器名称都是字母数字的(这些 dc 允许的子集)

-- 不需要命令行选项或参数

-- 只需要以下命令(与手册顺序相同) pnf + - * / % ^ cdrsl SL x > !> < !< = != q #

分配和现有实用程序之间的一些关键区别: -- 所有输入将仅通过标准输入(但不一定是键盘)

-- 寄存器栈最初不是空的,而是充满了无限的零

-- q 命令将退出程序,无论宏调用嵌套级别如何

-- 为了便于阅读,输入标记之间可能会出现额外的空格(空格不是命令、值或寄存器名称)"

老实说,我不知道从哪里开始......非常感谢任何帮助,谢谢大家。

4

2 回答 2

1

由于这是一项任务,您不知道从哪里开始,这里有一些提示:

  • 从读取标准输入开始并将其拆分为标记
  • 实现堆栈以存储操作数和结果
  • 实现一些操作,如 +,-,*,/
  • 让一切正常
  • 然后将缺少的功能一一实现
于 2012-10-22T03:47:18.940 回答
0

@Serge 已经给出了如何开始的一个很好的大纲,但是你似乎有点不知所措dc,所以这里有一些建议。

  • 作业说你应该试验真正的dc程序。这样做,如果你还没有这样做,你应该学到很多东西。(如果你还没有这样做,为什么不呢?)
  • 查看Wikipedia 页面dc的基本操作部分。
  • 阅读dc手册页。第一次你会发现它令人困惑,但再读一遍,用实际的程序试试你在那儿看到的东西。
  • 如果您对后缀符号的整个概念感到困惑,请参阅 Wikipedia page on Reverse Polish Notation,这是同一事物的另一个名称。

这应该让您了解以下非常简单的示例,并预测它们的作用:

  • 3 p
  • 3 4 * p
  • 3 4 5 + * p
  • 3 4 + 5 * p

你的任务远远超出了,但如果你得到了这么多的实施,你就完成了一半以上。

于 2012-10-22T16:41:12.907 回答