ПредишенСледващото

Ръководство за да добавите поддръжка за езиците за програмиране, дадени тук, се отнася до ejudge версията на системата, по-висока от 2.3.8.

Език процесор (PL) - е съставител или преводач на език за програмиране.

От ejudge система поддържа няколко версии на една и съща език за програмиране (например, Free Pascal, Borland Kylix, и така нататък. Г.), това не е правилно да се говори за подкрепата на езици за програмиране, както и подкрепа за езикови процесори.

Добавянето на подкрепа за нова система Яп ejudge се извършва в няколко стъпки.

  1. Определяне на параметрите на добавени PLS
  2. Писане тунинг скрипт (lang-version.in)
  3. Писане съставя сценарий (lang.in)
  4. Преконфигуриране PL поддържана от програма ejudge конфигурирате компилатори
  5. Рестартирането на ejudge система

Определяне на параметрите на PL

Параметри PL необходими, за да го подкрепят в ejudge система, са изброени по-долу:

флаг подкрепа безопасен режим

кратко име на PL (обикновено определя автоматично)

трите имена на PL

стандартен файл наставка с изходния текст за ПЗ

стандартен суфикс на изпълнимия файл за ПЗ

аргумент, посочен при конфигуриране Яп програми ejudge-настройка или ejudge конфигурирате компилатори

Основният параметър на PL - архитектура (дъга). Тя се отнася до системната среда под архитектура, която управлява програмата се тества. ejudge система поддържа следните архитектури:

  • Linux - статично свързан изпълнима програма
  • Linux споделен - динамично свързан изпълнима програма (включително скриптове)
  • Java - Java байткод
  • MSIL - .NET байткод
  • дос - DOS приложения

Linux архитектура е архитектурата по подразбиране. Ако PL има Linux архитектура, опцията за арка за това PL трябва или да отсъства или да бъде нулева стойност.

Вторият параметър е PL - този флаг, ако програмата за изпитване работи правилно за ПЗ, когато се показва по сигурен режим. Ако PL има Linux архитектура, Java или DOS, програмата тест за това PL, като подкрепя всички ограничения за сигурност обикновено работят правилно в безопасен режим. Ако PL е MSIL архитектура, а след това безопасен режим не се поддържа за него. Програми като PLS могат да бъдат тествани, но няма ограничения за сигурност, наложени на програмата няма да бъде. Ако PL има Linux-споделена архитектура, безопасен режим за този PL се поддържа, обаче, тествана програма в безопасен режим може да не работи правилно или не работи изобщо.

Във всеки случай, ако има съмнения за ефективността на програмата в безопасен режим, той е длъжен да провери прости програми като работи със стандартните потоци, както и работа с файлове.

Ако добавена PL не поддържа сигурна режим на параметъра да несигурен PL е 1. Ако се поддържа на защитен режим, този параметър трябва да липсва или празната стойност.

