-
20-08-2019 - |
题
我写一些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你在哪里可以找到的指针到的资源。其中一些是:
- 学习写一个编译器 (#1669人!)
- 学习资源的分析程序、口译员和编译器
- 什么是良好的资源汇编的?
- 参考文献需要实现一个解释在C/C++
- ...
等等。
旁白:我从来没有能将它们连接在一起,或者甚至试图建立一个全面的清单。
我想你不能使用YACC /法(或等),所以你必须解析“手动”:结果 遍历字符串,并将其划分为它的部分。什么部分是取决于你的语法(语法)。这样,你可以找到函数名和参数。这样做的难度取决于你的语法的复杂性。
也许你应该阅读一些关于词法分析。
不隶属于 StackOverflow