【发布时间】:2013-05-11 15:21:17
【问题描述】:
我想标记一个由整数、浮点数、运算符、函数、变量和括号组成的字符串。下面的例子应该可以阐明问题的本质:
当前状态:
String infix = 4*x+5.2024*(Log(x,y)^z)-300.12
想要的状态:
String tokBuf[0]=4
String tokBuf[1]=*
String tokBuf[2]=x
String tokBuf[3]=+
String tokBuf[4]=5.2024
String tokBuf[5]=*
String tokBuf[6]=(
String tokBuf[7]=Log
String tokBuf[8]=(
String tokBuf[9]=x
String tokBuf[10]=,
String tokBuf[11]=y
String tokBuf[12]=)
String tokBuf[13]=^
String tokBuf[14]=z
String tokBuf[15]=)
String tokBuf[16]=-
String tokBuf[17]=300.12
我们将不胜感激所有提示和解决方案。
【问题讨论】:
-
使用antlr 之类的东西来定义表达式的语法并为其生成解析器。
-
yacc 是另一个不错的工具。您很可能需要符号图而不是数组。
-
如果您正在构建表达式评估器,请尝试使用 GNU libmatheval 或 muParse :)
-
Scala 内置了对您可以使用的Combinator Parsers 的支持。 Programming in Scala 的第 33 章有一个使用它们解析数学表达式的示例。您可以直接从 Java 中使用 Scala 编译的类。
-
如果你和我一样不使用语言工具,我可以与你分享我的表达式解析器。