+ All Categories
Home > Documents > Despre Limbaj de Program Are

Despre Limbaj de Program Are

Date post: 18-Jul-2015
Category:
Upload: gincu-silviu
View: 226 times
Download: 0 times
Share this document with a friend
102
 UNIVERSITATEA DIN ORADEA – FACULTATEA DE ȘTIINȚE Programare procedurală [suport de curs] Lect.univ.dr.  Horea Oros [an univ.  2009-2010] [Lucrarea reprezintă suportul de curs pentru disciplina “Programare Procedurală” din planul de învățământ al studenților de la specializările Informatică și Matematică anul I.]
Transcript

UNIVERSITATEADINORADEA FACULTATEADETIINE

Programareprocedural[suportdecurs] Lect.univ.dr.HoreaOros [anuniv.20092010]

[LucrareareprezintsuportuldecurspentrudisciplinaProgramareProceduraldin planuldenvmntalstudenilordelaspecializrileInformaticiMatematicanulI.]

Cuprins1.

Introducere ................................................................................................................ 5 Definiii ........................................................................................................................... 5 Paradigme de programare ............................................................................................... 7 Generaii de limbaje ........................................................................................................ 8 Istoria i evoluia limbajelor de programare ................................................................. 10 Tendine ........................................................................................................................ 16 2. Procesuldecreareasoftwareului ........................................................................ 17 Introducere .................................................................................................................... 17 Aspecte ale calitii software-ului ................................................................................. 18 Studiu de caz - Limbajul C ........................................................................................... 19 3. Traducereaiexecuiaprogramelor ..................................................................... 21 Specificarea sintaxei unui limbaj de programare .......................................................... 21 Traducerea programelor ................................................................................................ 28 Uniti de program ........................................................................................................ 32 Link-editarea ................................................................................................................. 33 Execuia programelor .................................................................................................... 34 Medii de programare i execuie ................................................................................... 35 Interpretarea .................................................................................................................. 35 4. Declaraii .................................................................................................................. 36 Rolul identificatorilor ntr-un program ......................................................................... 36 Semantica unei declaraii .............................................................................................. 37 Declaraii de constante .................................................................................................. 37 Declaraii de tipuri de date ............................................................................................ 40 Declaraii de variabile ................................................................................................... 47 5. Tipuridedate .......................................................................................................... 58 Tipuri fundamentale ...................................................................................................... 58 iruri de caractere ......................................................................................................... 60 Tipul pointer.................................................................................................................. 61 Tipuri procedurale......................................................................................................... 63 Tipuri structurate ........................................................................................................... 64 Tipul tablou ................................................................................................................... 66 Tipul de date nregistrare .............................................................................................. 68 Tipuri definite de utilizator ........................................................................................... 70 6. Expresii..................................................................................................................... 71 Generaliti.................................................................................................................... 71 ProritateaiasociativitateaoperatorilornlimbajulC: ................................................ 73 Clase de operatori i de expresii (dup tipul rezultatului) ............................................ 75 Modaliti de evaluare a expresiilor .............................................................................. 80 7. Instruciuniicontrolulexecuiei .......................................................................... 84 Instruciunea de atribuire .............................................................................................. 84 Instruciunea compus .................................................................................................. 86 Instruciuni condiionale (de ramificare, de selectare) .................................................. 86 Instruciuni de ciclare.................................................................................................... 88 Instruciuni de transfer .................................................................................................. 89

Programarea structurat i cum s-a ajuns la ea ............................................................. 90 Proceduriitransmitereaparametrilor ................................................................ 92 Abstractizare i specificare ........................................................................................... 92 Proceduri ....................................................................................................................... 96 Evaluarea i transmiterea parametrilor ......................................................................... 98 Specificarea parametrilor unei proceduri ...................................................................... 99 Noiunea de efect secundar ........................................................................................... 99 Proceduri mutual recursive ......................................................................................... 100 9. ANEXE .................................................................................................................... 101 8.

4

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILect.univ.dr.HoreaOros

1. IntroducerePP este o paradigm de programare bazat pe conceptul de apel de procedur. Procedurile, numite i rutine, subrutine, metode sau funcii (a nu se confunda cu funciile matematice, dar similare cu cele folosite n programarea funcional) coninoseriedepaicomputaionalicaretrebuieparcuri.Oriceprocedurpoatefi apelat oriunde n timpul execuiei unui program inclusiv din interiorul ei (apel recursiv). PPestedemulteorioalternativmultmaibundectprogramareasecvenialsau programarea nestructurat n situaiile n care complexitatea problemei este moderatinunecesitunefortdentreinereridicat. BeneficiialePP: Posibilitateadearefolosiacelaicodnlocuridiferitencadrulprogramului fralcopia. Controlul execuiei programului este mai simplu n comparaie cu folosirea unorinstruciuniGOTOsauJUMP(instruciunicepottransformaunprogram marencevacesenumetecodsubformdespaghete). Abilitateadeafiputernicmodularistructurat.

DefiniiiLimbajdeprogramare:notaiesistematicprincareestedescrisunprocesdecalcul. Rolul unui LP este de a pune la dispoziia programatorilor construcii sintactice pentruorganizareacalculelor.Procesuldecalculesteconstituitdintromulimede pai pe care o main i poate executa pentru a rezolva o anumit problem, pai care sunt exprimai n comenzielementare pe caremaina (calculatorul) tie s le execute.Pentrudescriereaprocesuluidecalculestenecesarcunoatereasetuluide comenzi(instruciuni)almainiilacarenereferim. Limbaj main: limbajul nativ al unui computer, reprezint notaia la care calculatorul rspunde n mod direct. Setul de comenzi elementare al unui calculatoresteconstituitdin:operaiiaritmeticeilogice,operaiideintrareieire i unele funcii speciale, numite funcii de control. Comenzile i instruciunile limbajului main sunt scrise ntro form codificat, foarte compact, fapt ce ngreuneazfoartemultnelegereatextuluisurs.Limbajulmainestefoartelegat de arhitectura fizic a mainii, el fiind constituit din codificri binare a cror semnificaieesteimposibildedescifratnmodrezonabildectreprogramator. 0000101011110000 0010111111111111 0010000000000101 5

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

