Разработка компиляторов

       

Генерация кода виртуальной машины


class LowLevelSample { public static void Run() { int i; i = 0; try { Start: if (i == 10) throw new Exception(); Console.WriteLine (i); i = i + 1; goto Start; } catch (Exception) { Console.WriteLine ("Finished"); } } }

В качестве примера генерации кода для виртуальной машины попробуем породить код на MSIL для следующей программы на C#:

class LowLevelSample { public static void Run() { int i; i = 0; try { Start: if (i == 10) throw new Exception(); Console.WriteLine (i); i = i + 1; goto Start; } catch (Exception) { Console.WriteLine ("Finished"); } } }

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



Содержание раздела