我写一些excel状C++控制台应用程序的功课。我的程序应该能够接受的公式对它的细胞,例如它应该评估这样的事情:

Sum(tablename\fieldname[recordnumber], fieldname[recordnumber], ...)

tablename\fieldname[recordnumber] points to a cell in another table, 
fieldname[recordnumber] points to a cell in current table

Sin(fieldname[recordnumber])

anotherfieldname[recordnumber]

"10" // (simply a number)

类似的东西。功能的总和,大犯罪,因为,Tan、婴儿床、穆尔Div,战俘,日志(10),Ln,国防部

这是可悲的,我知道,但这是我的功课:'(

因此,没有人知道一种伎俩,以评估这样的事情?

有帮助吗?

解决方案

好的,很好的家庭作业问题的方式。

这真的取决于如何重你想要这个。你可以创建一个充分表达的分析器(这是有趣,但也耗费时间).

为了做到这一点,你需要描述全面的语法和写一个前端(看一看法和yacc或flexx和野牛。

但是当我看到你的问题你可以限制自己的三个子情况:

  • 一个简单的价值
  • 查询(可能有其他表)
  • 一个功能输入查找

我觉得有点OO的设计可以帮助你在这里。

我不知道如果你要处理的实时更新和圆形的依赖性检查。他们可能会非常棘手。

其他提示

有关的分析,我想看看递归下降解析。然后有一个映射的所有可能的函数名的函数指针的表:

struct FunctionTableEntry {
    string name;
    double (*f)(double);
};

您应该写一个解析器。解析器应该采取的表达即,每个线和应确定该命令和构造解析树。这是第一个阶段。在第二阶段中可以通过替代的命令的每一个元素的数据评估树

先前的反应必须打它的头: 你需要分析单元内容,并且解释它们.

计算器已经有一大堆的问题上的建筑编译器和interperters你在哪里可以找到的指针到的资源。其中一些是:

等等。

旁白:我从来没有能将它们连接在一起,或者甚至试图建立一个全面的清单。

我想你不能使用YACC /法(或等),所以你必须解析“手动”:结果 遍历字符串,并将其划分为它的部分。什么部分是取决于你的语法(语法)。这样,你可以找到函数名和参数。这样做的难度取决于你的语法的复杂性。

也许你应该阅读一些关于词法分析

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top