Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

2.2.2Лексика

Лексическая грамматика C# представлена в §2.3, §2.4 и §2.5. Терминальными символами лексической грамматики являются символы набора символов Юникода. Лексическая грамматика определяет, как символы объединяются для образования лексем (§2.4), пробелов (§2.3.3), комментариев (§2.3.2) и препроцессорных директив (§2.5).

Каждый исходный файл программы на C# должен соответствовать порождению ввода лексической грамматики (§2.3).

2.2.3Синтаксическая грамматика

Синтаксическая грамматика C# представлена в главах и приложениях, следующих за этой главой. Терминальными символами синтаксической грамматики являются лексемы, определенные лексической грамматикой. Синтаксическая грамматика определяет, как лексемы объединяются для образования программ на C#.

Каждый исходный файл в программе на C# должен соответствовать порождению единицы_компиляции синтаксической грамматики (§9.1).

2.3Лексический анализ

Порождение ввода определяет лексическую структуру исходного файла на C#. Каждый исходный файл в программе на C# должен соответствовать этому порождению лексической грамматики.

ввод: раздел_вводанеобязательно

раздел_ввода: часть_раздела_ввода раздел_ввода часть_раздела_ввода

часть_раздела_ввода: элементы_вводанеобязательно новая_строка директива_предварительной_обработки

элементы_ввода: элемент_ввода элементы_ввода элемент_ввода

элемент_ввода: пробел комментарий лексема

Лексическую структуру исходного файла на C# составляют пять основных элементов: признаки конца строки (§2.3.1), пробелы (§2.3.3), комментарии (§2.3.2), лексемы (§2.4) и препроцессорные директивы (§2.5). Из этих основных элементов только лексемы являются значимыми в синтаксической грамматике программы на C# (§2.2.3).

Лексическая обработка исходного файла на C# состоит из сведения файла к последовательности лексем, становящейся вводом для синтаксического анализа. Признаки конца строки, пробелы и комментарии могут служить для разделения лексем; препроцессорные директивы могут вызывать пропуск разделов исходного файла, однако в других отношениях эти лексические элементы не влияют на синтаксическую структуру программы на C#.

Если несколько порождений лексической грамматики соответствуют последовательности символов в исходном файле, лексическая обработка всегда создает самый длинный возможный лексический элемент. Например, последовательность символов // обрабатывается как начало однострочного комментария, так как этот лексический элемент длиннее, чем лексема /.

2.3.1Знаки завершения строки

Признаки конца строки разделяют на строки символы исходного файла на C#.

новая_строка: Символ возврата каретки (U+000D) Символ перевода строки (U+000A) Символ возврата каретки (U+000D), за которым следует знак перевода строки (U+000A) Символ следующей строки (U+0085) Символ разделителя строк (U+2028) Символ разделителя абзацев (U+2029)

Для совместимости со средствами редактирования исходного кода, добавляющими маркеры конца файла, и для возможности просмотра исходного файла как последовательности правильно завершенных строк, к каждому исходному файлу в программе на C# применяются следующие преобразования в таком порядке:

  • если последним символом исходного файла является символ CTRL-Z (U+001A), этот символ удаляется;

  • символ возврата каретки (U+000D) добавляется к концу исходного файла, если файл не пустой и если последним символом исходного файла не является символ возврата каретки (U+000D), символ перевода строки (U+000A), символ разделителя строк (U+2028) или символ разделителя абзацев (U+2029).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]