9

我希望能够解析表示物理量的表达式,例如

g/l
m/s^2
m/s/kg
m/(s*kg)
kg*m*s
°F/(lb*s^2)

等等。以最简单的方式。是否可以使用Pyparsing 之类的东西(如果 Java 存在这样的东西),还是应该使用更复杂的工具,如 Java CUP?

编辑:要回答 MrD 的问题,目标是在数量之间进行转换,例如将 g 转换为 kg(这很简单......),或者可能是 °F/(kg*s^2) 转换为 K/(lb* h^2) 假设 h 是四小时,lb 是磅

4

1 回答 1

6

这比看起来更难。(我在这里做了很多工作)。主要问题是没有标准(我曾与 NIST 合作过单位,尽管他们最终创建了一种标记语言,但很少有人使用它)。所以它实际上是一种自然语言处理形式,必须处理:

  • 歧义(“M”是什么意思 - 米或兆)
  • 标点不一致
  • 缩写
  • 符号(例如“mu”代表微)
  • 语义不明确(例如 kg/m/s 是否与 kg/(m*s) 相同?

如果您只是创建一个玩具系统,那么您应该为该系统创建一个 BNF,并确保所有示例都遵循它。这将使用常见的标点符号(“/”、“ ”、“(”、“)”、“^”)。字符字段可以是可变长度(“m”、“kg”、“lb”)。这些字符串上的代数 ("kg" -> 1000 "g" 有问题,因为 kg 是一个基本单位。

如果您认真做,那么 ANTLR (@Yaugen) 很有用,但请注意,由于上述不一致,野外的单位不会遵循常规语法。

如果你真的很认真(即准备投入一个坚实的月份),我很想知道。:-)

我目前的方法(这超出了您的问题范围)是自动从文献中收集大量示例并创建一些启发式方法。

于 2013-05-15T12:26:55.897 回答