Limbajul de asamblare: face un pas nainte ntruct atribuie nume simbolice (mnemonici) codificrilor operaiilor mainii, precum i locaiilor de memorie asociate. Secvena de coduri binare de mai sus are, pe o anumit arhitectur, echivalentulmnemonic: LOAD I ADD J STOREK Niciunadinceledouvariantenuestelafeldeclarisemnificativcaechivalentul lor: K:=I+J Din acestmotiv, limbajelemain i cele de asamblarese numesclimbaje denivel sczut. Acestelimbajesuntfoartedepartedelimbajulnatural,aacsacutatelaborarea altor limbaje, mai apropiate de exprimarea natural. Rezultatul a fost crearea limbajelor de nivel nalt (highlevel programming languages). Aceste limbaje utilizeaz notaii mai puin primitive dect limbajele de asamblare, n care exprimarea aciunilor de urmat devine uoar, clar i concis. Nivelul nalt are semnificaiauneidistanrisuficientdemarifadeniveluldeexprimarealmainii. Un limbaj de nivel nalt mrete considerabil numrul celor care vor programa calculatoare. Proiectarea i implementarea limbajelor de programare este activitateacapitaldeacreicalitatedepindelrgireacomunitiiprogramatorilor carespoatrealizaeficientdezvoltareaunoraplicaiidelarginteres. Orice notaie utilizat care este diferit de limbajul main nu poate fi executat direct, ea trebuind s fie tradus n limbajul main al calculatorului gazd. Activitatea de traducere (numit generic translatare) este preluat de programe specializatenumitecompilatore(dactextulsursestescrisntrunlimbajdenivel nalt)sauasambloare(dactextulsursestescrisnlimbajdeasamblare). Datorit interpunerii compilatoarelor i asambloarelor este evident c odat cu creterea claritii i accesibilitii, limbajele de programare de nivel nalt aduc cu ele i o scdere a performanei de execuie fa de variantele de program scrise directnlimbajmain.Acestescderisemanifestpedouplanuri: timpmaincerutdeprocesuldecompilare codul rezultat n urma translatrii este de obicei mai lung i necesit mai multtimpdeexecuiedectvariantacodificatdirectnlimbajmain. Trecerea la utilizarea LP de nivel nalt a adus cu sine o caracteristic foarte importantaprogramelorscrisenastfeldelimbajeianumeportabilitatea,adic posibilitatea de a rula programele fr modificri pe arhitecturi de calcul diferite (eventualmodificrilesuntcutotulminore).Acestmomentafostfoarteimportant 6

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

pentrudezvoltareauneicomunitideprogramatori,pentrurspndireasoftuluii pentrucreareadebibliotecideprogramereutilizabile.

Paradigme de programareParadigm de programare: colecii individualizate de caracteristici de evaluare i criterii de abstractizare care determin i difereniaz clasele de limbaje de programare. Astfel de criterii sunt: structura programului, noiunea de stare a execuiei,metodologiaprogramrii. Programarenestructurat:foloseteGOTO Programarestructurat:eliminGOTO(saureducefoartemultutilizareaGOTO) Programarea procedural: este caracterizat prin faptul c un program este privit caomulimeierarhicdeblocuriiproceduri.Exponent:ALGOL60 Programare funcional: un program este descris pe baza unor funcii de tip matematic utilizate de obicei recursiv. Funciile sunt considerate obiecte cu drepturiegale(firstclasscitizens)ncadrullimbajului,adiclafelcaelementele oricrui tip de dat ele pot constitui elementul de baz n structurarea unor date (putem avea de exemplu tablouri de funcii), pot fi returnate ca rezultat al unor funcii(funciacompuneredefunciireturneazoaltfuncie).Exponeni:Lisp(anii 60),Miranda(anii70),ML(anii80),Haskell(anii90). Programareimperativ:(opusulesteprogramaredeclarativ)esteoparadigmde programare care descrie procesul de calcul n termeni de stare a programului i instruciunicareschimbstareaprogramului.Programeleimperativepotfiprivite ca o serie de comenzi pe care calculatorul le execut. Limbajele imperative indic modulncarearelocprocesuldecalcul.Majoritatealimbajelordeprogramaresunt limbajeimperative.(Fortran,Algol,C,Pascal,Ada) Programare declarativ: este o abordare a programrii calculatoarelor ce implic creareaunuisetdecondiiicedescriuspaiulsoluieidarlasinterpretareapailor necesari pentru a ajunge la soluie unui interpretor nespecificat. Programarea declarativesteoabordarediferitfadeprogramareimperativtradiionaldin Fortran,Pascal,Ccarenecesitcaprogramatorulsfurnizezeolistdeinstruciuni ce se execut ntro ordine specificat. Soluiile declarative au dou faze independente:declaraiaiinterpretarea.(Prolog,Haskell,Oz,SQL,WSDL) Programare logic: un program este descris printrun set de relaii ntre obiecte precumiderestriciicedefinesccadrulncarefuncioneazaceleobiecte.Execuia nseamn aici activarea unui proces deductiv care va furniza concluzii posibile pe bazadatelordeintrare.Exponent:Prolog. Programare bazat pe obiecte i orientat pe obiecte: un program este constituit dintro colecie de obiecte care interacioneaz. Exponeni: Simula, Smalltalk, C++, Java,C#. Programare concurent i distribuit: execuia unui program este constituit din aciuni multiple posibil a fi executate n paralel pe una sau mai multe maini. Execuia aciunilor poate fi independent sau aciunile pot depinde una de alta, 7

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

situaie n care este nevoie de primitive de sincronizare i comunicare. Exponeni: CSP, extensii concurente ale limbajelor imperative (C, Pascal, FORTRAN), Linda, Occam Programare la nivelul bazelor de date: aciunile programului sunt dictate de cerinele unei gestiuni corecte i consistente a bazelor de date asupra crora acioneazprogramul.Exponent:SQL. Paradigmele prezentate nu sunt mutual exclusive. Exist limbaje de programare multiparadigm.

Generaii de limbaje19541958Limbajeledeprogramaredeprimageneraie(FORTRANI,ALGOL58). Acesteaaumerituldeafifcutpasuldecisivdelalimbajuldeasamblarelalimbajele de nivel nalt. Rolul lor primordial a constat n promovarea i dezvoltarea conceptelor ce stau la baza limbajelor de programare de nivel nalt precum i a implementriilor. 19591961Limbajedegeneraiaadoua(ALGOL60,FORTRANII,Cobol,Lisp) Sunt considerate limbaje stabile, durabile, care se utilizeaz intens i astzi. Chiar dacALGOL60nuaatinsungradderspndiresuficientdemare,influenasaafost imensndezvoltarealimbajelorPascal,PL/1,SimulaiAda. 19621971Limbajedegeneraiaatreia(PL/1,ALGOL68,Pascal,Simula) Chiardacaureprezentatteoreticunpasnainte,succesullornusepoatecompara nicipedepartecucelallimbajelordegeneraiaadoua.ncercareaacestorlimbaje dealenlocuipeceledegeneraiaadouaafostsortiteecului,fcndulpeC.A.R. Hoare s remarce ALGOL60 reprezint un pas nainte fa de succesorii(!) si. Limbajul PL/1 a combinat elemente de FORTRAN, ALGOL i Cobol rezultnd un limbaj puternic, dar mult prea complex, deosebit de dificil de nvat i de implementat. ncercarea limbajului ALGOL68 de a generaliza limbajul ALGOL60 a fost caracterizat drept elegant dar neacceptat practic de marea mas a programatorilor. Limbajul Pascal, dei cu un enorm succes din punct de vedere didactic,nuesteconsideratniciastzisuficientderobustpentruutilizarealascar industrial. 19721979Limbajedegeneraiaapatra(CLU,CSP,Ada,Smalltalk) Au avut o rspndire i mai redus dect cele de generaia a treia, justificnd pe bun dreptate denumirea acestei perioade drept gol de generaie (generation gap).Aceastperioadafostnsoperioaddecercetareintensidereevaluarea obiectivelor proiectrii limbajelor de programare. Criza software de la sfritul anilor 60 a condus la o schimbare de optic n acest sens, accentul cznd pe structurare.Lanivelmicroacestlucrusafcutprineliminareainstruciunilorgoto inlocuirealorcuinstruciunidetipwhile,iarlanivelmacrosapusmareaccent pe modularizarea programelor prin utilizarea intensiv de funcii i proceduri i prinpromovareaconceptuluideabstractizareadatelor. 8

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

19801990Paradigmealelimbajelordeprogramare Aceast perioad se caracterizeaz printro intens activitate de cercetare, concentratnuattpestudiulidezvoltareaunorlimbajeparticulare,ctpestudiul paradigmelor asociate claselor de limbaje. n acest sens se remarc clasele de limbaje funcionale, logice, orientate obiect i distribuite, ele reprezentnd i cele patruparadigmedeprogramarecelmaiintensstudiatelaoraactual.

9

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

Istoria i evoluia limbajelor de programarePrimullimbaj Ada Lovelace scrie programe pentru proiectul motor diferenial al lui Charles Babbage iar mai apoi pentru motorul analitic. n 1945, germanul K. Zuse, inventatorul calculatorului Z3 a definit un limbaj evoluat pentru acest motor (folosindtablouriinregistrri) Asamblare Asambloarele au aprut o dat cu primele calculatoare. Acestea asociaz un nume simboliccoduluilanivelmain,deex: Addbx,4 cmp[adr],3 jmpaddress Programarea n limbaj de asamblare nu se mai practic pe scar larg, nici mcar pentrurutinecetrebuiesrulezefoarterapid. Autocoder1952 AlickEGlennie ImplementatpentruprimadatpeMark1,iarmaiapoiipealtecalculatoare. IPL1956 InformationProcessingLanguage ANewell,HSimon,JCShaw Limbajdeniveljospentruprocesarealistelor.Implementeazrecursivitatea Fortran19541958 FORmulaTRANslator JohnBackusialicercettoridelaIBM Limbajdedicatcalculelormatematice

10

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

FortranII(1958)introducesubrutine,funcii,bucle,ostructurdecontrolprimitiv detipFOR.Identificatoriisuntlimitailaasecaractere Lisp19581960 LIStProcessing MacCarthy Limbaj funcional pentru procesarea listelor. Este recursiv, nu este iterativ. Nu existdiferenntrecodidate. Algol1960/AlgolW1966/Algol68 ALGOrithmicLanguage Definitdeunconsoriuinternaionalformatdinspecialitininformatic Primul limbaj universal independent de main. Introduce utilizarea gramaticilor BNF(BackusNaurForm)pentruacreaunanalizorsintactic.Introduceblocurilede instruciuni i variabilele locale n cadrul unui bloc. Recursivitatea a fost implementat cu reticen pentru c a fost considerat inutil! Folosete tablouri dinamiceceeacenseamnclimbajeleurmtoare(Pascal,C)auregresatfolosind tablouristaticepentruoperformanmaibun. AreinstruciuneaIFTHENELSE,FOR,simbolul:=pentruatribuire(folositmaiapoi nPascal),instruciuneaSWITCHcuGOTO,indicatoriBEGIN,ENDicicluWHILE. Algol W proiectat de Niklaus Wirth n 1966 folosea RECORD (structuri de date dinamice), CASE, transmiterea parametrilor prin valoare, precedena operatorilor. n acelai an, Niklaus Wirth a creat Euler, un limbaj ntre Algol i Pascal. Algol 60 limbaj orientat spre calcule matematice. Pentru a ncerca s se obin obiectivul iniialianumedeacreaunlimbajdeuzgeneral,sacreatncepndcu1964onou versiuneAlgolX,numitmaitrziuAlgol68.Algol68folosea=+pentruacontopi atribuireacuadunarea.IntroduceUNIONitipuriCAST.AreIFTHENESLEFI,CADE GOTO,operatoridefiniideutilizator.Compilareaincrementalnuestepermis. Cobol1960 COmmonBusinessOrientedLangage. DefinitdeCODASYL,COnferenceonDAtaSYsystemsLanguages. 11

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

