Сообщение об ошибке строки / номера сообщения в компиляторе с помощью Unicode - PullRequest
2 голосов
/ 17 марта 2012

Существует ли стандартный / распространенный способ выдачи сообщений об ошибках в стиле компилятора, которые указывают на строку и столбец, когда ввод имеет формат Unicode?

Например, очень распространенный формат сообщений об ошибках компилятора: "имя файла: номер строки: номер столбца: сообщение об ошибке", например ::

  • (из GCC): bad.c:1:10: syntax error, unexpected STRING
  • (из пользовательского инструмента) input.dat:45:3: expected String_Literal, found ';',

Это недвусмысленно, если вход является фиксированной 8-битной кодировкой, такой как ISO-8859-1. Но когда вводом является Unicode (UTF-8, UTF-16 и т. Д.), Что означает (или должен) «столбец» в этом случае? Какой байт? Какой код? Какая графема? Есть ли какой-нибудь инструмент, который устанавливает прецедент выбора одного или другого?

Ответы [ 3 ]

2 голосов
/ 19 марта 2012

A столбец должен ссылаться на не объединяющие кодовые точки Unicode.Обе части суррогатной пары (в UTF-16) должны иметь общий столбец., объединяющий диакритическую метку , должен разделять столбец с базовым символом, который он изменяет.Это может относиться и к другим кодовым точкам без пробелов.

1 голос
/ 25 апреля 2016

Стандарты кодирования GNU говорят, что для вычисления номера столбца должна использоваться ширина символа Unicode: http://www.gnu.org/prep/standards/standards.html#Errors.

Это должно быть совместимо с тем, как Emacs, который использует сообщения об ошибках, вычисляет номера столбцов: https://www.gnu.org/software/emacs/manual/html_node/elisp/Columns.html.

В GCC, похоже, есть ошибка: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49973.

0 голосов
/ 09 мая 2016

Не существует универсального ответа на вопрос, как интерпретируется значение «столбца» в сообщениях об ошибках компиляторов и аналогичных инструментов.Помимо того факта, что он основан на едином принципе, который, похоже, почти все инструменты и редакторы соблюдают, не было установлено ни одного стандарта для одного из различных решений, о которых вы упомянули, насколько я знаю.Насколько я вижу, используя мою систему Ubuntu 14.04, даже ванильный GCC и ванильный Emacs будут не соглашаться в обработке символов табуляции: GCC, кажется, считает табуляцию одним символом, в то время как Emacs интерпретирует табуляцию так, как много символов на самом деле имеет отступэто.

Далее следует мое личное предложение.Я хотел бы получить отзыв об этом.Для тех, кто пишет инструмент, который выводит такие сообщения об ошибках, я предлагаю подсчитывать байты, а не выполнять какую-либо специальную обработку вкладок, Unicode, суррогатных пар или комбинаций символов.Это наиболее полезно, потому что пользователи почти никогда не читают номер столбца.Вместо этого номер столбца почти всегда анализируется пользовательским интерфейсом.Это должно облегчить как инструмент, выводящий сообщение, так и приложение, отображающее сообщение.Конец моего предложения.

Прагматично, я бы вывел все, что более удобно на используемом вами языке программирования.

...