嗯,这是与语言无关的,我更喜欢用 C# 或 F# 来做,但这次我对“无论如何它会如何工作”这个问题更感兴趣。
我想要完成的是:
a)我想学习它——这次是关于我的自我,这是一个有趣的项目,我想向自己展示我非常擅长这些东西
b) 我对 EBNF 有一点了解(虽然我还不知道,运算符优先级在 EBNF 中是如何工作的 - Irony.NET 做得对,我检查了示例,但这对我来说有点不祥)
c) 我的解析器应该能够接受这个:例如 5 * (3 + (2 - 9 * (5 / 7)) + 9) 并给我正确的结果
d) 坦率地说,这似乎是我编写编译器甚至解释器时遇到的最大问题。我什至可以生成 64 位汇编代码(我可以手动编写汇编程序),但是公式解析器...
e) 另一个想法:即使是简单的计算机(比如我的旧 Sharp 1246S,只有大约 2kB 的 RAM)也可以做到这一点……它不会那么难,对吧?甚至非常非常古老的编程语言也有公式评估...... BASIC 是从 1964 年开始的,他们已经可以计算出我作为示例提出的那种公式
f)一些想法,一些灵感就足够了 - 我只是不知道如何做运算符优先级和括号 - 但是我知道它涉及 AST 并且很多人使用堆栈
所以你怎么看?