Új nyelvi processzor hozzáadása

A programozási nyelv támogatásának itt ismertetett útmutatója az ejudge 2.3.8 verziójára vonatkozik.

A nyelvi processzor (SP) egy fordító vagy egy programnyelv értelmezője.







Mivel az ejudge rendszer ugyanazt a programozási nyelvet használja (pl. Free Pascal, Borland Kylix stb.), Helyesebb beszélni nem a programozási nyelvek támogatásáról, hanem a nyelvi processzorok támogatásáról.

Az új JB támogatása az ejudge rendszerhez több lépésben történik.

  1. A hozzáadott LN paramétereinek meghatározása
  2. Testreszabási parancsfájl írása (lang-version.in)
  3. Összeállítási szkript írása (lang.in)
  4. A támogatott JA újrakonfigurálása az ejudge-configure-compilers program segítségével
  5. Az ejudge rendszer újraindítása

A paraméterek meghatározása

Az ejudge rendszerben az SP támogatásához szükséges paraméterek az alábbiak:

biztonságos mód jelző

az YAP rövid neve (rendszerint automatikusan meghatározásra kerül)

az AP teljes neve

az adott SP forrás forrásának szabványos utótagja

a szabványos végrehajtható fájl utótag ezen API számára

Az argumentum a JD konfigurálása az ejudge-setup vagy ejudge-configure-compilers programokkal történik

A JA fő paramétere az architektúra (arch). Az architektúra alatt azt a rendszerkörnyezetet értjük, amelyben a tesztelt programot elindítjuk. Az ejudge rendszer a következő architektúrákat támogatja:

  • A linux egy statikusan kapcsolódó végrehajtható program
  • linux-shared - dinamikusan kapcsolódó végrehajtható program (beleértve a szkripteket is)
  • java - java byte kódot
  • msil - .NET bytecode
  • DOS - DOS alkalmazások

A linux architektúra az alapértelmezett architektúra. Ha az LSP-nek linux architektúrája van, akkor ennek az LO-nak az arch paramétere vagy hiányzik vagy üres.

A második paraméter az a jelzés, hogy a tesztelt program megfelelõen mûködik az SP számára, ha biztonságos módban indul. Ha az LSP architektúrája a linux, a java vagy a dosszió architektúrája, akkor az ilyen LA-k tesztelt programjai szabályosan működnek biztonságos módon, míg minden biztonsági korlátozás támogatott. Ha az LSP rendelkezik msil architektúrával, akkor a biztonságos mód nem támogatható. Az ilyen rendszermaghoz tartozó programok tesztelhetők, de a program működését illetően nincsenek biztonsági korlátozások. Ha az LSP-nek a linuxos megosztott architektúrája van, akkor az ilyen LM biztonságos módja támogatott, de a teszt alatt lévő program biztonságos módban nem működik megfelelően, vagy egyáltalán nem működik.

Mindenesetre, ha kétség merül fel a program egészségi állapotában biztonságos módban, akkor ellenőriznie kell az egyszerű programokat, mind a szabványos szálakkal dolgozó, mind pedig a fájlokkal való munkát.

Ha a hozzáadott rendszermag nem támogatja a biztonságos módot, akkor a bizonytalan JI paraméternek 1. kell lennie. Ha biztonságos mód van támogatva, a paraméternek hiányzik vagy üres.

