假設我們的語法中有兩個這樣的規則: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是輸入對象。我的問題是,如何檢查該對象是否是 的子類型?StringValuecode_gen_value functionPrimitiveValue在 XTexnd 中,可以使用instanceof關鍵字并且實際上if obj instanceof PrimitiveValue可以在code_gen_value. 我想知道我們如何在 TextX 中表達這一點。有沒有辦法引用為我們的語法生成的元模型中的類型?
1 回答

天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
要根據 textX 語法指定的繼承檢查對象是否是某種類型的實例,可以使用textx_isinstance。在當前版本的 textX (2.2.0) 中,可以從textx.scoping.tools
.?從 2.3.0 開始,它將在模塊中可用textx
。
添加回答
舉報
0/150
提交
取消