gpt4 book ai didi

java - 如何确定一个字符串是否是 Java 中有效的 Java 表达式?

转载 作者:行者123 更新时间:2023-11-29 08:41:46 24 4
gpt4 key购买 nike

我想确定给定的字符串是否是有效的 Java 表达式(根据 Java 的语法)。

例如:

object.apply()
x == 2
(x != null) && x.alive

都是Java中有效的表达式。但是:

object.apply();
==
for(int i=1; i < n; ++i) i.print();

在 Java 中不是有效的表达式(有些是有效的语句,但这不是我要找的)。

有没有简单的解决办法? (比如 isJavaIdentifierStartisJavaIdentifierPart 当一个人想要确定一个字符串是否是一个有效的标识符时)

最佳答案

您需要按照 Java 语言标准规范以与 Java 编译器解析表达式相同的方式解析表达式。

从头开始构建自己的解析器不是一个好主意;在过去的十年中,Java 语法变得复杂了。您应该找到一个现有的 Java 解析器并重用它,这样您就不必重新做错误的轮子。

JavaCC 和 ANTLR 都以 Java 形式提供,并为它们定义了 Java 语法。我建议您将他们视为主要候选人。一个复杂的问题是这些解析器解析完整的程序,而不是表达式。您可以通过修改语法使表达式成为目标规则来解决这个问题,然后修复可能产生的任何语法冲突;我不会期望太多。

一个更复杂的问题:仅仅因为语法有效,并不意味着表达式有效。我很确定 java 的语法将接受:

  "abc" *  17.2

作为有效的语法

如果你想验证表达式的有效性,你必须类型检查它,使用表达式将被评估的上下文来提供背景类型信息。否则人们会认为这是有效的:

 s * d  // expression that parses correctly, but isn't valid

当背景知识是这样的时候:

 Object s;
char d;

进行完整的类型检查要困难得多。实际上,您需要一个完整的 Java 编译器前端,它可以解析并进行类型检查。解析器生成器(例如 ANTLR、JavaCC)对此提供零帮助。

因此,您要么使用 Java 编译器,要么搜索 Java 前端;有几个。 [完全披露:我的公司提供了一个可以做到这一点]。

关于java - 如何确定一个字符串是否是 Java 中有效的 Java 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39663218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com