Печать ожидаемого токена типа XXX при возникновении ошибки синтаксического анализа
Я хотел бы иметь возможность напечатать это сообщение об ошибке, используя Ragel => Ошибка синтаксического анализа, найденная в строке позиции:col, вместо этого ожидается Integer.
Это возможно с Ragel?
С наилучшими пожеланиями
1 ответ
Я пока не слишком углубился в обработку ошибок в Ragel, но я ожидаю, что если вы используете операторы встраивания действий с ошибками, как указано в разделе 3.2.3 Руководства по Ragel 6.9, это переопределит сообщение по умолчанию.
Вы можете получить номер строки, увеличив счетчик на каждой новой строке, и получить столбец, взяв текущую позицию и вычтя позицию предыдущей новой строки, примерно так:
newline = '\n' %{ ++lineCounter; linePosition = p; }
action ErrorHandler {
column = p - linePosition + 1;
// Print error message here using lineCounter and column
}
main := (allsortsofstuff | newline)* <>err(ErrorHandler);
Конечно, вышесказанное может потребовать небольшой подстройки, основанной именно на том, что вы делаете, но, по крайней мере, это отправная точка.