го об'єкта CodeCompiler викликається метод compile (), який повертає об'єкт класу CodeAttribute, що описує атрибут Code, що містить байт-код методу. При цьому відбуваються наступні процеси. У конструкторі класу CodeCompiler з рядків, що містять команди, виділяються імена міток, які зберігаються в об'єкті класу LabelTable. Потім обробляється список рядків, описують захищені блоки. У методі CodeCompiler.compile () виконуються наступні операції. Спочатку за допомогою об'єкта класу CommandCompiler для кожної команди створюється об'єкт відповідного класу. При цьому одночасно для команд, при яких є мітка, в об'єкті LabelTable зберігається інформація про зміщення мітки щодо початку методу. Як в описах захищених блоків, так і в об'єктах, відповідних командам переходу, на момент закінчення цього кроку замість зсувів переходу, містяться порядкові номери команд, при яких розташовані відповідні мітки. Заміна їх на дійсні зміщення виробляється на останньому кроці за допомогою методів LabelTable.changePC () і Command.changeOffset ().
В
Висновок.
Технологія Java орієнтована на використання однієї мови програмування. Система типів даних та інші особливості мови Java тісно пов'язані з функціонуванням JVM і форматом файлу класу. Однак, існує відкрита специфікація, що дозволяють створювати як власні реалізації JVM, так і альтернативні засоби розробки. З її використанням мною розроблений мову JASM, що представляє собою мову асемблера для платформи Java, який дозволяє створювати файли класів, що використовують значну частину можливостей JVM, і реалізований його компілятор.
В
Використана література.
1. Гріс, Д. Конструювання компіляторів для цифрових обчислювальних машин. М., В«МирВ», 1975. p> 2. Еккель, Б. Філософія JAVA. СПб. 3-е изд.: Пітер, 2003. p> 3. Tim Lindholm, Frank Yellin. The Java Virtual Machine Specification Second Edition. Sun Microsystems Inc. 1999. br/>