我想动态执行算术运算(只有加法和减法),我有一个包含下面的操作的json “操作”:“a + b”此键值是我的操作,这是动态意味着它也会像“operation”:“a + b + d-c + e” 但其中一个确定它只会带有加法和减法
我的值在 Hashmap 中,如
HashMap<String,String> map = new HashMap<String,String>();
map.put("a", "10");
map.put("b", "10");
map.put("c", "5");
map.put("d", "5");
map.put("e", "15");
[
{
"id": 15,
"lable": "C__a_plus_b",
"field": "b",
"operator": "None",
"inputType": "Number",
"ids": "13",
"operation": "a+b",
"operations": "true"
},
{
"id": 19,
"lable": "F__c_plus_d",
"field": "d",
"operator": "None",
"inputType": "Number",
"ids": "17",
"operation": "C__a_plus_b+d",
"operations": "true"
},
{
"id": 21,
"lable": "d_c_f",
"field": "F__c_plus_d",
"operator": "None",
"inputType": "Number",
"ids": "19",
"operation": "d+C__a_plus_b-F__c_plus_d",
"operations": "true"
}
]
答案 0 :(得分:0)
您要实现的内容称为 interpreter 。 Interpreter是一个模拟计算机的程序。您必须考虑计算机的第一件事,无论是在硬件还是软件中实现,都是指令集。阅读一些关于此的文献,以了解存在哪种指令集。
然后,查看您提供的输入代码示例,我不得不承认它是一种非常糟糕的指令集格式。在良好的指令集中,每条指令都有不同的操作数和操作码字段。在这里我们可以看到只提供了一个操作数作为指令数据结构的字段(&#34;字段&#34;:&#34; b&#34;在第一条指令中)因此是无用的,字段&#34;操作员&#34;永远都说&#34;无&#34;并且也是无用的,并且必须从字段&#34; operation&#34;中检索所有信息,其值是文本。因此,您还需要实现一个 Parser ,在给定类似"d+C__a_plus_b-F__c_plus_d"
的输入字符串的情况下,它会返回如下数据结构:
{"operator":"-",
"leftOperand":
{"operator:"+",
"leftOperand":"d",
"rightOperand":"C__a_plus_b"
},
"rightOperand":"F__c_plus_d"
}
我使用了JSON / Javasript表示,但它可以用任何编程语言表示,例如Java的。
如何在其他地方描述如何实现解析器的主题,我将在此处解释。
实际上,解析器不是生成数据结构,而是可以立即计算并返回输入表达式的值 - 我只强调它仍然是解析器而不是解释器。