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

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为磅

最佳答案

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

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

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

    如果您认真地进行操作,则ANTLR(@Yaugen)很有用,但是请注意,由于上述不一致,野外单元将不会遵循常规语法。

    如果您真的很认真(即准备好一个月的工作),那么我很想知道。 :-)

    我当前的方法(不在您的问题范围内)是自动从文献中收集大量示例,并创建多种启发式方法。

    关于java - 适用于Java的简单物理量测量单位解析器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16564740/

    10-12 01:46