我想使用几种lexer模式,它们共享很多规则。
"分享"规则也应该生成相同的令牌。
到目前为止,我必须这样做:
Id : [a-z]+;
// 50 other shared rules...
mode otherMode;
Id_otherMode : [a-z]+ {setType(Id);};
有没有更好的方法来实现这一目标?
答案 0 :(得分:1)
Id_otherMode : [a-z]+ {setType(Id);};
可以写成
Id_otherMode :Id -> type(Id);
还有更多"好看" Id可以是片段
但我想你需要听到的是:不,你不能在不同模式下重新标记相同的令牌。也许重新组织模式......