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