Basic1964 BeginnersAllpurposeSymbolicInstructionCode JohnKemeny,ThomasKurtz Proiectat n1963,pentruafiuor denvatiafostimplementatn1964.Prima versiuneafostcompilat,dupcareadevenitinteractiviinterpretat.Fiecarelinie areunnumripermitesaltullaliniecuinstruciuneaGOTO. Bill Gates i Paul Allen au ctigat un concurs internaional prin proiectarea i implementareaunuiBasicrapidicompact,primadatpeAltair(4kbdememorie) imaiapoipealtemicrocomputere. Microcomputerele aufost furnizate cuBasicnROM pnla sfritul anilor80. n 1977, Appel II se vindea cu Basic pentru ntregi. Mai apoi Applesoft Basic de la Microsoft cu virgul flotant. Applesoft avea identificatori din dou litere. SubprogrameleerauapelateprinGOSUBnumrlinie. PrimulPCdelaIBM(1981)foloseasistemuldeoperareMSDOSdelaMicrosofti Basicinterpretat(Basica).n1982MicrosoftaprodusprimulBasiccompilat(Quick Basic) n acelai deceniu Pascal i C au nlocuit Basic. Microsoft folosete n continuare Basic(VBA). Logo66 WFuerzeig,SPapert,andothers Folositpentruainvapecopiiprogramare.AsemntorcuLispisebazeazpe micareauneibroateestoasepeecran. Pascal1970 BlaisePascal,matematicianfrancez NiklausWirth.

12

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

A fost proiectat pentru a simplifica crearea compilatoarelor i pentru ndruma procesuldenvareaprogramriispreprogramareastructurat.UCSDPascaleste prima versiune pentru microcomputere. Programele sunt compilate n Pcod, care este portabil i interpretat (la fel ca Java mai trziu). Includea un mediu pentru dezvoltare de aplicaii complet, un principiu folosit cu succes mai trziu n Turbo Pascal.n1981,joculWizardryscrisnPascalaavutunsuccesfoartemarepeApple. Turbo Pascal (proiectat deAnders Hejlsberg)a aprutn 1983.Erarapid, aveaun IDE complet aa c limbajul a avut un succes instantaneu i este folosit chiar i astzi.StructuriledecontrolsuntasemntoarecuceledinC. Smalltalk1972 AlanKay,SoftwareConceptGroup. Limbajdeprogramareorientatobiectcareruleazntotdeaunancadrulunuimediu grafic,cuferestre,mouseetc. C1973 CestesuccesorulluiB,carelarndulluiestesuccesorulluiBCPL DennisRitchie. A fost destinat pentru programarea sistemului de operare UNIX, dar a devenit repede un limbaj universal datorit portabilitii i vitezei. Permite compilare incremental. n 1965, programatorii AT&T foloseau BCPL pentru a implementa Unix.Nemulumiidelimbaj,laumbuntitisacreatlimbajulBiarmaiapoiC. EvoluiahardwareuluiadeterminatapariialimbajuluiC.BCPLiBfoloseauntregi pentru pointeri, dar aceasta nu funciona pe calculatoarele noi. BCPLnuare tipuri (lafelcaPHPsaualtelimbajescriptmoderne).Declaraiileinti,charbaufostcreate nC.Ulteriorauaprutialtetipuri.Operatorul+=vinedinAlgolundeerascris=+. nBCPL,unblocdeinstruciuniesteinclusntresimbolurile(*i*)iarcomentariile ntre /* i */ iar subexpresiile ntre ( i ). Limbajul C a simplificat scrierea prin folosirea acoldelor. ++ exista i n limbajul B. Cuvntul include venea din PL/1. Preprocesorulafostimplementatn1973idinacelmomentlimbajulCafostfolosit pentruscriereasistemuluideoperareUnix.Limbajulaevoluatpnn1980. Sql1970+

13

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

StandardQueryLanguage IBM Limbajpentruinterogareabazelordedaterelaionale. C++19811986 BjarneStroustrup. Versiune a limbajului C orientat pe obiecte. Introduce suprancrcarea operatorilor. Metodele pot fi inline. Comentarii // care vin din BCPL. Au fost implementatemotenireaiabloanele(clasesaufunciigenerice). Objective C, inventat de Brad Cox n 1984, este o alt versiune orientat obiect a limbajuluiCinspiratdinSmalltalk. Perl1987 PracticalExtractingandReportLangage. LarryWall,lingivstaustralian Destinat pentru nlocuirea limbajelor linie de comand Unix, Sh, Sed and Awk, a pstrataceeaisintaxgreoaie.Folositnprincipalpentruadministrareasistemului i scripturi CGI. Folosete liste i tablouri asociative. Exist structura de control FOREACHcarepermiteparcurgereaunorliste. Java1994 Java(coffee) JamesGosling,SunMicrosistems Proiectatn1991caunlimbajinteractivnumitOak.Lavremearespectivnuaavut succes.n1994afostrescrispentruInternetiredenumitJava.n1995seputeau crea appleturi. n ianuarie 1996, Javasoft distribui JDK 1.0. Kitul pentru dezvoltarea de aplicaii. Java este un limbaj clasic de programare procedural, apropiat de C++. Se compileaz n bytecode ce poate rula pe orice calculator. Este maisimpludectC++:fiecarefiierconineosingurclas,memoriaestegestionat automat, nu exist pointeri, motenire multipl, suprancrcarea operatorilor dar includemultitasking.SpredeosebiredeCiC++aredoartablouridinamice. 14

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

PHP1995 PersonalHomePagesHypertextProcessor RasmusLerdorf Limbajscript mutliplatform,ceseincludenHTML.AsemntorcuCdarnueste tipizat. Variabilele se prefixeaz cu $. Interpretorul prelucreaz pagina html ce include instruciuni php i o transform ntro pagin html pur. Biblioteca de funcii permite crearea de pagini web dinamice. Microsoft folosete ASP (asemntorcuBasic) UML1996 UnifiedModelingLanguage Standard (Object Management Group) Grady Booch, Jim Rumbaugh, and Ivar Jacobson Uml reprezint reunirea a trei limbaje de modelare proiectate de cei trei autori. Limbajulfoloseteonotaiegraficpentruaproiectasoftware.Sefacdiagramecare exprim obiecte i interaciunile dintre acestea. Un model este realizat din vizualizri i combinarea lor descriu un sistem complet. Modelul este abstract i independentdedomeniu. Este limbaj pentru specificarea, vizualizarea, construirea i documentarea proiectelorsotwareintense. C#2000 (Csharp),succesoralC++? AndersHejlsberg/Microsoft.

15

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

