20 elemente de compilare }i dezvoltarea programelor mari

20 elemente de compilare }i dezvoltarea programelor mari 20 elemente de compilare }i dezvoltarea programelor mari

28.04.2013 Views

192 Practica program[rii logice ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ⎯ D. Probleme de compilare a programelor D1) Pentru a compila un program Turbo Prolog sub form[ de fi]ier executabil (.EXE) @n sistemul de operare DOS sunt necesare urm[toarele: - Fi]ierele PROLOG.LIB ]i INIT.OBJ trebuie s[ se afle @n acela]i director cu PROLOG.EXE; - Compila\i programul @n memorie sub Turbo Prolog pentru a verifica corectitudinea sa; - Orice program compilat pe disc con\ine obligatoriu un scop intern; - Salva\i programul folosind Save din meniul Files (sau F2); - Selecta\i Compile din meniul principal ]i apoi EXE file (auto link) din acest meniu; ap[sa\i ]i programul va fi compilat pe disc; fereastra Message va afi]a: Execute(y/n): cu semnifica\ia evident[; - #n urma procesului de mai sus fi]ierul NUME.PRO al textului surs[ va fi compilat @n fi]ierul NUME.EXE care se va afla @n acela]i director. Remarca: Opera\ia de compilare extern[ comport[ de fapt dou[ etape: - generarea formatului obiect (fi]ierul NUME.OBJ); - editarea de leg[turi - combinarea fi]ierelor NUME.OBJ, INIT.OBJ ]i fragmente din PROLOG.LIB pentru a crea NUME.EXE; Nu este nevoie s[ folosim un alt linkeditor @n linie de comand[ ( de exemplu LINK.EXE al DOS). #nainte de compilarea extern[ trebuie s[ ne asigur[m c[ exist[ suficient spa\iu pe disc pentru crearea tuturor fi]ierelor (de exemplu, dac[ NUME.PRO are 7000 bytes, atunci NUME.OBJ are 11000 bytes iar NUME.EXE are 56000 bytes). Op\iunea OBJ file din meniul Compile este utilizat[ pentru generarea de fi]iere format obiect care pot fi apoi legate cu alte fi]iere obiect scrise @n alte limbaje cu ajutorul unui linkeditor extern ([1]). D2) #n cazul @n care avem un program Turbo Prolog foarte mare este posibil ca @n faza de compilare s[ apar[ o eroare de tip Overflow care specific[ dep[]irea zonei de memorie alocat[ pentru probramul compilat pe care o recunoa]te compilatorul (implicit aceast[ zon[ are 16 kB). Pentru a remedia putem utiliza o directiv[ de compilare care va redimensiona aceast[ zon[:

Elemente de compilare 193 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ⎯ code=numar unde numar este num[rul de paragrafe destinate acestei zone (1 paragraf = 16 bytes); De exemplu, pentru dimensionarea unei zone de 32 Kb plas[m la @nceputul programului code=2048. Aceast[ directiv[ poate fi substituit[ pentru cazul programelor executate sub Turbo Prolog folosind meniul Options/Compiler directives/Memory allocation/Code.... Dac[ la execu\ia unui program Turbo Prolog apare eroarea 1002 Stack overflow este necesar s[ ne asigur[m de corecta elaborare din punct de vedere logic a programului iar dac[ avem @ndeplinit[ aceast[ condi\ie, trebuie s[ redimension[m stiva de lucru a motorului de inferen\e folosind meniul Options/Compiler directives/Memory allocation/Stack... desigur tot @n paragrafe. D3) Un predicat care genereaz[ solu\ii multiple @n cursul unui proces de demonstra\ie se nume]te nedeterminist. Compilatorul Turbo Prolog dispune de directiva check_determ (care se plaseaz[ @naintea sec\iunii domains din program) pentru avertizarea utilizatorului asupra clauzelor nedeterministe - permite deci programatorului remedierea situa\iilor nedorite (eventual folosirea t[ieturii). #n cazul @n care programatorul cunoa]te predicatele nedeterministe din program ]i dore]te s[ r[m`n[ ca atare, aceste predicate trebuie s[ fie precedate @n declara\ie de op\iunea nondeterm. Deasemenea, pentru a ob\ine un raport detaliat asupra predicatelor dintr-un program, se folose]te directiva diagnostics fie @n program (plasat[ la @nceputul acestuia) c`t ]i din meniul Options/Compiler directives/Diagnostics. E. Imbricarea programelor Turbo Prolog #n situa\ia @n care acelea]i declara\ii de domenii, declara\ii de predicate ]i defini\ii sunt utilizate @n mai multe programe, este util[ folosirea directivei include "NUME.PRO" unde NUME.PRO este numele fi]ierului Turbo Prolog care con\ine defini\iile ]i declara\iile necesare. Efectul acestei directive const[ @n imbricarea programului NUME.PRO @n programul propriu, chiar @n pozi\ia @n care apare directiva. Programatorul trebuie s[ verifice eventualele neconcordan\e care pot apare (predicate folosite dar @nc[ nedeclarate etc).

192 Practica program[rii logice<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

⎯<br />

D. Probleme <strong>de</strong> <strong>compilare</strong> a <strong>programelor</strong><br />

D1) Pentru a compila un program Turbo Prolog sub form[ <strong>de</strong><br />

fi]ier executabil (.EXE) @n sistemul <strong>de</strong> operare DOS sunt necesare<br />

urm[toarele:<br />

- Fi]ierele PROLOG.LIB ]i INIT.OBJ trebuie s[ se afle @n acela]i<br />

director cu PROLOG.EXE;<br />

- Compila\i programul @n memorie sub Turbo Prolog pentru a<br />

verifica corectitudinea sa;<br />

- Orice program compilat pe disc con\ine obligatoriu un scop<br />

intern;<br />

- Salva\i programul folosind Save din meniul Files (sau F2);<br />

- Selecta\i Compile din meniul principal ]i apoi<br />

EXE file (auto link) din acest meniu; ap[sa\i ]i programul va fi<br />

compilat pe disc; fereastra Message va afi]a: Execute(y/n): cu<br />

semnifica\ia evi<strong>de</strong>nt[;<br />

- #n urma procesului <strong>de</strong> mai sus fi]ierul NUME.PRO al textului<br />

surs[ va fi compilat @n fi]ierul NUME.EXE care se va afla @n acela]i<br />

director.<br />

Remarca: Opera\ia <strong>de</strong> <strong>compilare</strong> extern[ comport[ <strong>de</strong> fapt dou[<br />

etape:<br />

- generarea formatului obiect (fi]ierul NUME.OBJ);<br />

- editarea <strong>de</strong> leg[turi - combinarea fi]ierelor NUME.OBJ,<br />

INIT.OBJ ]i fragmente din PROLOG.LIB pentru a crea NUME.EXE; Nu<br />

este nevoie s[ folosim un alt linkeditor @n linie <strong>de</strong> comand[ ( <strong>de</strong> exemplu<br />

LINK.EXE al DOS).<br />

#nainte <strong>de</strong> <strong>compilare</strong>a extern[ trebuie s[ ne asigur[m c[ exist[<br />

suficient spa\iu pe disc pentru crearea tuturor fi]ierelor (<strong>de</strong> exemplu, dac[<br />

NUME.PRO are 7000 bytes, atunci NUME.OBJ are 11000 bytes iar<br />

NUME.EXE are 56000 bytes).<br />

Op\iunea OBJ file din meniul Compile este utilizat[ pentru<br />

generarea <strong>de</strong> fi]iere format obiect care pot fi apoi legate cu alte fi]iere<br />

obiect scrise @n alte limbaje cu ajutorul unui linkeditor extern ([1]).<br />

D2) #n cazul @n care avem un program Turbo Prolog foarte mare<br />

este posibil ca @n faza <strong>de</strong> <strong>compilare</strong> s[ apar[ o eroare <strong>de</strong> tip Overflow care<br />

specific[ <strong>de</strong>p[]irea zonei <strong>de</strong> memorie alocat[ pentru probramul compilat<br />

pe care o recunoa]te compilatorul (implicit aceast[ zon[ are 16 kB).<br />

Pentru a remedia putem utiliza o directiv[ <strong>de</strong> <strong>compilare</strong> care va<br />

redimensiona aceast[ zon[:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!