Anteprima
Vedrai una selezione di 14 pagine su 65
Elementi di Informatica Pag. 1 Elementi di Informatica Pag. 2
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 6
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 11
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 16
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 21
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 26
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 31
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 36
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 41
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 46
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 51
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 56
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Elementi di Informatica Pag. 61
1 su 65
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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.
l'insieme finito di o regole di riscrittura V. Molto spesso → ∈α β / α, βP produzioni si scrive anche ("è definito come") α ::= β 5.1.1 Backus-Naur form Backus e Naur hanno introdotto un formalismo molto espressivo, detto per notazione BNF, per descrivere la grammatica di un linguaggio di programmazione. Si tratta di un metalinguaggio, ovvero un linguaggio usato per parlare di un altro linguaggio, basato sulle seguenti convenzioni: - Il simbolo ::= indica le produzioni e significa "è definito come". - I simboli non terminali, le categorie sintattiche, sono sempre racchiusi tra le parentesi angolari < >. - Per semplificare la scrittura di più produzioni per lo stesso simbolo non-terminale si introduce il meta-simbolo | per indicare un'alternativa. Altri autori hanno poi introdotto alcune estensioni della BNF (EBNF, Extended BNF), per facilitarne l'uso: - Gli elementi opzionali, che

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 modo

sinteticovalori 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.
Dettagli
Publisher
A.A. 2022-2023
65 pagine
1 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher maurocos19 di informazioni apprese con la frequenza delle lezioni di Elementi di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università Politecnica delle Marche - Ancona o del prof Riggio Roberto.