(Operand 1) (Operator) (Operator 2)
例子 :
Var_A AND Var_B
我想用解释器来解决这个问题,但是我对解释器也不是很熟悉,只是听说解释器可以在这种情况下使用。
请给我一个合理的解决方法。
你的解决方案是要写一个扫描器和解析器来建立一个树。
最好的解决方法是用它来做一些测试,使用 挠性 和 Yacc. 这些工具允许你进行扫描(Flex),并将扫描到的字符串转化为标记,解析器(Yacc)可以使用无语境语法(CFG)将其转化为编码方程的节点树。(这与编译器的工作方式非常相似)
如果你的输入是这样的,这允许你做以下工作。
var1 + var2
你扫描这个字符串中的标记,这些标记是: var1<variable> +<operator> var2<variable>
你把这些标记转换成一棵树的节点。
node #1
op: +
operatorType: enumvalue for +
| |
| |
| |
\/ \/
node #2 node# #3
name: var1 name: var2
type: var type: var
现在你可以遍历这棵树,并使用树中对象的成员来确定它是什么,以及如何使用它。
现在,棘手的部分是你要如何在受限的嵌入式设备中实现这一点。如果你的设备有足够的RAM来包含一个足够大的数据缓冲区,用于这个树结构,比它可以做到.我的解决方案是为我的树对象节点分配一个缓冲区,为变量的名称分配一个缓冲区,这将允许使用一个静态的内存量,而不会碎片化。