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

Pao*_*olo 9 java parsing

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

g/l
m/s^2
m/s/kg
m/(s*kg)
kg*m*s
°F/(lb*s^2)
Run Code Online (Sandbox Code Playgroud)

等等.以最简单的方式.是否可以使用像Pyparsing这样的东西(如果Java存在这样的东西),或者我应该使用更复杂的工具,如Java CUP?

编辑:回答MrD的问题,目标是在数量之间进行转换,例如将g转换为kg(这个很简单......),或者可能是°F /(kg*s ^ 2)到K /(lb*h ^ 2)假设h为4小时,lb为磅

pet*_*ust 6

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

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

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

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

如果你真的很认真(即准备投入坚实的一个月),我有兴趣知道.:-)

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