用于Java的简单物理量测量单元解析器

时间:2013-05-15 12:14:14

标签: java parsing

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

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是4小时而lb是磅

1 个答案:

答案 0 :(得分:6)

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

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

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

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

如果你真的很认真(即准备安装一个月),我有兴趣知道。 : - )

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