在我的应用程序中,我有一个用户可以输入的自定义语法: IF(ROW1> ROW2; 4; ROW1 + ROW2) 或者更复杂的事情: IF(ROW1> ROW2; IF(ROW1> ROW2; 4; ROW1 / IF(ROW1> ROW2; 4; ROW1-ROW2)); ROW1 + ROW2)
我认为很明显第一个例子的输出是什么: 如果ROW1大于ROW2,则结果为4,否则为ROW1 + ROW2。
如果我不能使用任何外部库,那么在java中验证这种自定义语法的最佳方法是什么。 从我读过的内容,RegEx无济于事,因为它无法处理嵌套括号。
我唯一的想法是:
所有这一切都将在一个Parser中完成,它将逐个遍历每个角色。
有更聪明的想法进行此验证吗?
答案 0 :(得分:1)
如果使用ANTLR不是评论中建议的选项,我会使用堆栈并转换你的表达式from infix to postfix form。
在上面链接的文章中,只观察到数学运算,但您可以在代码中扩展可能的操作,添加if
和比较运算符。
之后,您可以使用堆栈评估您的表达式。