TextX检索对象的父类型

问题描述

假设语法中有两个这样的规则:

Value: AttributeReference | PrimitiveValue;
PrimitiveValue: BoolValue | StringValue | IntValue;

我想为这种语言实现一个代码生成器。基本上,对于每个规则,我都定义了一个执行该功能函数。例如,code_gen_value函数获取一个对象,如果对象的类型为AttributeReference,则它将调用code_gen_attribute_reference (passing the object),或者如果类型为PrimitiveValue,则其调用{ {1}}。问题是我正在使用以下内容检索对象的类型:

code_gen_primitive_value (passing the object)

但是,当我在示例中运行它时,对于输入对象,value_type = cname(value) where: def cname(o): return o.__class__.__name__ the value_type中是StringValue。我的问题是,如何检查对象是code_gen_value function的子类型?

在XTexnd中,可以使用PrimitiveValue关键字,实际上instanceof可以在if obj instanceof PrimitiveValue中使用。我想知道我们如何在textx中表达这一点。

有没有一种方法可以引用为我们的语法生成的元模型中的类型?

谢谢!

解决方法

要根据textX语法指定的继承性检查对象是否为某种类型的实例,可以使用textx_isinstance。在当前版本的textX(2.2.0)中,可以从textx.scoping.tools导入它。从2.3.0版开始,它将在textx模块中可用。