有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

解析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) 个答案

  1. # 1 楼答案

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

    • 模糊性(“M”是什么意思-米或兆)
    • 标点不一致
    • 缩略语
    • 符号(如“mu”表示微型)
    • 语义不清楚(例如,kg/m/s是否与kg/(m*s)相同)

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

    如果你是认真的,那么ANTLR(@Yaugen)是有用的,但是要注意,由于上面的不一致性,野外的单位不会遵循规则语法

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

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