更新ANTLR默认TypeScript语法时的条件类型解析问题
解决ANTLR TypeScript语法解析条件类型时数组括号匹配错误
问题根源
报错提示在[处缺少?,说明解析器匹配到any后,错误进入条件类型分支,期望?而非数组括号。核心原因是条件类型规则优先级高于数组类型,导致解析器未完成数组类型匹配就提前尝试匹配条件类型语法结构。
修复方案
1. 调整类型规则优先级
按照TypeScript官方语法优先级,将条件类型设为最低优先级,确保数组、联合/交叉类型等先被匹配。重构type_相关规则如下:
type_ : unionType ; unionType : intersectionType ( '|' intersectionType )* ; intersectionType : conditionalType ( '&' conditionalType )* ; conditionalType : primaryType 'extends' type_ '?' type_ ':' type_ | primaryType // 无法匹配条件类型时回退到基础类型 ;
2. 确保数组类型规则正确
检查primaryType中的数组类型定义,保证能递归匹配多层数组结构:
primaryType : predefinedPrimType | arrayPrimType | tupleType | genericType // 其他基础类型规则(如字面量、函数类型等)... ; arrayPrimType : primaryType '[' ']' ;
3. 排查Lexer规则
确认Lexer中[和]被正确定义为独立令牌,无其他规则干扰其识别:
LBRACK : '['; RBRACK : ']';
验证
修改后重新生成解析器,测试目标代码type Boxed<T> = T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>;,此时any[]会被正确解析为数组类型,条件类型的语法结构也能正常识别。
内容的提问来源于stack exchange,提问作者bczup
相关产品推荐
相关产品推荐

