例如,如果我有I = V / R作为输入,我希望V = I * R和R = V / I作为输出。我知道这可能是一个广泛的问题,但是我应该如何开始呢?构建后缀符号/解释器时,应该使用堆栈/树吗?
您需要能够用符号表示公式,并应用代数规则来操纵这些公式。
最简单的方法是定义将接受您的公式的语法。最好明确定义为BNF。这样,您可以为此类公式构建解析器;完成适当的解析器即可构建代表该公式的抽象语法树。您可以使用lex和yacc或ANTLR之类的工具。这是我关于如何使用自定义递归下降解析器的建议:是否有8位嵌入式系统上可用的flex / bison替代方案?。
一旦有了对公式进行编码的树,就可以实现根据代数定律修改树的过程,例如:
X=Y/Z => X*Z = Y if Z ~= 0
现在,您可以通过编写程序代码来实现这样的规则,该程序代码遍历树,找到与模式的匹配项,然后粉碎树以产生结果。这是非常简单的编译器技术。如果您很热心,则可以很快地编写半打代数定律。您会发现执行此操作的代码非常复杂,在树上爬升,下降,匹配节点以及粉碎节点之间的链接以产生结果的过程。
另一种方法是使用程序转换系统,该系统可以让您
我公司的DMS软件再造工具包可以做到这一点。您可以在“变换规则定义的代数”中看到一个完整的代数和微积分示例(无法在此处复制)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句