PL támogatott ejudge rendszer standard verzió 2.3.8, bizonytalanok PL gcj (GNU Java), gfortran (GNU Fortran), mcs (Mono C #), mzscheme (MzScheme) php (PHP), vbnc (Mono Visual Basic ), yabasic (yaBasic).

A short_name paraméter rövid név az AP számára. A rövid nevet a felhasználói üzenetek táblázatában és számos más helyen használják. Az YAP rövid neve valójában az YAP azonosítója. Egyetlen szónak kell lennie, legfeljebb 32 karakterből álló, nagybetűs és kisbetűs latin betűkből, számokból és jelekből álló +, -, _. Általában az SP rövid nevét automatikusan határozza meg a fordítási script és a beállítások neve. Például, ha a fordítás szkript (pontosabban a kompilációs parancsfájl sablonja) neve foo.in. akkor alapértelmezés szerint az LC többszörös neve lesz foo. Ne feledje, hogy a UNIX rendszerekben a fájlnevek megkülönböztetik a kis- és nagybetűket. A short_name paraméter értéke is kis- és nagybetűkre érzékeny.

A long_name paraméter az AP kiterjesztett (teljes) neve. Például az AP rövid neve lehet foo. és a teljes "GNU Foo Interpreter". Felhívjuk figyelmét, hogy az SP teljes neve nem tartalmazza a verziószámot.

Az src_sfx paraméter a forrásfájlok standard utótagja az SP számára. Például, ha a GNU GNU Foo esetében a forrásfájlokat file.foo-nak nevezik. akkor a forrásfájlok utótagja a string .foo (megjegyezzük, hogy a "dot" szerepel az utótagban).

Az exe_sfx paraméter megadja az adott SP számára végrehajtható fájlok szabványos utótagját. A végrehajtható fájlok utótagja általában az AP architektúrájától függ. Tehát a linux és a linux-megosztott architektúrák esetében a szabványos végrehajtható utótag nem szükséges, így az exe_sfx paraméter elhagyható vagy üres értékű lehet. DOS és MSIL architektúrák esetén a szabványos végrehajtható utótag .exe. és a java architektúra számára - .jar.

Paraméterek arch. bizonytalan. SHORT_NAME. long_name. src_sfx. Az exe_sfx leírja az NL tulajdonságait, tehát egy adott LN-hez, nem változnak a telepítésről az ejudge rendszer telepítésére.

Az opciók verziója és arg a JD telepítési tulajdonságait írja le egy adott rendszerben, így azok értékei a telepítéstől a telepítésig változhatnak.

A verzióparaméter meghatározza az SP verzióját. Ha a paraméter értéke üres, akkor úgy tekintjük, hogy a megfelelő SP-t nem észleltük a rendszerben. Ezért a paraméter értéke nem lehet üres. A JAR verzióját a beállítási parancsfájl határozza meg, általában a JAV speciális opciókkal történő indításával és a kimenet feldolgozásával.

Az arg paraméter tartalmazza a PL konfiguráció neki átadott ejudge-beállítását szkriptek vagy ejudge-configure-fordító. Például, ha egy program indítását ejudge-configure-fordítóprogramok a --with-ize = / usr / local / bin / ize, a paraméter a / usr / local / bin / foo konfigurációs szkript kerül átadásra PL ize-változat. Továbbá, ez a paraméter lehet, és interaktív módon ejudge-setup programokat és ejudge-configure-fordító. Jellemzően ez a paraméter határozza meg az utat, hogy a PL a fájlrendszerben, és hasznos olyan esetekben, amikor a PL található nem a megszokott helyen.

A támogatási fájlok felépítése

Tegyük fel, hogy az ejudge rendszer telepítve van a / opt / ejudge könyvtárban, és az adatok könyvtára telepítve van / home / ejudge. Ezután a / home / ejudge / compile könyvtár konfigurációs fájlokat és parancsfájlokat tartalmaz az alkalmazás összeállító kiszolgáló számára.

compile.cfg

A /home/ejudge/compile/conf/compile.cfg fájl a fő fordítási kiszolgáló konfigurációs fájl. A fájl tartalmazza az összes, az ebben a telepítésben támogatott SP-hez szükséges fordítást. Például a foo foo esetében az SP leírási része így néz ki:







Itt az id a SP azonosítója, amely a telepítés összes SP-jére jellemző. Az LR-re vonatkozó további információk az előző szakaszban leírt LF paraméterekből származnak.

A /home/ejudge/compile/conf/compile.cfg fájl automatikusan kerül megírásra, amikor az ejudge-configure-compilers programot hívják. Minden manuálisan végrehajtott módosítás elveszik minden alkalommal, amikor futtatod az ejudge-configure-fordítóprogramokat.

Az YAP és a rendszer megfelelő YAP-jának észlelésére szolgáló verziója nem szerepel ebben a konfigurációs fájlban, hanem közvetlenül olvassa le az YAP konfigurációs fájljából minden alkalommal, amikor a fordítási programot elindítja.

lang_ids.cfg

A szabványos szállításban támogatott SP-ek azonosítója a $ / libexec / ejudge / lang / lang_ids.cfg fájlban található. Ha nincs információ az új JA-ról ebben a fájlban, annak azonosítója automatikusan hozzárendelésre kerül: az első, amelyet még nem használt a compile.cfg fájlban. A felhasználó átmásolja a lang_ids.cfg fájlt a $ / compile / scripts könyvtárba, és tetszőleges módosításokat hajthat végre rá. A $ / libexec / ejudge / lang / lang_ids.cfg fájl módosítása nem ajánlott, mivel felülíródik a rendszer frissítésekor.

Katalógus lang.d

A /home/ejudge/compile/conf/lang.d könyvtár tartalmazza az összes eJudge által engedélyezett JD konfigurációs fájlokat. Az foo kernel számára a konfigurációs fájl neve foo.cfg. Tartalma így lehet:

A fájl a / bin / sh szintaxisban van írva. Ezt a fájlt ejudge rendszerprogramokként használják, mint például a compile, a super-serve és közvetlenül a foo és foo-version scriptek. Ezt a foo-verzió szkriptje hozza létre, amelyet speciális módban indítanak el.

A fent leírt SP paraméterek mellett a fájl tartalmazhat tetszőleges változók definícióit, amelyek szükségesek a foo vagy foo-verzió szkriptek futtatásához. A fenti példában ez a FOOPATH változó.

A könyvtárban

A könyvtárban vannak üresek a konfigurációs és összeállítási szkriptekhez. A / opt / ejudge / libexec / ejudge / lang / in könyvtár tartalmazza azokat a parancsfájlokat, amelyeket a standard ejudge-szállítmány támogat. A / home / ejudge / compile / scripts / in könyvtár tartalmazza a felhasználó szkriptjeit. Az utolsó könyvtár több prioritást jelent, azaz ha a szkript a / home / ejudge / compile / scripts / in könyvtárban található, akkor a rendszer katalógusa nem kerül ellenőrzésre. Ezért, ha módosítania kell a mellékelt szkriptet, akkor először másolja ezt a könyvtárat, majd módosítsa. A fájlok közvetlen módosítása a / opt / ejudge / libexec / ejudge / lang / in könyvtárban nem ajánlott, mivel ezeket a fájlokat felülírják az ejudge rendszer frissítésekor.

Katalógus parancsfájlok

A könyvtár / home / ejudge / összeállításához / script feldolgozása munkadarab script kész minden programot ejudge rendszer. szkriptek munkadarab feldolgozni és másolni a könyvtár / opt / ejudge / libexec / ejudge / lang / és / home / ejudge / összeállításához / scripts / ebben a könyvtárban a program ejudge-configure-fordító.

szkriptek tuskó

A foo foo esetében az foo.in és az foo-version.in parancsfájlokat kell írni. A parancsfájlokat a / home / ejudge / compile / scripts / in könyvtárban kell elhelyezni. A szkriptek szó szerinti jelentései megfelelnek a Makefile.in, config.h.in fájlok készítéséhez a GNU autotools rendszerben. Vagyis a szkriptek beszerzésénél az @ var @ formátum változóit azok értékével kell helyettesíteni.

Támogatott helyettesítések táblázatban felsorolt

volt. configure

A configure script

A configure script kell több üzemmódot támogató futni. Módot adtak meg a parancssori opciók használatával. Minden üzemmód tartják példája a kiigazítás a script ize-verzió

-R - konfigurációs mód

A konfigurációs mód támogatása YAP kell vizsgálni egy adott létesítmény. A szabványos kimenetre a tartalmát az új konfigurációs fájl PL foo.cfg nyomtatható. Ezen felül, ha megadjuk a lehetőséget -v, a stderr további információt a konfigurációs folyamat nyomtatni kell. A sikeres befejezése a konfigurációs kódot kell egyenlő 0, és amikor hiba - 1. ARG paraméter halad egy utat, hogy a felhasználó egy --with-ize = ARG lehetőségek konfigurált szakaszos üzemmódban vagy útvonalnak lépett konfigurálásakor interaktív .

Így, ha ize PL támogatja a telepítést, start-up szkript a következők lehetnek:

Az utolsó sort (ellenőrzés.) Jelenik meg a standard hiba.

Foo Ha PL nem támogatja a telepítést, start-up szkript a következők lehetnek:

Az utolsó sort (ellenőrzés.) Jelenik meg a standard hiba.

-l - listáját mód

A vételi mód YAP listák a szabványos kimenetre kell nyomtatott sor információt PL. A karakterlánc nyomtatott információk függetlenül attól, hogy a PL támogatja a telepítést. befejezés kódot mindig egyenlő 0.

Tehát, a PL ize indító szkriptet a következők lehetnek:

PL lista termelő üzemmódban a program által használt ejudge-configure-fordítóprogramok, amikor elkezdi azt a --list opció.

-p - nyomtasson az utat Yap

A nyomtatási módban, az utat, hogy a PL szabványos kimenetre kell nyomtatni az utat a PL. Befejezés kódot kell állítani 0. Ha a PL nem támogatja ezt a telepítést, elvonási üresnek kell lennie, és a befejezése kód értéke 1. Ebben az esetben a standard hiba lehet megjeleníteni diagnosztikai üzenetet.

Így, ha ize PL támogatja a telepítést, start-up szkript a következők lehetnek:

nyomtatási mód a program által használt szuper szolgálni néhány speciális esetben.

-f - nyomtassa ki a teljes nevét és verziószámát

A nyomtatási módban, a teljes neve PL a standard kimenetre kell nyomtatni a teljes nevét és verzióját a YAP YAP számát. Ha PL nem támogatja ezt a rendszert (a telepítés), a szabványos kimeneti adatfolyam üres lesz, és a visszatérési kód értéke 1. A standard hiba ebben az esetben a kimenet diagnosztikai.

Így, ha ize PL támogatja a telepítést, start-up szkript a következők lehetnek:

Ha PL ize nem támogatott, az alábbiak szerint:

Ebben az esetben egy üzenet jelenik meg a standard hiba.

változat nyomtatási mód a program által használt szuper szolgálja a folyamat beállítására PL szerkesztésekor versenyen.

print

A nyomtatási mód változata, ami által a szkript futtatása paraméterek nélkül a szabványos kimenetre kell nyomtatni verziószámot PL. Ha PL nem támogatja ezt a rendszert (a telepítés), a szabványos kimeneti adatfolyam üres lesz, és a visszatérési kód értéke 1. A standard hiba ebben az esetben a kimenet diagnosztikai.

Így, ha ize PL támogatja a telepítést, start-up szkript a következők lehetnek:

Ha PL ize nem támogatott, az alábbiak szerint:

Ebben az esetben egy üzenet jelenik meg a standard hiba.

változat nyomtatási mód a program által használt szuper szolgálja a folyamat beállítására PL szerkesztésekor versenyen.

végrehajtás

Tekintsük a végrehajtása a szkript konfigurációs PL ize foo-version.in. A modell az ilyen (feltételezett) script veszünk egy script konfigurálásához PL Ruby.

szkript fordítása

összeállítja a forgatókönyvet vesz egy fájlnevet a paraméter a forráskód a program a PL és a kimeneti fájl nevét. A feladat összeállítása a forgatókönyvet - kap a kimeneti fájl, készen áll az indításra a környezet által meghatározott építészeti nyelvet.

A lefordított nyelv, az eredmény összeállításához szkript egy bináris futtatható fájlt. Értelmezett nyelvekhez, az eredmény az összeállítása a szkript a forgatókönyvet, készen áll az indulásra. Általános szabály, hogy az értelmezett nyelvekhez, elég felvenni az elején a tervfájl

és állítsa bit x végrehajtási engedéllyel fájlt. Itt interp-PATH - a teljes elérési utat a tolmács a nyelvet.

Ezután fordítsd le a szkript által látott példa a feltételezett értelmezett nyelv ize.

összeállítja a forgatókönyvet felület nagyon egyszerű

Itt SRC-FILE - a bemeneti fájl nevét, DST-FILE - kimeneti fájl nevét. ejudge rendszer generálja a bemeneti és kimeneti fájlnevek utótag a forrás fájl és a kimeneti fájl, amint azt a konfigurációs fájl PL. Így nincs szükség további feldolgozásra nem szükséges elvégezni a bemeneti és kimeneti fájl nevét.

Ezen túlmenően, a változó környezet EJUDGE_FLAGS állítható zászló betegtájékoztatók. torna rendszergazda a képességét, hogy zászlók szerkesztésre versenyen. Ezért összeállítja a forgatókönyvet támogatnia kell a munkát a lehetőségeket a váltakozó áramú környezetben EJUDGE_FLAGS.

végrehajtás

Példa végrehajtása a forgatókönyvet fordításkor foo.in. A modell az ilyen (feltételezett) script venni a forgatókönyvet összeállítani PL Ruby.

Újrakonfiguráció támogatott YAP

Miután foo-version.in és foo.in script elhelyezni a könyvtár / home / ejudge / összeállításához / scripts / elég elindítani a programot ejudge-configure-fordító. Ha a szkriptet rendesen, japán verzió kell meghatározni, akkor a nyelv készen áll a használatra.

A nyelv a verseny lehet adni, ha beállításainak módosításával a torna segítségével CGI-programok szolgálják-ellenőrzés.

újraindítás ejudge

Elvégzése után a következő lépéseket ne felejtsük el újraindítani ejudge, elkészíti a kiszolgáló fordításkor tekinthető új konfigurációs fájlt.