解析Java的简单物理量测量单元解析器
我希望能够解析表示物理量的表达式,比如
g/l
m/s^2
m/s/kg
m/(s*kg)
kg*m*s
°F/(lb*s^2)
等等。以尽可能简单的方式。是否可以使用类似Pyparsing的东西(如果Java有这样的东西),或者我应该使用更复杂的工具,比如JavaCup
编辑:对于Answare MrD的问题,目标是在数量之间进行转换,例如,将g转换为kg(这是一个简单的…),或者可能是°F/(kg*s^2)到K/(lb*h^2),假设h是四小时,lb是磅
# 1 楼答案
这比看起来要难。(我在这里做了相当多的工作)。主要的问题是没有标准(我曾与NIST就单元进行过合作,尽管他们最终创建了一种标记语言,但很少有人使用它)。因此,它实际上是一种自然语言处理形式,必须处理:
如果您只是创建一个玩具系统,那么您应该为该系统创建一个BNF,并确保所有示例都符合它。这将使用常用标点(“/”、“”、“(“、”、“^”)。字符字段可以是可变长度(“m”、“kg”、“lb”)。这些弦上的代数(“kg”->;1000“g”有问题,因为kg是一个基本单位
如果你是认真的,那么ANTLR(@Yaugen)是有用的,但是要注意,由于上面的不一致性,野外的单位不会遵循规则语法
如果你真的很认真(即准备投入一个稳定的月份),我很想知道。:-)
我目前的方法(不在你的问题范围内)是自动从文献中收集大量的例子,并创建一些启发式方法