在C中实现Unix'dc'实用程序

时间:2012-10-22 03:39:20

标签: c dc

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

“实现一个与'dc'实用程序类似的程序,该实用程序以后缀表示法计算表达式,并且还支持使用变量和宏字符串的其他计算。请随意尝试使用现有实用程序并查阅其手册页。 该分配仅支持完整实用程序的一部分: - 所有数值都是整数,仅使用基数10

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

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

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

- 只需要以下命令(按照与手册相同的顺序列出)    p n f + - * /%^ c d r s s S L x> !> < !< =!= q#

分配与现有实用程序之间的一些主要差异: - 所有输入仅通过标准输入(但不一定是键盘)

- 寄存器堆栈最初不是空的,但填充了无限的零

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

- 输入令牌之间可能会出现额外的空格,以便易读    (空格不是命令或值或寄存器名称)“

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

2 个答案:

答案 0 :(得分:1)

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

  • 首先阅读标准输入并将其拆分为标记
  • 实现堆栈以存储操作数和结果
  • 实施一些操作,如+, - ,*,/
  • 让它全部正常工作
  • 然后逐个实现缺失的功能

答案 1 :(得分:0)

@Serge已经给出了如何开始的一个很好的概述,但是你似乎有点关于dc所做的事情,所以这里有一些指示。

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

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

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

你的任务远远超出了你的目标,但如果你实现了这么多,那么你的任务就会超过一半。