验证自定义语法

时间:2015-09-03 18:52:40

标签: java algorithm

在我的应用程序中,我有一个用户可以输入的自定义语法: 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无济于事,因为它无法处理嵌套括号。

我唯一的想法是:

  • 如果括号是平衡的,则进行评估;
  • 验证运算符的邻居(关系和计算),只能有行,数字,以及关系其他IF语句;
  • 最后验证IF语句的结构。(递归地);

所有这一切都将在一个Parser中完成,它将逐个遍历每个角色。

有更聪明的想法进行此验证吗?

1 个答案:

答案 0 :(得分:1)

如果使用ANTLR不是评论中建议的选项,我会使用堆栈并转换你的表达式from infix to postfix form

在上面链接的文章中,只观察到数学运算,但您可以在代码中扩展可能的操作,添加if和比较运算符。

之后,您可以使用堆栈评估您的表达式。