Supposons que nous ayons deux règles comme celle-ci dans notre grammaire :
Value: AttributeReference | PrimitiveValue;
PrimitiveValue: BoolValue | StringValue | IntValue;
Je veux mettre en place un générateur de code pour ce langage. En gros, pour chaque règle, j'ai défini une fonction qui fait ça. Par exemple, code_gen_value
récupère un objet et si le type de l'objet est AttributeReference
alors il appellera code_gen_attribute_reference (passing the object)
ou si le type est PrimitiveValue
puis il appelle code_gen_primitive_value (passing the object)
. Le problème est que j'utilise la méthode suivante pour récupérer le type de l'objet :
value_type = cname(value) where:
def cname(o):
return o.__class__.__name__
Cependant, lorsque je l'exécute sur un exemple, the value_type
es StringValue
en code_gen_value function
pour l'objet d'entrée. Ma question est la suivante : comment puis-je vérifier que l'objet est un sous-type de l'objet d'entrée ? PrimitiveValue
?
Dans XTexnd, on pourrait utiliser instanceof
mot-clé et en fait if obj instanceof PrimitiveValue
travaillerait dans le code_gen_value
. Je me demande comment on peut exprimer cela en TextX.
Existe-t-il un moyen de faire référence aux types dans le métamodèle généré pour notre grammaire ?
Merci !