我的Xtext语法存在问题,因为解析器在遇到拼写错误的关键字后无法恢复。这是一个最小的语法,它再现了问题并类似于我的实际语法结构:
Model:
'NS' name=ID
(
a+=TypeA |
b+=TypeB |
c+=TypeC
)*
'EndNS'
;
TypeA:
'TypeA' name=ID ';'
;
TypeB:
'TypeB' name=ID
'EndTypeB'
;
TypeC:
'TypeC' name=ID
'EndTypeC'
;
因此,如果我使用以下文本创建文件:
NS myNamespace
TypeA myA;
TypeB myB
EndTypeB
TypeC myC
EndTypeC
EndNS
然后,我错误拼写了TypeA
关键字,尽管具有关键字中心语法,但TypeB
和TypeC
条目也都无法解析。 (如果删除命名空间概念,或者使类型条目排序,仍然会发生此问题。)我的期望是,TypeA
条目为空,但是在到达TypeB
关键字时,解析器将会恢复并将其添加到AST。
然后我的问题是,我当前的语法中是否缺少一个问题?如何构造此语法以提供最佳的解析器恢复能力?