如何构造Xtext语法以帮助解析器恢复

时间:2018-12-26 20:08:55

标签: parsing grammar xtext

我的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关键字,尽管具有关键字中心语法,但TypeBTypeC条目也都无法解析。 (如果删除命名空间概念,或者使类型条目排序,仍然会发生此问题。)我的期望是,TypeA条目为空,但是在到达TypeB关键字时,解析器将会恢复并将其添加到AST。

然后我的问题是,我当前的语法中是否缺少一个问题?如何构造此语法以提供最佳的解析器恢复能力?

0 个答案:

没有答案