Assume that we have two rules like this in our grammar:
Value: AttributeReference | PrimitiveValue;
PrimitiveValue: BoolValue | StringValue | IntValue;
I want to implement a code generator for this language. Basically, for each rule, I defined a function that does that. For example, code_gen_value function gets an object and if the type of the object is AttributeReference then it will call code_gen_attribute_reference (passing the object), or if the type is PrimitiveValue, then it calls code_gen_primitive_value (passing the object). The issue is that I am using the following to retrieve the type of the object:
value_type = cname(value) where:
def cname(o):
return o.__class__.__name__
However, when I run it on an example, the value_type is StringValue in code_gen_value function for the input object. My question is, how can I check for the object to be a subtype of the PrimitiveValue?
In XTexnd, one could use instanceof keyword and actually if obj instanceof PrimitiveValue would work in the code_gen_value. I am wondering how we can express that in TextX.
Is there a way to refer to the types in the metamodel generated for our grammar?
Thanks!