我希望能够解析表示物理量的表达式,例如
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是磅
答案 0 :(得分:6)
这比它看起来更难。 (我在这里做了相当多的工作)。主要的问题是没有标准(我已经在NIST上使用了单位,尽管他们最终创建了一种很少有人使用它的标记语言)。所以它实际上是一种自然语言处理形式,必须处理:
如果您只是创建一个玩具系统,那么您应该为系统创建一个BNF并确保所有示例都遵循它。这将使用常见的标点符号(“/”,“”,“(”,“)”,“^”)。字符字段可以是可变长度(“m”,“kg”,“lb”)。这些弦上的代数(“kg” - > 1000 “g”有问题,因为kg是一个基本单位。
如果你认真对待它,那么ANTLR(@Yaugen)很有用,但请注意,由于上述不一致,野外单位不会遵循常规语法。
如果你真的很认真(即准备安装一个月),我有兴趣知道。 : - )
我目前的方法(超出了你的问题范围)是自动从文献中收集大量的例子并创建一些启发式方法。