От PL подкрепена ejudge система като стандарт във версия 2.3.8, са несигурни PL GCJ (GNU Java), gfortran (GNU Fortran), MCS (Mono C #), mzscheme (MzScheme), PHP (PHP), vbnc (Mono Visual Basic ), yabasic (yaBasic).

Параметър SHORT_NAME - това е най-краткото име на PL. Съкратено наименование се използва в таблицата на потребители парцели и няколко други места. Кратко название PL - е, всъщност, идентификатор PL. Тя трябва да бъде една-единствена дума, а не по-дълъг от 32 знака, състояща се от главни и малки букви, цифри и символи +, -, _. Като правило, за кратко име на ПЗ се определя автоматично от сценария на име и съставяне на настройки. Например, ако се съберат на скрипта (или по-точно, шаблон компилация скрипт) има име foo.in. стандартните часове ще бъдат равни на името на на Mt. PL. Моля, имайте предвид, че на Unix системи, имената на файловете са малки и главни букви. параметър SHORT_NAME Value също и малки букви.

Параметър long_name - се разгръща (пълен) име на ПЗ. Например, краткото име на PL може да бъде Foo. и пълно - "GNU Foo Interpreter". Моля, имайте предвид, че пълното име на ПЗ не включва номера на версията.

Параметър src_sfx - стандартен суфикс на изходните файлове за ПЗ. Например, ако един PL GNU Foo изходни файлове се наричат ​​file.foo. суфикса източник е низ .foo (имайте предвид, че "точка" е суфикс).

Exe_sfx параметър определя стандартното наставка за изпълними файлове за ПЗ. Обикновено наставката на изпълними зависи от PL архитектура. Така че, за архитектури Linux и Linux-общ стандарт наставка изпълними файлове не се изисква, за да exe_sfx може да се пропусне или да има нулева стойност. Архитектури дос и MSIL стандартни наставка изпълними - .exe. и архитектура Java - .jar.

арка параметри. несигурен. SHORT_NAME. long_name. src_sfx. exe_sfx правилното PL описват свойства, обаче за АД, не се различават от инсталация за монтаж ejudge система.

Параметри Arg версия, и описват свойствата на инсталацията на PL в дадена система, така че техните стойности могат да варират от инсталация за монтаж.

Параметър версия определя коя версия на ПЗ. Ако този параметър е празна, се счита, че е подходящо PL се открива в системата. Ето защо, този параметър трябва да се попълни. PL версия определено скрипт за конфигурация обикновено се започне с PL специални опции и обработка на получената продукция.

Параметърът арг съдържа конфигурация аргумент PL предава ejudge-настройка конфигурационни скриптове или ejudge конфигурирате компилатори. Например, ако една програма да започне ejudge конфигурирате компилатори с опция --with-Foo = / ЮЕсАр / местни / хамбар / Foo, параметър / ЮЕсАр / местни / хамбар / Foo конфигурация скрипт ще бъде приет PL Foo-версия. Освен това, този параметър може да се зададе и интерактивно в ejudge-настройка на програми и ejudge конфигурирате компилатори. Обикновено, този параметър определя пътя на PL във файловата система, и е полезно в случаите, когато PL се намира в нестандартни места.

Файлова структура за подкрепа на Яп

Да предположим, че системата ejudge е бил инсталиран в директорията / изберат / ejudge, и директорията за данните, посочени в / Начало / ejudge. След това, в директорията / Начало / ejudge / компилация публикувал конфигурационни файлове и скриптове за съставяне на програма на сървъра.

compile.cfg

/home/ejudge/compile/conf/compile.cfg файл - главен конфигурационен файл съставяне съставяне сървър. Този файл съдържа информацията, необходима за съставяне на всички поддържани в инсталацията на междинен език. Например, за на Mt. описанието раздел PL PL може да изглежда по следния начин:

Тук ID - числов идентификатор е PL, която е уникална за всички PLS в тази инсталация. Допълнителна информация за Яп Яп взета от параметрите, описани в предишния раздел.

/home/ejudge/compile/conf/compile.cfg файл се записва автоматично всеки път, когато ти се обадя по програмата ejudge конфигурирате компилатори. Всички промени, направени ръчно с него загубили при всеки започнат ejudge конфигурирате компилатори.

Версия флаг PL и съответната система PL е открита, не се съдържат в конфигурационния файл и да чете директно от PL конфигурационния файл при всяка започне съставя програма.

lang_ids.cfg

Id, PL, подкрепен като стандарт, се съхраняват в досие $ / libexec / ejudge / Ланг / lang_ids.cfg. Ако информацията за новата PL в този файл липсва, то автоматично се присвоява идентификатор, като все още не е използван в compile.cfg файл първия. Потребителят може да копирате файла в директория lang_ids.cfg $ / съставяне / скриптове и произволни промени направи. Промяна на файла $ / libexec / ejudge / Ланг / lang_ids.cfg не се препоръчва, тъй като ще бъдат презаписани при ъпдейт на системата.

каталог lang.d

/home/ejudge/compile/conf/lang.d директория съдържа файлове на конфигурационните настройки, всички поддържани ejudge PL система. За конфигурационен файл, наречен PL Foo foo.cfg. Съдържанието му може да бъде по този начин:

Файлът е писано в синтаксиса на / хамбар / од. Този файл се използва като програми ejudge система, като компилация, супер-служи и директно скрипт дрън и Foo-версия. Той се генерира от скрипт Foo-версия, лансирана в специален режим.

В допълнение към PLS параметри, описани по-горе, файлът може да съдържа дефиниции на произволни променливи, необходими за Foo скриптове или Foo-версия. В горния пример FOOPATH променлива.

указател в

В каталога са в конфигурационните скриптове на заготовки и събират PL. В директорията / изберат / ejudge / libexec / ejudge / Ланг / в заготовката са скриптове за PLS поддържат в ejudge стандартна система за доставка. В директорията / Начало / ejudge / съставяне / скриптове / в потребителски скриптове са празни. Последният директория приоритет, скриптът е, ако работата е открит в директорията / Начало / ejudge / съставяне / скриптове / в, системната директория няма да бъдат проверени. Ето защо, ако се наложи да промените предоставения сценария, първо трябва да се копират в тази директория и след това го променят. Промяна на файлове директно в директорията / изберат / ejudge / libexec / ejudge / Ланг / в него не се препоръчва, тъй като тези файлове са презаписани при надграждане ejudge.

директория скриптове

скриптове директория / Начало / ejudge / съставяне / скриптове се обработват детайла готови да използват всички програми ejudge система. скриптове детайл обработени и копирани от директорията / изберат / ejudge / libexec / ejudge / Ланг / и / начало / ejudge / събират / скриптове / в тази програма директория ejudge конфигурирате компилатори.

скриптове заготовки

За PL Foo заготовка трябва да бъдат написани скриптове и foo.in foo-version.in. Заготовки скриптове трябва да се поставят в директорията / Начало / ejudge / съставяне / скриптове / инч скриптове детайл по смисъла на съответните работни Makefile.in файлове, config.h.in в autotools система GNU. Т.е. заготовки скриптове заместват променливи на Var @ формуляра @ на техните стойности.

Поддържани замествания, изброени в Таблица

съответно. изберете опция

конфигурирате скрипта

конфигурирате скрипта трябва да поддържа множество режими на писта. Режими се дефинират с опции за командния ред. Всички режими на работа се разглеждат от примера на корекцията на скрипт Foo-версия

-R - режим конфигурация

В режим конфигурация подкрепа Яп трябва да бъдат тествани в дадена инсталация. Към стандартния изход да бъдат отпечатани на съдържанието на новия конфигурационен файл PL foo.cfg. Освен това, ако сте задали опцията -v, на STDERR допълнителна информация за процеса на конфигурация трябва да бъде отпечатан. След успешното завършване на кода за конфигурация трябва да бъде равна на 0, и при неизпълнение - 1. ARG параметър минава път, който потребителят имат --with-Foo = ARG опции конфигурирани в групов режим или път като го въвели при конфигуриране на интерактивно ,

По този начин, ако Foo PL се поддържа в инсталацията, скрипта за стартиране може да бъде, както следва:

Последният ред (проверка.) Се показва на стандартната грешка.

Foo Ако PL не се поддържа в инсталацията, стартиране на скрипт може да бъде, както следва:

Последният ред (проверка.) Се показва на стандартната грешка.

-л - списък на режим

В режим на приемане Яп списъци на стандартния изход трябва да бъдат отпечатани Онлайн информация за PL. Информацията за низ е отпечатан независимо от това дали ПЗ се поддържа в инсталацията. завършване код винаги трябва да е равна на 0.

Така че, за Foo скрипта за стартиране на PL би могло да бъде, както следва:

производство на режим, използван от програмата ejudge конфигурирате компилатори, когато го започнете с --list вариант PL списък.

-р - отпечатате начин да Яп

В режим на печат, по пътя към листовката на стандартния изход трябва да бъде отпечатано по пътя към ПЗ. Пусков код трябва да бъде 0. Ако PL не се поддържа в тази инсталация, оттеглянето трябва да е празен, а кодът на завършване, равен на 1. В този случай, стандартната грешка може да се покаже съобщение за диагностика.

По този начин, ако Foo PL се поддържа в инсталацията, скрипта за стартиране може да бъде, както следва:

режим на печат, използван от програмата супер-служи в някои специални случаи.

-е - отпечатате името и пълния текст

В режим на печат, пълното име на PL на стандартния изход трябва да бъде отпечатано пълното име и версия на номера на Яп Яп. Ако PL не се поддържа в тази система (в инсталацията), стандартната изходен поток ще бъде празна, а кодът на връщане е равно на 1. В стандартна грешка в този случай може да се изведе диагностика.

По този начин, ако Foo PL се поддържа в инсталацията, скрипта за стартиране може да бъде, както следва:

Ако PL Foo не се поддържа, както следва:

В този случай, се показва съобщение на стандартната грешка.

версия за печат режим, използван от програмата супер служи в процеса на създаване на ЛП при редактиране турнир.

версия за печат

В режим на печат версия, която се дава от изпълнението на скрипта без параметри на стандартния изход трябва да бъде отпечатан номер на версията PL. Ако PL не се поддържа в тази система (в инсталацията), стандартната изходен поток ще бъде празна, а кодът на връщане е равно на 1. В стандартна грешка в този случай може да се изведе диагностика.

По този начин, ако Foo PL се поддържа в инсталацията, скрипта за стартиране може да бъде, както следва:

Ако PL Foo не се поддържа, както следва:

В този случай, се показва съобщение на стандартната грешка.

версия за печат режим, използван от програмата супер служи в процеса на създаване на ЛП при редактиране турнир.

изпълнение

Помислете за изпълнение на скрипт за конфигурация PL Foo foo-version.in на. Образец на този (хипотетично) скрипт е взето скрипт за конфигуриране на PL Ruby.

съставянето на скрипт

компилира скрипта взима името на файла като параметър до изходния код на програмата за ПЗ и името на изходния файл. Задачата на съставянето на сценария - получите изходния файл, готов да бъде пуснат в околната среда, посочена от архитектурата на език.

За компилирани езици, в резултат на изготвянето на сценария е двоичен файл. За интерпретирани езици, в резултат на изготвянето на сценария е скрипт, готов за пускане. Като правило, за интерпретирани езици, това е достатъчно, за да записва в началото на файла за дизайн

и да зададете малко х права за изпълнение на файла. Тук интерполация-PATH - е пълния път до интерпретатора на езика.

На следващо място, съставяне на скрипта се вижда от примера на хипотетичен интерпретиран език Foo.

съставят интерфейс скрипт е много проста

Тук SRC-ФАЙЛ - името на входния файл, DST-ФАЙЛ - име на изходния файл. ejudge система генерира имената входа и на изхода на файлове с наставка на файл източник и изходния файл, както е посочено в листовката на конфигурационен файл. По този начин, няма допълнителна обработка не е необходима за извършване на имената на входа и на изхода на файлове.

Освен това, с променлива EJUDGE_FLAGS среда може да се настрои за знамена PLS. администратор турнир има възможност за задаване на знамена за турнир редактиране. Ето защо, компилира скрипта трябва да поддържа работата на опции, използващи онлайн среда EJUDGE_FLAGS КС.

изпълнение

Пример изпълнение на foo.in. скрипт компилация Образец на този (хипотетично) скрипт взето сценария за съставяне PL Ruby.

Преконфигуриране подкрепена Яп

След foo-version.in и foo.in скрипт поставен в директория / Начало / ejudge / съставяне / скриптове / в достатъчно, за да стартирате програмата ejudge конфигурирате компилатори. Ако скриптове са написани правилно, японски вариант трябва да бъде определено, а след това на езика е готова за използване.

На езика на турнира може да бъде добавен при редактиране на настройките на турнира с помощта на CGI-програми служат за контрол.

рестартиране ejudge

След изпълнение на стъпките не забравяйте да рестартирате ejudge, за съставяне на съставяне на сървъра считан за нов конфигурационен файл.

Подкрепете проекта - споделете линка, благодаря!