При синтаксическом анализе файла с заданной c грамматикой и сбое анализа я получаю соответствующее сообщение об ошибке с указанием местоположения в исходном файле, нарушившем грамматику.
Что я хотел бы посмотреть в этих ситуациях будет список правил грамматики, которые были активны в данный момент, что-то вроде грамматического правила «трассировка стека» или правил, которые до сих пор соответствовали. Возможно ли это в Rascal?
Итак, для очень простого примера на языке EXP из документации, если бы я попытался разобрать "2 + foo", я мог бы получить что-то вроде
Exp
=> left Exp "+" Exp
=> left IntegerLiteral "+" Exp
=> left IntegerLiteral "+" <?>
No derivation of "foo" from rule 'Exp'
Другой способ сказать это - посмотреть на неполное дерево разбора, так как это было в тот момент, когда произошла ошибка разбора. Это имеет смысл?