Печать ожидаемого токена типа 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);

Конечно, вышесказанное может потребовать небольшой подстройки, основанной именно на том, что вы делаете, но, по крайней мере, это отправная точка.

Другие вопросы по тегам