我在textx中有以下规则:
IsLessThanOrEqualToRule:
'is <= ' reference_value_input = FLOAT | INT
;
该规则允许DSL用户以以下方式指定参考数字值为浮点或整数:IS<= 1000 or is <= 100.025.
无论如何,取决于我指定值类型的顺序浮动和int,输入的数字值正在转换。这是一种意外的行为。 示例:
.....reference_value_input = FLOAT | INT
,则整数输入值表示为浮点。因此,1000表示为1000.0......reference_value_input = INT | FLOAT
,则浮点输入值表示为整数。因此,1000.112表示为1000.阅读用户输入时,如何维护数字类型? 感谢您的所有投入。 Anjan
Textx使用PEG,该PEG尊重定义规则的顺序。因此,如果您订购规则为
FLOAT | INT
,则将首先尝试。这是问题,因为FLOAT
规则匹配FLOAT
,因此永远不会尝试以下的INT
。
tolusition IT使用不匹配的INT
。有一个更通用的规则称为STRICTFLOAT
,它可以正是您需要的。所以,只需写
INT
。
文档中对base textx类型的分类提供了更详细的说明。