Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 69 стр.

UptoLike

Комментарии в IL-программах записываются так же, как в языке C#:
Если в строке программы встречается «//», то остаток строки
считается комментарием.
Текст, начинающийся с «/*», оканчивающийся на «*/» и не со-
держащий «*/», считается комментарием.
3.5.2. Синтаксис
IL-программа представляет собой последовательность объявлений.
В этом разделе мы рассмотрим синтаксис объявлений следующих элемен-
тов IL-программы:
сборка;
модуль;
тип;
поле;
метод.
3.5.2.1. Сборки и модули
Каждый IL-файл для ассемблера ILASM представляет собой отдель-
ный модуль сборки. Мы не будем касаться вопросов компиляции сборки,
состоящей из нескольких модулей, поэтому приведем образец заголовка
IL-файла для одномодульной сборки:
.assembly MyProgram { }
.module MyProgram.exe
.assembly extern mscorlib { }
В заголовке используются три директивы: директива «.assembly» поз-
воляет задать имя нашей сборки. Директива «.module» определяет имя мо-
дуля и совпадает с именем исполняемого файла, в который будет записа-
на откомпилированная сборка. Директива «.assembly extern» указывает,
что мы будем импортировать сборку mscorlib, в которой находится основ-
ная часть библиотеки классов .NET. В фигурных скобках после имени
сборки могут перечисляться свойства сборки, но в простейшем случае их
можно оставить пустыми.
3.5.2.2. Типы
Объявление типа осуществляется с помощью директивы «.class» и со-
стоит из четырех частей:
1. последовательность атрибутов типа;
2. имя типа;
3. базовый тип;
4. список реализуемых интерфейсов.
Common Intermediate Language
125
метаданные. В этом разделе мы проведем краткий обзор формата, в кото-
ром записываются эти файлы, и рассмотрим несколько примеров про-
грамм. Будем называть IL-форматом формат файлов, поддерживаемый ас-
семблером ILASM, а программы, записанные в IL-формате, – IL-про-
граммами.
3.5.1. Основные элементы лексики
Программы в IL-формате состоят из следующих лексических эле-
ментов:
идентификаторы;
метки;
константы;
зарезервированные слова;
специальные знаки;
комментарии.
Идентификаторы и метки чаще всего представляют последователь-
ности символов, начинающиеся с латинской буквы (или с символов «_»,
«$», «@» и «?»), за которой следуют латинские буквы, цифры или символы
«_», «$», «@» и «?». Кроме того, для идентификаторов и меток существует
особая форма записи в апострофах: она позволяет включать в идентифи-
каторы любые символы Unicode. Например:
Label_1 $Name 'Идентификатор'
Несколько идентификаторов могут быть объединены в один иденти-
фикатор с помощью точек. Например:
System.Console.WriteLine
Целочисленные константы записываются либо в десятичной системе
счисления, либо в шестнадцатеричной (тогда перед ними ставится пре-
фикс «0x»). Например:
128 -10 0xFF10B000
В вещественных константах точка используется для разделения целой
и дробной части, а символы «e» и «E» служат для указания экспоненциаль-
ной части. Кроме того, поддерживается особая форма записи float32 (це-
лая_константа) и float64 (целая_константа), позволяющая представить
целое число в виде числа с плавающей точкой. Например:
5.5 -1.05e10 float32(128) float64(50)
Строковые константы записываются в двойных кавычках и могут
содержать Escape-последовательности «\t», «\n» и «\xxx», где восьмерич-
ное число xxx задает код символа от 0 до 255. Для переноса строковой
константы на другую строку программы используется символ «\». Кроме
того, для строковых констант поддерживается операция конкатенации
«+». Например:
“Alpha Beta Gamma” “Hello, World\n” “Concat”+”enation”
124
CIL и системное программирование в Microsoft .NET
124                        CIL и системное программирование в Microsoft .NET   Common Intermediate Language                                        125


