Университет
| Оберон |
Автора! | Тетрис
| Бегущая строка
| Загрузить
J( )B
English
version
Входной язык | Оберон-2 |
Выходной язык | Байт-код виртуальной машины языка Ява (JVM) (файлы классов .class) |
Среда исполнения компилятора J( )B | Windows-95, Windows NT (консольное приложение) |
Среда выполнения приложений, полученных с помощью компилятора J( )B | Любая платформа, на которой имеется реализация виртуальной машины языка Ява. |
Среда выполнения аплетов, полученных с помощью компилятора J( )B | Любой браузер Интернет с поддержкой Java. Appletviewer из состава Java Development Kit (JDK). |
|
|
Потребляемые ресурсы | Менее 1Мб памяти для компиляции; ~500К на диске |
Состав библиотек |
|
Университет | Наверх | Оберон | Автора! | Тетрис | Бегущая строка | Загрузить
Программа распространяется в виде саморазворачивающегося архива. Для установки необходимо:
С помощью любого редактора пишем текст и помещаем его в файл, например hello.o (название файла не обязано совпадать с именем модуля. Расширение может быть любым):
MODULE Hello; IMPORT javalang, Out; PROCEDURE main*( VAR args : ARRAY OF javalang.PString ); BEGIN Out.String("Hello, World!"); Out.Ln; END main; END.
Вообще-то в Обероне нет понятия главной программы или процедуры. Программа инициируется командой - вызовом любой экспортированной процедуры без параметров. Но, поскольку средой выполнения нашей программы будет виртуальная машина Ява, приходится соблюдать ее соглашения. Обязательно должна быть экспортированнная процедура main с параметром - массивом Ява-строк (точнее, указателей на строки). С main и начнется исполнение.
Запускаем J( )B для компиляции:
C:\JOB\EXAMPLES\HELLO>job hello.o JOB(tm) Oberon-2/JVM compiler. Strawberry version 0.75 (с) 1998 С.Свердлов ------ END. ^ !!! Строка 10; Ошибка: Ожидается Hello Нажмите <ENTER> |
Эх, по старой паскалевской привычке забыли повторить имя модуля после END перед точкой. Исправляем:
MODULE Hello;
IMPORT javalang, Out;
PROCEDURE main*( VAR args : ARRAY OF javalang.PString
);
BEGIN
Out.String("Hello, World!"); Out.Ln;
END main;
END Hello.
и компилируем снова:
C:\JOB\EXAMPLES\HELLO>job hello.o JOB(tm) Oberon-2/JVM compiler. Strawberry version 0.75 (с) 1998 С.Свердлов Модуль Hello Размер кода 17 Нажмите <ENTER> |
Теперь без ошибок. Сформирован файл класса Hello.class и файл интерфейса Hello.dfn. Обратите внимание, что первая буква в имени полученных файлов - заглавная, как и в имени модуля. Это нужно учитывать когда вызываем виртуальную машину для выполнения нашей программы:
C:\JOB\EXAMPLES\HELLO>java Hello Hello, World! C:\JOB\EXAMPLES\HELLO> |
Что и требовалось доказать. Вы заметили, что для компиляции и выполнения программы мы воспользовались командными файлами job.bat и java.bat.
Теперь вместе с самыми любознательными заглянем внутрь файлов, созданных компилятором.
Hello.dfn текстовый:
DEFINITION Hello;
IMPORT javalang;
PROCEDURE main( VAR args : ARRAY OF javalang.PString );
END Hello.
Файл класса - двоичный. Его можно дизассемблировать и тогда посмотреть:
Compiled from hello.o public class Hello extends java.lang.Object { public static void main(java.lang.String []); /* Stack=1, Locals=1, Args_size=1 */ public Hello(); /* Stack=1, Locals=1, Args_size=1 */ Method void main(java.lang.String []) 0 ldc #5 <String "Hello, World!\0"> 2 invokevirtual #8 <Method java.lang.String.toCharArray()[C> 5 invokestatic #10 <Method Out.String([C)V> 8 invokestatic #12 <Method Out.Ln()V> 11 return Method Hello() 0 aload_0 1 invokenonvirtual #15 <Method java.lang.Object.<init>()V> 4 return }
Это самый первый аплет, успешно откомпилированный с помощью J( )B. Он получился таким случайно. Просто нужно было, чтобы аплет как-то проявлял себя, рисовал что-нибудь. Вот я и написал:
MODULE BlackSquare; IMPORT app:=javaapplet, awt:=javaawt; TYPE App* = RECORD (app.Applet) END; PROCEDURE ( VAR a : App ) paint*( g : awt.PGraphics ); BEGIN g.fillRect(30,30,140,140); END paint; END BlackSquare.
Название вначале было другим (кажется, QQ). Когда же при запуске возник черный (по умолчанию) квадрат, то и вспомнился Казимир Малевич.
Итак, текст готов, компилируем:
C:\JOB\EXAMPLES\BSQUARE>job black.o JOB(tm) Oberon-2/JVM compiler. Strawberry version 0.75 (с) 1998 С.Свердлов Модуль BlackSquare Размер кода 31 Нажмите <ENTER> |
Для выполнения аплета можно использовать программу appletviewer из комплекта JDK. При запуске этой программы ей в качестве параметра нужно указать файл, содержащий HTML-тег <APPLET>. Но это не обязательно должен быть HTML-файл! Тег можно вписать прямо в файл с исходным текстом аплета на Обероне. Поэтому полный исходный текст "Черного Квадрата", входящий в комплект J( )B на самом деле начинается так:
(* First JOB compiled applet! "Black Square" Designed (1913) by Kasimir Malevich Programmed (2.03.98) by S.Sverdlov <APPLET code="BlackSquare_App" width=200 height=200> </APPLET> *) MODULE BlackSquare; ........
Запускаем аплет с помощью appletviewer'а (командный файл av.bat). В качестве параметра указываем файл с исходным текстом (black.o):
C:\JOB\EXAMPLES\BSQUARE>av black.o |
после этого на экране появляется вот такое окно:
С. Свердлов c3c@uni-vologda.ac.ru Июль 1998 г. |