Principalul limbaj din platforma .NET , pentru crearea de software care s funcionezeprinInternet.LafelcaiJava,pstreazsintaxaC(unlimbajde30de ani!) i aduce mbuntiri: garbage collector, nu are pointeri, interfee, multi tasking C# se comileaz n limbaj intermediar MSIL (Microsoft Intermediate Language) i folsoeteobibliotecmultilimbaj,CLR(CommonLanguageRuntime).Originalitatea sistemului.NETestevarietateadelimbajecepotficompilatenMSILipartajarea claselor. Altefacilitioferitedeacestlimbaj: Structurilesuntspecialefiindtransmiseprinvaloare Identificatoriisuntobiectecumetode Atributele sunt obiecte descriptive ataate elementelor programului i folosite la execuie Proprieti(get/set) Foreachpentruparcurgereaunorlistedeobiecte Delegai(nlocuiescpointeriilafunciidinC) mbuntirifadeJava: Gestiuneaevenimentelorestembuntit Suprancrcareaoperatoriloresteprezent Accesmaisimplulasistemulnativ

TendineLimbajescript:NetRexx,Python,Ruby,Scriptol. LimbajepentruInternet:Php,Asp,JavaScript Limbajedemarcare:XML Platforma .NET sau altele similare vor simplifica introducerea de cod n interiorul datelor,darXMLpoatefioalternativ.C#vafiunliderpentruastfeldeplatforme iar succesul su va fi asigurat de faptul c programatorii de C, C++ i Java l vor adopta cu uurin. Datorit faptului c platforma .NET permite utilizarea oricrui limbaj va fi posibil apariia unor limbaje noi mai expresive. Platforma .NET foloseteXMLprinconvertireanobiecte.ViitorulestefolosireadirectaXMLului catipdedate.

16

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

2. ProcesuldecreareasoftwareuluiIntroducereLimbajele de programare sunt instrumente pentru scrierea de programe. Ele sunt componente ale procesului de creare a softwareului i prinurmare proiectarea i implementarea lor respect etapele componente ale acestui proces. Se poate considera c realizarea unui nou limbaj este structural identic cu realizarea unei aplicaii software complexe, ea trebuind s urmeze un anumit cadru general, ale cruifazesuntbinedefinite,cadruncareestepermislafiecarepasrevenirean fazaimediatanterioar. ncontinuarevomprezentafazeleprocesuluidecreareasoftwareului. Analiza i specificarea cerinelor. O aplicaie software este conceput pentru a veni n sprijinul unui anumit grup de utilizatori poteniali. Cerinele acestora sunt stabilitesubformaunuidocumentcaretrebuiesprecizezeceeacetrebuiesfac aplicaiarespectivinucum.Laelaborareadocumentuluiparticipattpotenialii utilizatori, ct i specialitii n dezvoltarea de software. Acest document conine specificaiiprivindmanualeleutilizator,studiidecostifezabilitate,cerineprivind performaneleetc. Proiectarea i specificarea softwareului. Plecnd de la cerinele specificate n faza precedent, echipa care realizeaz aceast etap (proiectanii software) realizeaz specificaiile de proiectare, care identific fiecare modul al sistemului, precum i interferenele dintre module. Metodologia de proiectare utilizat n aceast faz are o mare importan pentru alegerea limbajului de programare utilizatnfazaimediaturmtoare. Implementarea.Aceastfazestesingurancareesteutilizatexplicitunlimbajde programare. Implementarea nseamn scrierea de uniti de program corespunztoare modulelor descrise n specificaiile de proiectare i editarea documentaieicorespunztoare.Rezultatulacesteifazeesteunsistemimplementat idocumentatcomplet. Certificarea.Scopulacesteietapeesteverificareacerinelorimpusenprimaetap i se realizeaz de obicei prin testarea sistemului n raport cu fiecare cerin specificat, utiliznduse o baterie de teste, adic un set de programe (cnd este vorba de un limbaj de programare) sau un set de exemple (cnd este vorba de o aplicaieoarecare)careacopertoatenecesitileimpuse.Dinpunctuldevedereal testrii,nusepoatefaceodistincieclarntrefazele3i4.Astfel,estenormalcan fazadeimplementaresserealizezetestarealaniveldemodul,efectuatdefiecare programatoriparialtestareainterfeelorintermodule(testaredeintegrare),care serealizeazprinlegareactorvadintremoduleleaplicaiei.nfazadecertificarese realizeaz testarea sistemului, care verific sistemul n ansamblul su. Rezultatul acestei faze este un sistem verificat i certificat complet, livrabil utilizatorilor. n

17

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

afaratestrilorpropriuzise,totnaceastfazseincludtoateactivitilecaresunt legatedeverificareacorectitudiniiprogramelorscrise. ntreinerea. Dup intrarea n exploatarea a aplicaiei, pot s apar necesitatea unormodificri,provocatefiededetectareaunoreroricareauscpatdinfaza4,din dorina de ai aduga noi specificaii (cerine). De obicei, costul ntreinerii unei aplicaiintrececostultuturorcelorlaltefazeluatempreun. ngeneral,oriceprodussoftwaretrebuiessatisfacurmtoarelecerine: Sfiefiabil Sfieuordentreinut Sseexecuteeficient

Aspecte ale calitii software-uluiToat lumea dorete ca programele s fie fiabile, rapide, uor de folosit, lizibile, modulare,structurateetc. Calitatea produselor program se definete ca o compunere a mai multor trsturi. Existoseriedefactoriexterniifactoriinterni. Factorii externi de calitatea sunt sesizai de cei care interacioneaz direct cu produsulfinalicarecumprprodusul,contracteazdezvoltareaintreinerealui. Factorii interni de calitate se pot detecta doar de ctre persoanele implicate n procesuldedezvoltaredesoftware. Factoriiexterni: Corectitudinea: abilitatea produsului de a executa exact sarcinile sale, n conformitatecucerineleispecificareasa. Robusteea: este abilitatea sistemului de a funciona chiar i n condiii anormale. Uneori se folosete termenul fiabilitate, care este un concept mai general i se interpreteazcelmaibinecaacoperindattcorectitudineactirobusteea. Extensibilitatea:esteuurinacucareproduselesoftwaresepotadaptalaschimbri ale specificaiilor. Exist dou principii eseniale pentru mbuntirea extensibilitii: simplitatea proiectului (o arhitectur simpl va fi ntotdeauna mai uordeadaptatlamodificridectunacomplicat)idescentralizarea(cuctsunt maiautonomemodulelentroarhitectur software,cuattva fimaimicnumrul de consecine ale unei modificri simple; ea va trebui s afecteze doar modulul n cauzsauunnumrmaimicdealtemodule). Reutilizabilitatea:esteabilitateaproduselorsoftwaredeafireutilizate,nntregime saupariallanoiaplicaii. Compatibilitatea:esteuurinacucareproduselesoftwarepotficombinatentreele (potinteraciona). Eficiena:nseamnfolosirearaionalaresurselorhardware(procesoare,memorii, dispozitivedecomunicare).

