对于您的特殊问题,您应该查找插入符号 ^ 在Java regular expressions 中是如何转义的,它应该是\^。
注意:
解释 Java 源代码中字符串文字中的反斜杠
根据 Java™ 语言规范的要求,作为 Unicode
转义(第 3.3 节)或其他字符转义(第 3.10.6 节)
因此有必要在字符串文字中加双反斜杠
表示正则表达式以保护它们不被解释
Java 字节码编译器。
所以你最终得到了 "\\^" 作为 Java String。
但是,通常您会为算术表达式编写解析器和解释器。
这个主题被称为编译器构造,依赖于有限自动机和形式语言的知识。
可以在 Bjarne Stroustrup 的“The C++ Programming Language, Fourth Edition”的第 10.2 章“A Desk Calculator”中找到一个很好的示例。 (是的,我知道你想用 Java 编写代码,请继续阅读)。
它具有这种形式语法:
program:
end //end is end-of-input
expr_list end
expr_list:
expression print //pr intis newline or semicolon
expression print expr_list
expression:
expression + term
expression − term
term
term:
term / primary
term ∗ primary
primary
primary:
number //number is a floating-point literal
name //name is an identifier
name = expression
−primary
( expression )
Stroustrup 向您展示了如何以类似的结构对其进行编码:
double expr(bool get) //add and subtract
{
double left = term(get);
for(;;) { //‘‘forever’’
switch(ts.current().kind) {
case Kind::plus:
left += term(true);
break;
case Kind::minus:
left −= term(true);
break;
default:
return left;
}
}
}
这段代码体现了这部分语法:
expression:
expression + term
expression − term
term
这种技术称为递归下降,因为语法中的递归将在相应代码中作为递归函数调用来实现。 Java 开发人员也应该可以理解精选的相关 C++ 代码。
一旦您对语法以及如何实现它们有点熟悉,
参见例如Unambiguous grammar for exponentiation operation
如何以满足通常运算符优先级规则的方式处理求幂。