Вопрос

Как компилятор C / C ++ манипулирует управляющим символом ["\"] в исходном коде?Как написана грамматика компилятора для обработки этого символа?Что делает компилятор после обнаружения этого символа?

Это было полезно?

Решение

Большинство компиляторов делятся на части: внешний интерфейс компилятора называется лексическим анализатором или сканер. Эта часть компилятора читает фактические символы и создает токены. Он имеет конечный автомат, который решает, увидев escape-символ, является ли он подлинным (например, когда он появляется внутри строки), или он изменяет следующий символ. Токен выводится соответственно как escape-символ или какой-либо другой токен (например, табуляция или новая строка) для следующей части компилятора ( парсер ). Конечный автомат может сгруппировать несколько символов в токен.

Другие советы

Интересная заметка на эту тему: включен. Доверие Доверие [PDF ссылка] .

В статье описан один способ, которым компилятор мог бы точно решить эту проблему, показано, как компилятор c-написано в c не имеет явного перевода кодов в значения ASCII; и как загрузить новый escape-код в компилятор так, чтобы понимание значения ASCII для нового кода также было неявным.

Обычно он экранирует следующий символ:

  • В строковом литерале или символьном литерале это означает экранирование следующего символа. \a означает "оповещение" (мигание терминала, звуковой сигнал или что-то еще)., \n означает "перевод строки", \xNUM означает, например, шестнадцатеричное число.
  • Если он отображается как последний видимый символ перед переводом строки, будь то в строке или нет (и даже в комментарии длиной в строку!), он действует как продолжение строки:Следующий символ перевода строки игнорируется, а следующая строка объединяется с текущей строкой.

escape-символ со следующим символом (например, \ n ) является отдельным символом для компилятора C - сканер представляет его синтаксическому анализатору как символьный токен, поэтому нет необходимости в специальных синтаксических правилах для синтаксического анализатора для экранирующий символ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top