Я установил систему гибких/бизон, которая может запускаться и анализировать через yyparse и может использоваться внутри системы repl-type. Когда пользователь входит в определенное состояние (скажем: определение метода), и была выполнена ошибка systax, я ищу способ справиться с этим таким образом, что зубр может действовать так, как пользователь никогда не входил в линии вообще.Сохранение и восстановление состояния анализатора вручную
Например:
1> class foo { <enter>
2> a = 1; <enter>
3> asfasdfa <enter>
В этом случае анализатор должен вернуться в состояние, которое было до прочтения последней строки. Прямо сейчас он вызывает синтаксическую ошибку и перематывает полный стек.
Я знаю, что зубры yyparse() функция имеет несколько локальных значений стека состояний (yyvsp, yyssp и yylsp), который используется для отслеживания состояния, но не кажется, нет способа изменить это за пределами стандартной функциональности, как YYERROR и т.д.
Мой вопрос: возможно ли это сделать в удаленном режиме для этих состояний сохранения/восстановления в бизоне, а если нет, то какой лучший способ справиться с такими ошибками.
Я не 100% уверен, что если правильный способ реализации Repl путь я предложил. Например, я могу только обнаруживать состояния с начала пользовательской строки до ошибки. Но возможно, что другие правила на линии действительно преуспели (например: «i = 1; b =;») – JayTaph