You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TextX语法的有序选择表达式中使用链接规则引用

问题根因

你遇到的语法报错是因为textX不支持直接在赋值表达式的选择组中混用交叉引用语法[规则名]和其他匹配项,你写的Field: type=([DataType] | ID) name=ID;不符合textX的语法规范。

修复方案

将类型匹配拆分为独立的子规则,分别处理自定义DataType引用和简单类型匹配即可,修改后的完整语法如下:

Library: 
    data_types *= DataType
;

DataType: name=ID "{" 
    fields*=Field
"}" ;

Field: type=Type name=ID;

Type: DataTypeRef | SimpleType;

// 单独处理自定义数据类型的交叉引用
DataTypeRef: [DataType];

// 简单类型匹配,可根据需要调整正则支持更多内置类型
SimpleType: /int(8|16|32|64)|float(32|64)|bool|string/;

如果你不需要限制简单类型的命名范围,希望支持任意字符串作为简单类型名,可将SimpleType规则替换为:

SimpleType: ID;

后续如果需要区分字段类型是自定义DataType还是简单类型,只需在模型校验阶段判断type对象的类型即可:属于DataType类实例就是自定义类型,属于字符串类型就是简单类型。

效果验证

你提供的模型示例完全适配上述语法:

  • vec属于自定义DataType,matrix的字段类型引用vec时会匹配DataTypeRef分支,自动完成引用关联
  • int64会匹配SimpleType分支,作为内置简单类型处理

修改后重新执行textx generate dummy.tx --target dot即可正常生成dot文件,不会再报语法错误。


内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:36:03