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 модуль.

Другие вопросы по тегам