18

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

Portabilitatea:esteuurinacucareproduselesoftwaresepottransferandiverse mediihardwareisoftware. Verificabilitatea: este uurina de elaborare a procedurilor de acceptare (n particular date de test) i a procedurilor de detectare i trasare (transformare n erori)acderilor(failures)ntimpulfazelordevalidareiexploatare. Integritatea: este abilitatea produselor software de ai proteja componentele (programe,date,documente)fadeacceseimodificrineautorizate. Uurinanutilizare:sereferlanvareautilizriisistemului,operarea,pregtirea datelordeintrare,interpretarearezultatelorirecuperareadinsituaiideeroare. Factorii interni de calitate sunt strns legai de natura intim a procesului de elaborareaproduselorprogram.Aicicontribuie:metodeledeanaliziproiectarea produselor program, facilitile oferite de limbajele de programare folosite la implementareiaspecteleorganizatoricealeindustrieisoft. Factoriiinterni: Modularitatea: structural produsul program trebuie s fie alctuit din module, urmrinduseprincipiuldescentralizrii. Documentareacomplet:presupuneexistenauneidocumentaiiclareiaduslazi pentrufiecarefazdincicluldeviaalprogramului. Unlimbajdeprogramaretrebuiesposedeurmtoarelecaliti: S permit o descriere ct mai natural a problemei care se rezolv, permind programatorului s se concentreze asupra problemei i nu asupra detaliilor de adresare,indexareetc. Saibungraddelizibilitatectmairidicat,adicunprogramspoatfiuorde descifrat(sintacticisemantic)deoricinelconsult. Spermitgestiuneaexcepiilor(depiriaritmetice,erorideintrareieireetc.)

Studiu de caz - Limbajul CC este (dup cum admit Brian W. Kernighan i Dennis M. Ritchie, creatorii limbajului) un limbaj relativ mic, dar un limbaj care se comport foarte bine (din punctuldevederealadmiratoriloracestuilimbaj).Faptulclimbajulestemiciare unsetlimitatdecaracteristiciimplicoseriedeavantaje:trebuienvatmaipuin; nu exist un bagaj suplimentar n calea programatorilor, de care nu au nevoie. Limbajul fiind mic implic i dezavantaje: din moment ce limbajul nu face totul pentruprogramator,acestatrebuieslucrezemaimult.(Acestaspectesteprivitde muli ca i un avantaj: tot ceea ce limbajul nu face pentru programator, nu este impus,lsndlibertateaprogramatoruluideafaceacellucruaacumvrea.) Cesteadeseadenumitlimbajdeasamblaredenivelnalt.Uniiconsideraceastao insult, dar este un aspect intenionat i important al limbajului. Construciile simple, exprimate n C, nu se extind n construcii de nivel main costisitoare (n timp sau spaiu), n momentul cnd programul este compilat. Dac scriem un 19

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

programsimpluisuccint,efoarteprobabilcvarezultaunprogramexecutabiln limbaj main foarte eficient. Dac observai c programul executabil obinut nu este eficient, motivul este probabil modul de realizare al programului i nu compilatorul care ar fi fcut ceva, fr tirea programatorului, asupra cruia nu avemcontrol. Un limbaj de programare este o unealt, i nici o unealt nu poate realiza orice sarcin fr un ajutor. Limbajul C nu are toate trsturile necesare de care avem nevoie n programele noastre. Limbajul C impune un set mic de reguli programatorilor. Unele sarcini obinuite, cum ar fi manipularea irurilor, alocarea memorieiirealizareaoperailordeintrareiieire,suntexecutateprinapelulunor funcii de bibliotec. Alte sarcini de care am avea nevoie n programe cum ar fi: crearea de directoare, listarea coninutului acestora, interaciunea cu mouseul, afiareaferestreloretc.,nusuntdefinitedelimbajulC.Acesteoperaiibinenelesc potfifcutedintrunprogramC,darntrunmodspecificmediuluideprogramare pe care l folosim (mediu pentru dezvoltarea de aplicaii, compilator, procesor, sistemdeoperare),modcenuestedefinitdestandardulC. UnaltaspectallimbajuluiCcaretrebuiepunctataiciestecacestlimbajesteunul periculos, n sensul c limbajul nu ofer programatorului modaliti de protecie mpotriva erorilor. Dac scriei un program care face (din cauza unei greeli) cu totulaltcevadectaiintenionat(deexemplutergereadatelordepedisc),idac compilatorulpoatecompilaacelprogram,nuveipriminiciunmesajdeavertizare de genul: Vrei ntradevr s facei asta? sau Suntei sigur c vrei s facei asta?.Cesteadeseacomparatcuuncuitfoartebineascuit:sepoaterezolvacuel oproblemcupreciziechirurgical,darnacelaitimpvputeitiacueldegetulcu oprecizie chirurgical. Programatoruleste celcare trebuie sutilizezelimbajulcu grij.

20

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

3. TraducereaiexecuiaprogramelorUnlimbajdeprogramareesteuninstrumentcucaresepoateexprimaunprocesde calcul,rezultndceeacenumimprogramsursnlimbajuldeprogramarerespectiv. Programul surs reprezint nivelul virtual al abstractizrii problemei de rezolvat. Pentru ca maina (calculatorul) s poat rezolva problema, aceasta trebuie exprimatntermeniilimbajuluimainiirespective,adictrebuieatinsnivelulfizic alabstractizrii,nivelcevafiatinsprinintermediulunuiprocesdetraducere. Rezolvareauneiproblemecucalculatorulparcurgedoumarifaze: formalizarea problemei i exprimarea ei ntrun limbaj de programare. n termeniicicluluideviaaprogramuluirezultat,aicisuntcuprinseetapelede definire, specificare, analiz, proiectare i implementare. Rezultatul obinut esteprogramulsurs.naceastfazrolulfactoruluiumanestehotrtor. traducereaprogramuluisursrezultatdinetapaprecedentntrunprogram executabil pe calculator i execuia acestuia. Aceast faz este mult mai automatizat dect prima, recurgnduse la programe de traducere din limbajuldeprogramarenlimbajulmain.

