20 elemente de compilare }i dezvoltarea programelor mari
20 elemente de compilare }i dezvoltarea programelor mari 20 elemente de compilare }i dezvoltarea programelor mari
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).
- Page 1 and 2: Readiness is all SHAKESPEARE - Haml
- Page 3 and 4: Elemente de compilare 189 ⎯⎯⎯
- Page 5: Elemente de compilare 191 ⎯⎯⎯
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[: