Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Definizione formale di un linguaggio
A AND OR C) AND B) OR AND C)(B = (A (AA OR AND C) OR B) AND OR C)(B = (A (AL’elemento per l’OR è lo 0 e per l’AND l’1, mentre l’elemento perneutro assorbentel’OR è l’1 e per l’AND lo 0. Per quanto riguarda la le operazioni vanno svolteprecedenza,nell’ordine e infineNOT, AND OR. 19Capitolo 5Linguaggi di programmazione5.1 Definizione formale di un linguaggioAlla base di tutta l’informatica vi è il concetto di un insieme particolare di frasilinguaggio,formate dai simboli di un alfabeto definito. Ovviamente, nel creare un linguaggio, ci si ponesubito dinnanzi al problema di definire le e iparole chiave meccanismi di combinazionedelle stesse.Un modo per generare in maniera precisa le frasi di un linguaggio è quello di introdurre uninsieme di regole, tramite un per comporre simboli appartenenti adformalismo matematico,un finito prefissato, l’alfabeto. Definendo l’alfabeto V come
L'insieme dei simboli con cui si costruiscono le frasi e l'universo linguistico V* di un alfabeto V, come l'insieme di tutte le frasi di elementi di V, un linguaggio L su un alfabeto V non è altro che un sottoinsieme di V*. Per specificare poi il sottoinsieme di V* che definisce il linguaggio, si usa una grammatica, una notazione matematica che consente di esprimere in modo rigoroso la sintassi formale, ossia l'insieme di regole formali mediante le quali si costruiscono delle frasi.
Usando il formalismo matematico, una grammatica formale G è definita dalla quadrupla <VN, VT, S, P>, dove:
- VN è l'insieme dei simboli non terminali,
- VT è l'insieme dei simboli terminali,
- VN e VT sono insiemi disgiunti e la loro unione è l'alfabeto V,
- S è un particolare simbolo non terminale detto simbolo di partenza della grammatica,
- P è l'insieme delle produzioni o regole di derivazione che definiscono come costruire le frasi del linguaggio.
possono cioè apparire 0 o 1 volta, sono racchiusi tra le parentesiquadre [ ].
- Gli elementi ripetitivi (zero o più volte) sono racchiusi tra le parentesi graffe { }.
- I simboli terminali di un solo carattere sono racchiusi tra doppi apici " " per distringuerlidai meta-simboli.
Capitolo 6
Il Linguaggio CÈ un linguaggio di programmazione costituito a sua volta da un linguaggio di computazione,che comprende le regole sintattiche e semantiche e un set di che fornisconolibrerie standard,gli strumenti per rappresentare dati e comunicare con la memoria. Nasce come evoluzionedi due linguaggi precedenti, e per opera di Questo linguaggio èBCPL B Dennis Ritchie.largamente usato per sviluppare comesistemi che richiedono prestazioni elevate, sistemiooperativi, sistemi embedded sistemi di telecomunicazioni.La sua rapida espansione ha portato a molte variazioni simili tra loro ma spesso incom-motivo per cui, nel fu creato il con l’obiettivopatibili,
1983, comitato tecnico X3J11,di fornire una non ambigua e indipendente dalla macchina. Neldefinizione del linguaggioquindi, venne standardizzato tramite l’ANSI (American1989, National Standards Institute)prima, e l’ISO (International poi. Questo standard, chiamato sem-Standards Organization)plicemente venne aggiornato nel (C99), nel (C11) e nelLinguaggio C standard, 1999 2011(C18) che è attualmente la sua ultima versione.2018È un linguaggio e Inoltre, a differenzasequenziale, imperativo strutturato a blocchi.dell’Assembler ad esempio, è un linguaggio indipendente cioè dalla macchina sulportabile,quale viene eseguito. Illustreremo di seguito i concetti fondamentali del Linguaggio C.6.1 Dati
Divisi in e I primi comprendono ilprimitivi derivati. dominio dei numeri naturali e(e, con qualche approssimazione, anche dei reali) e il dominio dei Questiinteri caratteri.dati sono divisi a loro volta in al fine di un insieme ditipi esprimere in modosinteticovalori e operazioni e di sulla correttezza del programma. Ieffettuare controlli statici tipie relatividi dati primitivi sono modifi-void, char, int, enum, float, doubleVi sono poi tipi di daticatori di tipo derivati daishort, long, signed, unsigned.(puntatore).fondamentali, array, struct, union, *Nota che il tipo di dato introdotto nella sezione sull’algebra booleana (4.6.1),boolean, Vengono infatti usati gli nei quali indicanon fa parte dei tipi primitivi in C. interi, 0e indica Per non generare confusione, comunque, è buonaFALSO ogni altro valore VERO.norma usare unicamente per1 VERO.Il di alcuni tipi considerato, motivo per cui,numero di byte dipende dal compilatorenel caso in cui si presentasse la necessità di riferirsi al numero di byte di un dato all’interno delcodice, è consigliato utilizzare l’operatore Sono però sempre vere le seguentiunario sizeof.relazioni:
- sizeof(signed) = sizeof(unsigned).
- ≤ ≤
≤sizeof(char) sizeof(short int) sizeof(int) sizeof(long int).22• ≤ ≤sizeof(float) sizeof(double) sizeof(long double).Tra i vi sono anche le una de-tipi di dati derivati stringhe, collezione di caratterilimitata da virgolette (ad esempio, è una stringa). In C sono semplici sequenze di"ciao"caratteri di cui l’ultimo, sempre presente è \0. Riprendendo l’esempio diin modo implicitoprima, "ciao"={’c’,’i’,’a’,’o’,\0}.Il linguaggio C è inoltre basato sulle delle notazioni cheespressioni, denotano un valoremediante un processo di Esse possono essere p (tramitevalutazione. semplici composteaggregazione di più espressioni). Le espressioni semplici, o elementari, sono costanti, simbolio che, legate tra loro mediante degli formanodi variabile simboli di funzione operatori,espressioni complesse. Gli operatori possono essere classificati in base al o altipo numerodegli operandi.
Nel primo caso parleremo ad esempio di operatori aritmetici, relazionali, o nel secondo dilogici condizionali, operatori unari, binari, ternari. Gli operatori che richiedono più attenzione sono sicuramente quelli (and, or, not). Come detto, non esistendo il tipo in C, la valutazione degli operatori logici avviene mediante gli interi. Nota che in C la valutazione degli operatori logici avviene in corto-circuito; ciò vuol dire che il secondo operando viene valutato solo se necessario. Ad esempio, nell'espressione 22 || x, x non viene minimamente valutata se 22 è vero, la || viene già vera in partenza. Parliamo ora di espressioni condizionali, introdotte dall'operatore ternario. La sintassi è: condizione ? espr1 : espr2. Tale espressione denota il valore denotato da espr1 se condizione è vera, altrimenti denota il valore denotato da espr2. Vi sono poi le espressioni concatenate, introdotte dall'operatore ,.Concatenazione
Vengono valutate tutte le singole espressioni da sinistra a destra: espr1, espr2, ..., esprN. Viene denotato il valore di esprN.
Nelle espressioni composte vi sono tre possibili scelte per posizionare l'operatore rispetto ai suoi operandi:
- + 3 4: Notazione prefissa
- 3 4 +: Notazione postfissa
- (adottata nel C): 3 + 4: Notazione infissa
Nei primi due casi non vi sono problemi di priorità o associatività, mentre nella notazione infissa sono necessarie regole di priorità e associatività per identificare univocamente quale operatore sia applicato a quali operandi. Le regole di priorità, come suggerisce il nome, specificano l'ordine di valutazione degli operatori quando in una espressione compaiono operatori infissi diversi, mentre le regole di associatività specificano l'ordine di valutazione degli operatori quando in una espressione compaiono operatori infissi di uguale priorità.
Esse
Possono essere alterate mediante l'uso di il cui impiego è sempre consigliato per parentesi, evitare confusione. Nota che tali regole definiscono l'ordine di valutazione delle operazioni, Ad esempio, le espressioni "(3+f(x)) non l'ordine in cui procurarsi gli operandi. +e "3 possono essere entrambe valutate calcolando prima g(y)" + (f(x) + g(y))" f(x)e poi o in quanto in C viceversa, non è precisata la regola di valutazione degli(y) In questo caso, l'unico modo per imporre un ordine specifico, è operandi. serializzare le Nell'esempio di prima, dunque, dovremmo scrivere e operazioni. z1 = f(x), z2 = g(y) in modo da valutare prima e poi (3+z1)+z2, z1 z2.
6.2 Variabili e funzioni Le o sono parte integrante del linguaggio C. La struttura di funzioni, unità di traduzione, un programma C, infatti, è definita dalla seguente produzione: 23<programma>
tutti i tag html sono stati rimossi dal testo fornito.