【问题标题】:Simple custom expression parser [closed]简单的自定义表达式解析器 [关闭]
【发布时间】:2016-10-27 14:23:17
【问题描述】:

我查看了网上可用的解析器,但并不真正了解什么最适合我的自定义表达式。 (Antlr 对我的需求来说似乎有点重量级,但这只是第一印象)

我有以下表达式需要验证它的格式是否正确:

IF(var1>var2;15;IF(var3

表达式转换为: 如果条件为真,则结果为 15,否则为其他表达式。

我只需要验证它的格式是否正确(没有额外的括号,总是有第一个和第二个分支,正确使用了 IF 关键字,嵌套的 IF 等等。)

【问题讨论】:

  • 那么问题是什么?
  • 您可以尝试使用 Spring 的 SpEL 解析器(而不是 if 您应该使用三元运算符)docs.spring.io/spring/docs/current/spring-framework-reference/…。它就像 ExpressionParser parser = new SpelExpressionParser();表达式 exp = parser.parseExpression("1+2*(2+7*(1+5))"); System.out.println(exp.getValue()); 支持变量和其他特性。

标签: java parsing antlr javacc parser-generator


【解决方案1】:

首先,写一个语法。否则将不清楚什么是合法的或不合法的。 (您所写的内容并不精确;例如,您是否允许在关系之后有一个数字?作为 IF 的 else 部分的变量?)语法使这一点变得精确。

其次,如果您的语法只接受表达式,您可以使用手写的递归下降语法轻松编码:see my SO answer on how to do this。这样的解析器将执行您想要的所有健全性检查。

如果您尝试解析非常复杂的语言,那么 JavaCC 或 ANTLR 是更好的选择。

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2015-02-24
    • 2010-09-18
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多