TextX получает родительские типы объектов
Предположим, что в нашей грамматике есть два таких правила:
Value: AttributeReference | PrimitiveValue;
PrimitiveValue: BoolValue | StringValue | IntValue;
Я хочу реализовать генератор кода для этого языка. По сути, для каждого правила я определил функцию, которая это делает. Например,
code_gen_value
функция получает объект, и если тип объекта
AttributeReference
тогда он позвонит
code_gen_attribute_reference (passing the object)
, или если тип
PrimitiveValue
, затем он вызывает
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
для входного объекта. Мой вопрос: как я могу проверить, является ли объект подтипом
PrimitiveValue
?
В XTexnd можно было использовать
instanceof
ключевое слово и на самом деле
if obj instanceof PrimitiveValue
будет работать в
code_gen_value
. Мне интересно, как это выразить в TextX.
Есть ли способ ссылаться на типы в метамодели, созданной для нашей грамматики?
Благодаря!
1 ответ
Чтобы проверить, является ли объект экземпляром какого-либо типа в соответствии с наследованием, указанным грамматикой textX, вы можете использовать textx_isinstance. В текущей версии textX (2.2.0) его можно импортировать из
textx.scoping.tools
. Начиная с 2.3.0 он будет доступен в
textx
модуль.