问题描述
假设语法中有两个这样的规则:
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
模块中可用。