我目前正在研究一种作为 C# 超集的语言。但是,我很难让词法分析器识别打开和关闭泛型类型括号,特别是在类似表达式中使用的打开类型表达式typeof()
,例如typeof(List<List<>>)
.
如果我有三个规则:
OpenTriangleBracket
: '<'
;
CloseTriangleBracket
: '>'
;
Symbol
: ('>' | '<')+
;
正确识别以下类型的第 (1) 部分 ( <
)。但是,第 (2) 部分被识别为符号 ( <>>
)。通常,这将是可取的行为。如果它是一种类型,我希望它被识别为它的三个独立部分(<
, >
, >
)。
List<List<>>
v ^v^
1 2
我怎么能让它认出它呢?当我自己编写解析器部分时,我可以完全控制它的实现方式。