метаданные. В этом разделе мы проведем краткий обзор формата, в кото-               Комментарии в IL-программах записываются так же, как в языке C#:
ром записываются эти файлы, и рассмотрим несколько примеров про-                      • Если в строке программы встречается «//», то остаток строки
грамм. Будем называть IL-форматом формат файлов, поддерживаемый ас-                     считается комментарием.
семблером ILASM, а программы, записанные в IL-формате, – IL-про-                      • Текст, начинающийся с «/*», оканчивающийся на «*/» и не со-
граммами.                                                                               держащий «*/», считается комментарием.
3.5.1. Основные элементы лексики                                               3.5.2. Синтаксис
      Программы в IL-формате состоят из следующих лексических эле-                  IL-программа представляет собой последовательность объявлений.
ментов:                                                                        В этом разделе мы рассмотрим синтаксис объявлений следующих элемен-
         • идентификаторы;                                                     тов IL-программы:
         • метки;                                                                     • сборка;
         • константы;                                                                 • модуль;
         • зарезервированные слова;                                                   • тип;
         • специальные знаки;                                                         • поле;
         • комментарии.                                                               • метод.
      Идентификаторы и метки чаще всего представляют последователь-
ности символов, начинающиеся с латинской буквы (или с символов «_»,            3.5.2.1. Сборки и модули
«$», «@» и «?»), за которой следуют латинские буквы, цифры или символы              Каждый IL-файл для ассемблера ILASM представляет собой отдель-
«_», «$», «@» и «?». Кроме того, для идентификаторов и меток существует        ный модуль сборки. Мы не будем касаться вопросов компиляции сборки,
особая форма записи в апострофах: она позволяет включать в идентифи-           состоящей из нескольких модулей, поэтому приведем образец заголовка
каторы любые символы Unicode. Например:                                        IL-файла для одномодульной сборки:
      Label_1 $Name 'Идентификатор'                                                 .assembly MyProgram { }
      Несколько идентификаторов могут быть объединены в один иденти-                .module MyProgram.exe
фикатор с помощью точек. Например:                                                  .assembly extern mscorlib { }
      System.Console.WriteLine                                                      В заголовке используются три директивы: директива «.assembly» поз-
      Целочисленные константы записываются либо в десятичной системе           воляет задать имя нашей сборки. Директива «.module» определяет имя мо-
счисления, либо в шестнадцатеричной (тогда перед ними ставится пре-            дуля и совпадает с именем исполняемого файла, в который будет записа-
фикс «0x»). Например:                                                          на откомпилированная сборка. Директива «.assembly extern» указывает,
      128 -10 0xFF10B000                                                       что мы будем импортировать сборку mscorlib, в которой находится основ-
      В вещественных константах точка используется для разделения целой        ная часть библиотеки классов .NET. В фигурных скобках после имени
и дробной части, а символы «e» и «E» служат для указания экспоненциаль-        сборки могут перечисляться свойства сборки, но в простейшем случае их
ной части. Кроме того, поддерживается особая форма записи float32 (це-         можно оставить пустыми.
лая_константа) и float64 (целая_константа), позволяющая представить
целое число в виде числа с плавающей точкой. Например:                         3.5.2.2. Типы
      5.5 -1.05e10 float32(128) float64(50)                                         Объявление типа осуществляется с помощью директивы «.class» и со-
      Строковые константы записываются в двойных кавычках и могут              стоит из четырех частей:
содержать Escape-последовательности «\t», «\n» и «\xxx», где восьмерич-                 1. последовательность атрибутов типа;
ное число xxx задает код символа от 0 до 255. Для переноса строковой                    2. имя типа;
константы на другую строку программы используется символ «\». Кроме                     3. базовый тип;
того, для строковых констант поддерживается операция конкатенации                       4. список реализуемых интерфейсов.
«+». Например:
      “Alpha Beta Gamma” “Hello, World\n” “Concat”+”enation”