Specificarea sintaxei unui limbaj de programareLa definirea unui nou limbaj de programare primele aspecte care se discut sunt cele exterioare ale acestuia, aspectele ce in de sintaxa limbajului. n continuare vom discuta despre setul de caractere al unui limbaj, despre modalitile de descriere a lexicului i sintaxei i despre modul n care se realizeaz analiza sintacticisemanticatextuluiunuiprogramscrisntrunlimbajoarecare. Descriereasintaxei isemanticiiunuiLP ovom face ntrun cadrumai largfcnd referirilafazeleprocesuluidetraducerealimbajului. Setuldecaractere Fiecare limbaj de programare este bazat pe un anumit alfabet de caractere. Alfabetul fiecrui limbaj este folosit pentru a construi cuvinte sau simboluri, care formeaz vocabularul sau lexicul limbajului. Majoritatea limbajelor de programare ausetuldecaractereformatdin:literelealfabetuluienglez(dealaz26delitere), cifrelearabe(09),caracterespeciale,acrorsemnificaieestelegatmaimultsau maipuinderolullorndefiniialimbajului. SeturiledecaracteremaicunoscuteifolositelaoraactualsuntASCII,ASCIIextins, EBCDIC, Unicode. O caracteristic important a oricrui alfabet este posibilitatea ordonriicaractereloracestuia. Elementelelexicalealeunuilimbaj Un program este format din atomi lexicali (tokens) i separatori. Un atom lexical esteceamaimicunitatesintacticceareunnelesdesinestttorntruncontext precizat.Analizalexicalesteaceafazaprocesuluideanalizaunuiprogramsurs 21

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

care are ca scop identificarea atomilor lexicali din care este compus programul respectiv. Exist urmtoarele categorii de tokeni: simboluri speciale, identificatori, etichete, literali. Doi tokeni succesivi trebuie separai de unul sau mai muli separatori. De obicei separatoriinusuntconsideraitokeni,cutoateceipotfacepartedinconstituenii unuiliteral. Deexempluinstruciunea: if(a>b)x=x+1elsey="Hello!"; conineurmtoriiatomilexicali: identificatori:if,a,b,x,else,y simbolurispeciale:(,),>,=,+ literali:1,"Hello!" Att atomii lexicali ct i separatorii se construiesc din caracterele coninute n alfabetullimbajului. Exist dou categorii de separatori: separatorii uzuali, comentariile. Ambele categoriisuntignoratenprocesuldeanalizlexical. Separatoriiuzualiservesclaseparareaadoitokeniconsecutivi,fiindnumiinunele limbaje spaiu alb (white space); n aceast categorie intr caracterele spaiu, tab, linienou. Comentariilenuausemnificaiepentruprocesuldecalculspecificatnprogram;ele servescnumailaobunnelegereatextuluisursdectrecelcarelcitete.Exist dou maniere de comentare a unui program: linie i text. n limbajul C, C++, C# comentariulliniencepecucombinaiadecaractere//,iarcomentariultextncepe cucombinaia/*isetermincu*/. Identificatori,cuvintecheieirezervate Un identificator este o secven arbitrar de litere i cifre din alfabetul limbajului, dincareprimulcaracterestelitersausemnuldesubliniere.Numruldecaractere din secven poart numele de lungime a identificatorului. Unele limbaje stabilesc limite superioare ale acestei lungimi altele las pe seama implementrii aceste restricii. Suntlimbajecarefacdistincientreliterelemariimici(suntcasesensitive):C,C++, Java iar altele care nu fac aceast distincie: Pascal, Modula2, FOTRAN. n C cuvintelerezervatesescriunumaiculiteremici(if,else,while,foretc.) Existdoucategoriideidentificatori: Predefinii: sunt precizai n definiia limbajului i ei se pot mpri n dou categorii: cuvinte cheie i cuvinte rezervate. Cuvintele cheie au un neles explicit ntrun context precizat. De ex. cuvintele DO, IF, CONTINUE au o semnificaie foarte clar cnd sunt folosite ntrun text surs FOTRAN, semnificaialorrezultnddincontextulncareapar.Elepotfifolositensi 22

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

canumedevariabil,frniciunfelderestricie.naltelimbajecumesteC acest lucru nu este posibil. Evident, c o astfel de situaie nu este indicat pentrucpoateducelaconfuziiingreuneaznelegereaprogramului.Spre deosebiredecuvintelecheie,esteinterzisfolosireacuvintelor rezervaten alt scop dect acela pentru careele sunt definite.ntabelul de mai josdm toatecuvintelecheiedinlimbajulC.Avantajeleutilizriicuvintelorrezervate sunt: programul devine mai uor de neles prin utilizarea lor, se mrete viteza de compilare (la cutarea n tabela de simboluri, simplificnduse analiza lexical, sintactic i semantic), este uurat depistarea erorilor. Dacnumrulde cuvinterezervatealunuilimbajestemare,atunci el nui maipstreazproprietilebenefice,devenindunbalast.Existenacuvintelor rezervate nu d un certificat de calitate unui limbaj. n universul de azi al limbajelordeprogramare,aceastmprirencuvintecheie/rezervatein identificatori/cuvinte(cheiesaurezervate)esterelativ. Definiideutilizator:suntidentificatoricreaideutilizatorpentruafifolosii ca nume de variabile, constante, proceduri, funcii, clase, obiecte, tipuri de datedefinitedeutilizator,metode,proprieti,evenimente,delegaietc. auto break case enum char const continue default do for signed goto sizeof if static

double else int struct long

extern float

register return short

switch typedef union

unsigned void

volatile while

