Мошенник: трассировка стека грамматики - PullRequest
1 голос
/ 11 февраля 2020

При синтаксическом анализе файла с заданной c грамматикой и сбое анализа я получаю соответствующее сообщение об ошибке с указанием местоположения в исходном файле, нарушившем грамматику.

Что я хотел бы посмотреть в этих ситуациях будет список правил грамматики, которые были активны в данный момент, что-то вроде грамматического правила «трассировка стека» или правил, которые до сих пор соответствовали. Возможно ли это в Rascal?

Итак, для очень простого примера на языке EXP из документации, если бы я попытался разобрать "2 + foo", я мог бы получить что-то вроде

Exp
=> left Exp "+" Exp
=> left IntegerLiteral "+" Exp
=> left IntegerLiteral "+" <?>
No derivation of "foo" from rule 'Exp'

Другой способ сказать это - посмотреть на неполное дерево разбора, так как это было в тот момент, когда произошла ошибка разбора. Это имеет смысл?

1 Ответ

1 голос
/ 11 февраля 2020

Это имеет смысл, но я боюсь, что эта функция "неполного дерева разбора" есть в нашем списке TODO.

Обратите внимание, что при недетерминированном алгоритме синтаксического анализа c он, вероятно, будет возвращать набор текущих контекстов синтаксического анализа, так что «лес синтаксического анализа», а не трассировка одного стека. Тем не менее, я думаю, что это была бы очень полезная функция отладки.

Единственное предложение, которое я сейчас могу сделать, - это «дельта-отладка», поэтому удаляем половину ввода и проверяем, есть ли еще ошибка разбора, а затем другую половину, промыть / пенировать / повторить.

...