我的DSL语法看起来像(只显示必要的部分)
assemblerProgram: // standard way of defining model
content += CommandLine+
;
CommandLine:
ControlInstructions | Pointaddress ;
Pointaddress:
name = POINTINGADD
terminal POINTINGADD:('_')('a'..'z'|'A'..'Z')? ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
其中POINTINGADD是一个终端规则,它说该名称应以“_”开头。
现在我想对此终端规则实施快速修复。可能吗?我应该走哪条路?
提前谢谢。答案 0 :(得分:0)
如果你想实现一个"语义" quickfix(即,对模型而不是文本进行操作的那个),可能更好的是有一个更宽松的语法,它接受没有前导下划线的名称,然后创建一个抱怨这个并分配一个的验证特定的错误代码,最终可用于触发quickfix。
或者,在确实处理语法错误时,文档建议使用ISyntaxErrorMessageProvider,但我还没有使用过这种方法。