CuvintelecheieC Simbolurispeciale Lafelcaicuvintelerezervate,simbolurilespeciale(numiteuneoriioperatorisau semne de punctuaie, delimitatori) au o semantic bineprecizat. n unele limbaje elesepotfolosidoarconformdefiniieilor,naltelesemanticasepoateextinde,prin ceeacesenumetesuprancrcareaoperatorilor. SimbolurilespecialenCsunt: Operatorisausemnedepunctuaie:!%^&*()+={}|~[]\;:?,./ Operatori(fiecareconsideratunsingurtoken):>++===!=&& ||*=/=%=+===&=^=|= Tokenifolosiidepreprocesor:# Literali Prin literal vom nelege o valoare constant de tip numeric sau caracter. Literalii, numiidemulteoriiconstantesepotmprin: Constantenumerice(ntregiireale) 23

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

Constantecaracter Constanteirdecaractere Trebuie fcut distincie ntre conceptul de constant (n sensul de literal) i constantsimbolic.Deasemeneatrebuiefcutdistincientretermenuldeliterali celdeidentificator.Termenulconsacratdeliteralpentruvalorileconstantearputea proveni de la adlitteram, adic are semnificaia unei valori precizate explicit. O definiie mai elaborat afirm c literalii exprim valori constante ale tipurilor de baz(numericeicaracter). Vom prezenta n continuare categoriile de literali din limbajul C (folosim notaia BNF). Literal::=constantntreag|constantcaracter|constantflotant|literalirde caractere Constantntreag:esteformatdiniruridecifre.Suntrecunoscutetreiconvenii de reprezentare: zecimal (dac nu ncepe cu 0), octal (dac ncepe cu 0) i hexazecimal (dac ncepe cu 0x sau 0X). Tipul constantelor ntregi depinde de forma,valoareaisufixulacestora(i,I,u,U). Constant caracter: este format din unul sau mai multe caractere incluse ntre apostroafe. Pentru un caracter, tipul constantei este char, iar valoarea lui este valoarea codului ASCII al caracterului; dac sunt mai multe caractere, tipul constanteiesteint,iarvaloareaacesteiadepindedeimplementare.Existconstante caracter predefinite, care se precizeaz cu ajutorul unor secvene escape (secvene deevitareprecedatedecaracterulbackslash\): CaracterASCII secvenaescape NLnewline \n HTtaborizontal \t VTtabvertical \v BSbcackspace \b CRcarriagereturn \r FFformfeed \f BELbell \a \ \\ ? \? \ nr.octal \ooo nr.hexa \xhhh Constantele reale: sunt compuse din: parte ntreag, marc zecimal, parte fracionar, marc exponent (e sau E) i exponent ntreg cu semn. Tipul lor este implicitdouble,carepoatefimodificatprintrunsufix(Fsauffloat,Lsaullong double).Parteantreagsauparteafracionarpotlipsi(darnuambele),lafelpot lipsiimarcazecimalsaumarcaexponenial(nuambele). 24

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

Constanteleirdecaractere:suntformatedintrunulsaumaimultecaractereincluse ntre ghilimele. Tipul lor este char[] i au clasa de memorie static. Reprezentarea unuiirdecaracteresefacepen+1octei,ultimuloctetconinndcaracterulNULL (cu codul ASCII 0). Constantele ir de caractere se mai numesc nullterminated strings. Sintaxaunuilimbajdeprogramare La fel ca n orice limb, i n limbajele de programare, succesiunile de cuvinte formeaz propoziii sau instruciuni. Prin sintaxa unui limbaj de programare se nelegeunansambludereguliprincaresedetermindacoanumitinstruciune estecorectalctuitsaunu. Conceptuldesintaxaparesubdouforme: Sintax abstract: identific rolul componentelor fiecrei construcii; descrierile de limbaj i implementrile sunt organizate n jurul sintaxei abstracte. Sintaxa concret (lexical): prezint modul de scriere a construciilor limbajului,coninnddetaliirelativlaplasareacuvintelorcheieiasemnelor depunctuaie. Spreexemplu,aceeaisintaxabstractstlabazasecveneideprogram: WHILExA[i]DO i:=i1 END ScrisnModula2,precumiaurmtoareisecveneC: while(x!=A[i])i=i1; Existdiversemoduriprincaresepoatedescriesintaxaunuilimbajdeprogramare: BNF,grafeledesintax,gramaticiiautomateetc. BNF (BackusNaur Form = notaia BackusNaur) a aprut n 1963 n cadrul raportuluiALGOL60. nraportulALGOL60instruciuneaforeradefinitnfelulurmtor: ::=|| ::=for:=do ::=|, ::=| step until| 25

UniversitateadinOradea,Facultateadetiine, DepartamentuldeMatematiciInformatic SuportdecurspentrudisciplinaProgramareprocedural Specializrile:InformaticiMatematicanulI,semestrulILectoruniv.HoreaOros

while Simbolurile , |, :: fac parte din mecanismul de descriere a limbajului, ele fiind numitemetasimboluri.Simbolul::=nseamnsedefineteastfel.Cuvintelefor,do, step,until,while,precumi caracterele{, :=,:,},careapar nproducii,senumesc simboluriterminale,pecnd,suntsimbolurineterminale.n orice producie, la stnga metasimbolului ::= apare un neterminal, iar definiia acestuiaesteolistdeneterminale,terminaleimetasimboluri. Conformprimeiproducii,instruciuneafor aredoudefiniii alternative,separate prin |. Aceast producie utilizeaz ideea definirii recursive n a doua alternativ, deoarece este definit prin ea nsi. nelesul definiiei este c o instruciune for poate s nu aib etichet sau poate s aib un umr variabil de etichete,fiecareterminatprin:(doupuncte). Neterminalul este definit astfel: ncepe cu simbolul terminal for, care este cuvnt rezervat n ALGOL 60, urmat de o , :=, o i cuvntul rezervat do. Definiia neterminalului utilizeaz de asemenea recursivitatea(recursivitatelastnga),cuefectulcopoateconinede mai multe ori neterminalul , folosind virgula ca separator. Ultimaproducieexpliciteaztreimoduridealctuireaelementelorlisteifor. Dea lungul timpului notaia BNF a suferit unele adugiri ajungnduse la ora actuallautilizareauneiaanumitenotaiiBNFextinse. Noileregulialeacesteinotaiisunt: Toate unitile sintactice ale limbajului sunt cuprinse ntre ghilimele; de exemplu,"


Recommended