Как структурировать грамматику Xtext, чтобы помочь восстановлению парсера - PullRequest
0 голосов
/ 26 декабря 2018

У меня была проблема с моей грамматикой 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.

Тогда у меня вопрос: есть ли проблема, которую я пропускаю в моей текущей грамматике, и как я могу структурировать эту грамматику, чтобы обеспечить лучшую способность восстановления синтаксического анализатора?

...