Lingue e grammatiche formali. Software e supporto matematico Esempi di linguaggi di programmazione formalizzati

Linguaggio di programmazione- un linguaggio artificiale (formale) progettato per scrivere programmi per l'esecutore (ad esempio un computer o una macchina a controllo numerico). Il linguaggio di programmazione è definito dalla sua descrizione. Una descrizione del linguaggio di programmazione è un documento che specifica le capacità di un linguaggio algoritmico. Di solito la descrizione contiene:

· Alfabeto di simboli accettabili e parole di servizio (chiave);

· Regole sintattiche per costruire costruzioni linguistiche ammissibili dall'alfabeto;

· Semantica che spiega il significato e lo scopo delle costruzioni linguistiche.

I linguaggi di programmazione vengono utilizzati per rappresentare la soluzione dei problemi in una forma tale da poter essere eseguiti su un computer.

Un linguaggio macchina, che consiste di istruzioni del processore del computer, è anche un linguaggio di programmazione. Ma gli algoritmi scritti in un linguaggio macchina sono difficili da leggere anche per un programmatore-sviluppatore, inoltre, lavorare con un tale linguaggio richiede la conoscenza dell'architettura di un particolare computer, pertanto la programmazione viene solitamente utilizzata in linguaggi di livello superiore rispetto ai linguaggi macchina. Linguaggio di alto livelloè un linguaggio di programmazione, i cui concetti e la cui struttura sono convenienti per la percezione umana e non dipendono dal computer specifico su cui verrà eseguito il programma.

Affinché un programma scritto in un linguaggio di programmazione di alto livello possa essere eseguito su un computer, deve essere tradotto in un linguaggio macchina. Lo strumento software che esegue questa funzione è chiamato traduttore.

Traduttoreè un programma che legge il testo di un programma scritto in una lingua e lo traduce (traduce) in un testo equivalente in un'altra lingua (solitamente linguaggio macchina). Esistono due tipi principali di traduttori: compilatori e interpreti.

compilatore converte il testo del programma sorgente in una serie di istruzioni per un determinato tipo di processore (codice macchina) e quindi lo scrive in un file eseguibile (file exe), che può essere avviato per l'esecuzione come programma separato. In altre parole, il compilatore traduce il programma da un linguaggio di alto livello a un linguaggio di basso livello.

Interprete a seguito della traduzione, esegue le operazioni specificate nel programma originale. In questo caso, il programma rimane nella lingua originale e non può essere avviato per l'esecuzione senza un interprete.

La divisione in linguaggi compilati e interpretati è alquanto arbitraria. Quindi, per qualsiasi linguaggio compilato tradizionalmente, come Pascal, puoi scrivere un interprete e per qualsiasi linguaggio interpretato, puoi creare un compilatore - ad esempio, il linguaggio BASIC, originariamente interpretato, può essere compilato senza alcuna restrizione.

Alcuni linguaggi, come Java e C#, rientrano tra i linguaggi compilati e quelli interpretati. Vale a dire, il programma non è compilato in linguaggio macchina, ma in codice di basso livello indipendente dalla macchina, bytecode. Successivamente, il bytecode viene eseguito dalla macchina virtuale. L'interpretazione viene solitamente utilizzata per eseguire il bytecode. Questo approccio, in un certo senso, consente di sfruttare i vantaggi sia degli interpreti che dei compilatori.

Dalla creazione delle prime macchine programmabili, l'umanità ha già inventato più di duemilacinquecento linguaggi di programmazione. Il numero di linguaggi di programmazione è in costante crescita, sebbene questo processo sia chiaramente rallentato. Alcune lingue sono utilizzate solo da un numero limitato di programmatori, altre sono note a milioni di persone. Alcuni di essi sono altamente specializzati (progettati per risolvere una certa classe di problemi) e alcuni sono universali. I programmatori professionisti a volte utilizzano più di una dozzina di linguaggi di programmazione diversi nel loro lavoro.

La classificazione dei linguaggi di programmazione può essere effettuata secondo diversi criteri: orientati alla macchina (assemblatori) e indipendenti dalla macchina, specializzati e universali.

Le lingue specializzate includono la lingua di ART ( UN automaticamente P programmato T ool) è il primo linguaggio di programmazione specializzato per macchine utensili a controllo numerico. Il linguaggio è stato sviluppato da un gruppo di specialisti americani nel 1956-1959. sotto la guida del matematico Douglas T. Ross. Il linguaggio COBOL ( Co mmon B utilità– oh riente l lingua), creato negli Stati Uniti sotto la guida di Grace Murray Hopper nel 1959, è incentrato sul trattamento dell'informazione economica. La matematica Grace Murray Hopper guidò il progetto di sviluppo COBOL con il grado di Capitano di Secondo Grado, e in seguito divenne Contrammiraglio. GM Hopper è chiamata la “mamma e la nonna” di SOBOL.


(Grace Murray Hopper)

I linguaggi specializzati includono i moderni linguaggi di programmazione web Perl e PHP. Le lingue Rapier, E-language (Russia), SMR (Gran Bretagna), LOGO (USA) possono essere classificate come lingue destinate all'insegnamento della programmazione.

I linguaggi di programmazione universali più comuni oggi sono C++, Delphi, Java, Pascal, Visual Basic, Python.

Ma, considerando i linguaggi di programmazione come un oggetto di ricerca indipendente, è possibile classificarli secondo il concetto di costruzione di un linguaggio.

Classificazione dei linguaggi di programmazione

I linguaggi di programmazione possono essere suddivisi in due classi: procedurali e non procedurali. Procedurale (imperativo) le lingue sono lingue di tipo operatore. La descrizione dell'algoritmo in questo linguaggio ha la forma di una sequenza di operatori. Una caratteristica di un linguaggio procedurale è la presenza di un operatore di assegnazione (Basic, Pascal, C). Un programma scritto in un linguaggio imperativo è molto simile agli ordini imperativi nei linguaggi naturali, cioè è una sequenza di comandi che un computer deve eseguire. Quando si programma in uno stile imperativo, il programmatore deve spiegare al computer come devi risolvere il problema.

Non procedurale (dichiarativo) le lingue sono lingue, quando usate nel programma si indica esplicitamente quali proprietà dovrebbe avere il risultato, ma non si dice in che modo dovrebbe essere ottenuto. I linguaggi non procedurali si dividono in due gruppi: funzionali e logici.

I linguaggi di programmazione dichiarativi sono linguaggi di programmazione di alto livello in cui gli operatori sono dichiarazioni o istruzioni in logica simbolica. I linguaggi di programmazione logica (linguaggi basati su un sistema di regole e fatti) sono un tipico esempio di tali linguaggi. Una caratteristica delle lingue dichiarative è la loro semantica dichiarativa. Il concetto di base della semantica dichiarativa è che il significato di ciascun operatore è indipendente da come tale operatore viene utilizzato nel programma. La semantica dichiarativa è molto più semplice della semantica dei linguaggi imperativi, che può essere considerata un vantaggio dei linguaggi dichiarativi rispetto a quelli imperativi.

linguaggi logici

Nei programmi scritti in linguaggi di programmazione logici, le azioni corrispondenti vengono eseguite solo se esiste una condizione permissiva necessaria per la derivazione di nuovi fatti da questi fatti secondo le regole logiche specificate. La programmazione logica si basa sulla logica matematica (vedi “ Operazioni logiche. quantificatori”, “Espressioni booleane”).

Il primo linguaggio di programmazione logica è stato il linguaggio Planner, sviluppato da Carl Hewitt presso l'Artificial Intelligence Laboratory del Massachusetts Institute of Technology nel 1969. In questo linguaggio, la capacità di derivare (ottenere) automaticamente un risultato da dati e regole date da l'enumerazione delle opzioni (la cui combinazione era chiamata piano) è stata posta ... Ma il linguaggio di programmazione logica più famoso è Prolog, creato in Francia all'Università di Marsiglia nel 1971 da Alain Colmerauer.

Alain Colmero
(Alain Colmerauer)

Il programma PROLOGO contiene due componenti: fatti e regole. I fatti sono i dati con cui opera il programma, e la totalità dei fatti costituisce il database PROLOGUE, che è, appunto, un database relazionale. L'operazione principale eseguita sui dati è un'operazione di corrispondenza, chiamata anche operazione di unificazione o riconciliazione. Le regole sono composte da un titolo e da sotto-obiettivi. L'esecuzione di un programma scritto in PROLOGO inizia con una richiesta e consiste nel provare la veridicità di un'affermazione logica all'interno di un dato insieme di fatti e regole. L'algoritmo di questa dimostrazione (algoritmo di inferenza) determina i principi di esecuzione del programma scritto in PROLOGO.

A differenza dei programmi scritti in linguaggi procedurali, che prescrivono la sequenza di passaggi che un computer deve eseguire per risolvere un problema, in PROLOGUE il programmatore descrive fatti, regole, relazioni tra di loro, e anche richieste sul problema. Ad esempio, supponiamo di avere i seguenti fatti su chi è la madre di chi:

mamma ("Dasha", "Masha").

mamma ("Natasha", "Dasha").

Inoltre, c'è una regola che introduce la relazione nonna:

nonna (X, Y): -

Ora possiamo fare domande su chi è la nonna di questa o quella persona, o chi è la nipote (nipote) di una determinata donna:

nonna (Natasha, X).

Il sistema PROLOG darà la risposta a questa richiesta come segue:

Le possibilità di utilizzo del linguaggio PROLOGO sono molto ampie. Tra le più famose ci sono le applicazioni nella matematica simbolica, nella pianificazione, nella progettazione assistita da computer, nella costruzione di compilatori, nei database e nell'elaborazione del linguaggio naturale. Ma, forse, l'applicazione più tipica del PROLOGO sono i sistemi esperti.

Oggi c'è un'intera classe di linguaggi logici; quindi, anche i linguaggi di programmazione logica QA-4, Popler, Conniver e QLISP hanno avuto origine dal linguaggio Planner. I linguaggi di programmazione Mercury, Visual Prolog, Oz e Fril discendono dal linguaggio Prolog.

Linguaggi funzionali

Il primo linguaggio di tipo funzionale è il linguaggio LISP, creato al Massachusetts Institute of Technology nel 1956-1959. John McCarthy, che nel 1956 alla Dartmouth Conference (USA) propose per primo il termine “intelligenza artificiale”.

John McCarthy

E sebbene la controversia attorno a questo termine e la direzione scientifica sviluppata all'interno del suo quadro non si plachi ancora, i ricercatori sono unanimi nell'uso di linguaggi funzionali e logici per quest'area. Un numero significativo di lavori sull'intelligenza artificiale è stato implementato su LISP.

Dopo la sua comparsa, al LISP sono stati assegnati molti epiteti che riflettono le sue caratteristiche: linguaggio delle funzioni, linguaggio simbolico, linguaggio di elaborazione delle liste, linguaggio ricorsivo. Dal punto di vista della classificazione odierna, LISP è definito come un linguaggio di programmazione di tipo funzionale, che si basa sul metodo -calculation (il metodo -calculation è stato sviluppato negli anni '30 del secolo scorso da A. Cherch come modello matematico rigoroso per le funzioni calcolabili, cfr. "Teoria degli algoritmi").

Un programma scritto in un linguaggio funzionale è costituito da un insieme non ordinato di equazioni che definiscono funzioni e valori che sono definiti come funzioni di altri valori. I programmi e i dati LISP esistono sotto forma di espressioni simboliche, che vengono archiviate come strutture di elenco. Il LISP si occupa di due tipi di oggetti: atomi e liste... Gli atomi sono simboli utilizzati per identificare oggetti che possono essere numerici o simbolici (concetti, materiali, persone, ecc.). Una lista è una sequenza di zero o più elementi racchiusi tra parentesi, ognuno dei quali è un atomo o una lista. Sulle liste vengono eseguite tre operazioni primitive: recuperare il primo elemento della lista; ottenere il resto della lista dopo aver rimosso il primo elemento; concatenazione del primo elemento della lista L e del resto della lista Q.

Testi di programma solo in linguaggi di programmazione funzionali descrivere metodo per risolvere il problema, ma non prescrive una sequenza di azioni per risolverlo.

Di solito sono considerate le proprietà principali dei linguaggi di programmazione funzionale: brevità e semplicità; digitazione forte; modularità; funzioni - oggetti di calcolo; purezza (nessun effetto collaterale); calcolo differito (pigro).

Oltre a LISP, i linguaggi funzionali includono REFAL (sviluppato a metà degli anni '60 da V.F.Turchin alla Lomonosov Moscow State University), Haskell, Clean, ML, OCaml, F #.

Ecco un esempio di descrizione del noto algoritmo ordinamento veloce un elenco in Haskell:

qsort (x: xs) = qsort elts_lt_x ++ [x]

Qsort elts_greq_x dove

elts_lt_x =

elts_greq_x =

Qui dice che l'elenco vuoto è già ordinato. E ordinare un elenco non vuoto significa dividere l'elenco in tre: un elenco di elementi inferiore all'inizio dell'elenco originale, l'inizio dell'elenco originale ([x]) e un elenco di elementi nella coda dell'elenco elenco originale maggiore o uguale a x.

Linguaggi orientati agli oggetti

Linguaggi orientati agli oggetti sono linguaggi in cui i concetti di procedura e dati utilizzati nei sistemi di programmazione convenzionali sono stati sostituiti dal concetto di “oggetto” (si veda l'articolo “ Programmazione orientata agli oggetti"). SmallTalk è considerato un linguaggio di programmazione orientato agli oggetti nella sua forma più pura, le possibilità della programmazione orientata agli oggetti sono anche incorporate in Java, C ++, Delphi.

L'ulteriore sviluppo della programmazione moderna è associato alla cosiddetta "programmazione parallela". Per implementare questa tecnologia, sono in fase di sviluppo linguaggi specializzati orientati agli oggetti. Lingue di questo tipo includono, ad esempio, MC # ( mcsharp) è un linguaggio di programmazione orientato agli oggetti di alto livello per la piattaforma .NET che supporta la creazione di programmi che funzionano in un ambiente distribuito con chiamate asincrone.

La struttura del linguaggio di programmazione

Ci sono differenze fondamentali tra i linguaggi di programmazione esistenti nel concetto di linguaggi di costruzione, questo è particolarmente vero per i linguaggi precedenti, ma tutti questi linguaggi sono chiamati linguaggi di programmazione perché hanno la stessa struttura formale dal punto di vista del sistema costruttivo interno.

Qualsiasi linguaggio di programmazione è costituito da frasi (operatori). Le frasi (come le parole) sono definite su un certo alfabeto C. La sintassi della lingua descrive un insieme di frasi sull'alfabeto C, che esteriormente rappresentano programmi ben formati.

Sintassi lingua - queste sono le regole per ottenere parole e frasi di questa lingua. La sintassi è descritta schematicamente utilizzando alcune regole grammaticali.

Conoscenza del linguaggio formale (alfabeto + sintassi), anche se è sufficiente stabilire correttezza sintattica programma, ma non abbastanza per comprenderne lo scopo e il metodo di azione. Il significato e la modalità di azione di un programma in un linguaggio di programmazione sono specificati specificando la semantica.

La semantica di una lingua sono le regole per l'interpretazione delle parole in una lingua formale, ad es. stabilire il significato dei singoli elementi linguistici.

Per definire linguaggi formali, inclusi linguaggi di programmazione, vengono utilizzati BNF (Backus - Naur form) e diagrammi di sintassi. Questi sono due modi intercambiabili di descrivere.

Quando si descrive un linguaggio di programmazione tramite BNF, vengono utilizzate le seguenti designazioni:

1) <..>- la parola in via di definizione;

2) R è una regola della sintassi per formare una parola;

3) :: = - Regola BNF.

Ogni R consiste di parole terminali o gettoni lingua ed eventualmente i seguenti caratteri:

· [..] - questo elemento è presente nel BNF;

· (..) - questa voce può essere utilizzata in BNF;

· (..) * - questa voce può essere utilizzata in BNF un numero finito di volte.

Esempio 1. Ecco un esempio di una regola BNF che definisce un numero intero.

Questa regola è letta come segue: "Un numero intero è un carattere 0 o una sequenza di caratteri che può iniziare con un" - "carattere, seguito da una cifra diversa da zero, seguita da qualsiasi sequenza finale di cifre".

I diagrammi di sintassi rappresentano una forma speciale, simile al BNF, per descrivere i linguaggi formali. Esistono tre tipi di elementi utilizzati nei diagrammi di sintassi: ovale/cerchio, rettangolo, frecce. Le parole terminali o lessemi sono poste in ovali e le parole definite in rettangoli. La rappresentazione grafica del linguaggio attraverso diagrammi sintattici rende chiara la descrizione del linguaggio.

Esempio 2... Descrizione di un numero intero utilizzando un diagramma di sintassi.

Secondo il Model Program, è necessario che gli studenti rappresentino la moderna classificazione dei linguaggi di programmazione, nonché siano guidati negli ambiti di applicazione di ciascuno di essi. Il modo più semplice per presentare questo argomento è farlo dopo che si è già verificata una conoscenza dettagliata di uno dei linguaggi di programmazione.

Va detto perché compaiono nuovi linguaggi e migliorano quelli vecchi: prima di tutto, ciò accade quando si cerca un mezzo per scrivere rapidamente programmi complessi che, inoltre, non contenessero errori. C'è un esempio quando la creazione del linguaggio ADA (dal nome della prima programmatrice donna Ada Lovelace, figlia di Byron) è stata avviata nel 1974 presso il Dipartimento della Difesa degli Stati Uniti. Le forze armate statunitensi si sono rese conto che sprecavano molto tempo, sforzi e denaro nello sviluppo e nella manutenzione di sistemi informatici incorporati (come i sistemi di guida missilistica) e sottili errori del linguaggio di programmazione portano a veri disastri.

I linguaggi dichiarativi erano molto popolari tra la fine degli anni '80 e l'inizio degli anni '90 del secolo scorso, venivano chiamati linguaggi di programmazione dell'intelligenza artificiale per computer di quinta generazione. Tuttavia, le speranze per la loro ampia distribuzione non si sono ancora avverate. Forse perché i sistemi esistenti di programmazione funzionale e logica non consentono di creare programmi veloci per compiti significativi. È possibile che il loro momento semplicemente non sia ancora arrivato.

Scegliendo una strategia per insegnare l'argomento "Algoritmizzazione e programmazione", è necessario tenere conto del fatto che il compito di un corso di istruzione generale è in larga misura lo sviluppo di un certo stile di pensiero, la formazione delle abilità più generali, abilità e idee, piuttosto che lo sviluppo di determinati linguaggi specifici e mezzi tecnici di programmazione. Allo stesso tempo, un tale corso dovrebbe servire come base per ulteriori studi professionali sulla programmazione nella scuola superiore o nella scuola secondaria superiore (nell'ambito della formazione professionale).

Attualmente, ci sono due approcci più comuni all'insegnamento della programmazione:

1) insegnamento sulla base di un linguaggio appositamente sviluppato della lingua educativa, focalizzato sull'insegnamento delle abilità di programmazione di base;

2) lo studio di uno o più linguaggi di programmazione ampiamente utilizzati nella pratica nella risoluzione di problemi scientifici ed economici (tali linguaggi possono essere definiti standard).

Il primo approccio viene spesso utilizzato quando si insegnano le basi della programmazione nella scuola secondaria inferiore utilizzando linguaggi speciali, ad esempio Rapier, E-language, LOGO. Queste lingue tengono conto delle capacità degli studenti delle scuole elementari. Questo approccio è utile per lo studio approfondito dell'informatica nelle classi 5-6.

Per quanto riguarda il secondo approccio, possiamo dire che le implementazioni più moderne dei linguaggi standard sono caricate con molti dettagli tecnici e sono difficili da imparare. Tuttavia, il più accettabile per una scuola di istruzione generale, dove viene insegnato un corso di informatica nelle classi 8-11, è insegnare le basi teoriche della programmazione basata su un linguaggio standard. In questo caso, non è necessario andare nelle profondità della lingua. Gli studenti interessati possono farlo da soli. La massima attenzione dovrebbe essere rivolta al passaggio dalle strutture algoritmiche alla loro implementazione software in un linguaggio di programmazione.

Vale la pena notare qui che Pascal è stato originariamente creato come linguaggio di insegnamento, ma nel tempo si è diffuso come linguaggio standard e si è sviluppato come linguaggio orientato agli oggetti con la tecnologia di programmazione visiva di Delphi. Puoi prendere Pascal o Basic come base del corso nelle classi 8-9 e come corso esteso (opzionale) nelle classi 10-11 puoi familiarizzare gli studenti con le loro estensioni orientate agli oggetti (Delphi e Visual Basic). Ogni lingua ha i suoi sostenitori e avversari, e la scelta finale spetta all'insegnante.

Esistono due approcci principali per l'apprendimento di un linguaggio di programmazione: formale e "programmazione per esempio". Il primo si basa su una descrizione formale (rigorosa) dei costrutti del linguaggio di programmazione ( sintassi la lingua e il suo semantica) in un modo o nell'altro (utilizzando diagrammi sintattici, metalinguaggio o descrizione verbale formale, in particolare semantica) e utilizzando solo elementi studiati, e quindi comprensibili, del linguaggio nella risoluzione dei problemi. Nel secondo approccio, agli studenti vengono prima dati programmi già pronti, gli viene detto cosa stanno facendo esattamente e sono invitati a scrivere un programma simile o a modificare quello esistente senza spiegare completamente un numero di "tecnici" o insignificanti, dal punto di vista dell'insegnante di vista, dettagli per risolvere il problema. Allo stesso tempo, si dice che imparerai l'esatto significato delle strutture corrispondenti in seguito, ma per ora fai lo stesso. Il secondo approccio consente il cosiddetto "avvio rapido", ma crea il pericolo di ottenere utenti semianalfabeti dell'ambiente di programmazione, ad es. persone che usano costruzioni piuttosto complesse nella loro pratica, ma non possono spiegare chiaramente perché in questo o quel caso è necessario usarle e come funzionano. Di conseguenza, prima o poi tali "programmatori" affrontano errori che semplicemente non possono correggere: mancano di conoscenza.

Uno dei compiti dell'informatica scolastica è insegnare proprio l'approccio formale, in particolare, quando si applicano definizioni diverse. E lo studio formale del linguaggio di programmazione contribuisce molto a questo. Ma anche senza buoni esempi (campioni) quando si insegna la programmazione agli scolari è indispensabile. E più giovani sono gli studenti, più esempi devono essere forniti quando si descrive la lingua (a volte anche sostituendo la definizione rigorosa con loro). Un'altra cosa è che è necessario assicurarsi che, a seguito della discussione dell'esempio, tutti i suoi dettagli siano chiari agli scolari (è indispensabile spiegare come e perché funziona, anche basandosi sul materiale formale già studiato). In questo caso, gli studenti forti avranno l'opportunità di comprendere tutto a fondo e di poter utilizzare le conoscenze acquisite in futuro, mentre gli altri acquisiranno competenze specifiche e lasceranno a loro stessi l'opportunità di tornare, se necessario, a definizioni formali in un secondo momento.

A proposito di lingua ferroviaria "Il treno procederà sulla piattaforma Krasnye Zori senza fermarsi". Si noti che il conducente ha utilizzato il sostantivo "stop" e non il verbo "stop". Fermarsi è un concetto molto importante per i ferrovieri. Un treno può "fermarsi" ma non "fermarsi". Turchin [Tur-chin 2000], facendo un esempio simile, indica la formalizzazione del linguaggio utilizzato per ristretti scopi professionali.

Un linguaggio formalizzato può essere definito come segue [Turchin 2000]. Consideriamo un modello linguistico della realtà a due piani (Fig. 4.4). La situazione si è codificata dall'oggetto linguaggio Li. L'oggetto L1 è un nome per si. Qualche tempo dopo, la situazione S1 viene sostituita dalla situazione S2. Svolgendo un'attività linguistica, trasformiamo L1 in un altro oggetto - L2. Se il nostro modello è corretto, allora L2 è il nome S2. Di conseguenza, senza conoscere la situazione reale S2, possiamo farci un'idea decodificando l'oggetto linguaggio L2. L'esecuzione della trasformazione L1-> L2 determina se il linguaggio verrà formalizzato.

    Per un linguaggio formalizzato, la trasformazione L1-> L2 è determinata esclusivamente dagli oggetti linguistici Li che vi partecipano e non dipendono dalle rappresentazioni linguistiche si ad essi corrispondenti nella semantica del linguaggio.

    Per una lingua non formalizzata, il risultato della trasformazione dell'oggetto linguistico Li dipende non solo dalla forma della rappresentazione Li stessa, ma anche dalla rappresentazione si, che genera nella testa di una persona, dalle associazioni in cui entra.

Una persona è in grado di percepire le lingue più non formalizzate. E il computer non capisce, o meglio, non può eseguire un programma in un linguaggio informale. Ecco perché i linguaggi di programmazione algoritmica formali occupano sempre un posto importante nello studio della programmazione,

Sulla formalizzazione dell'informale La formalizzazione del non formalizzato è un processo non formalizzato. Anche se i logici e i militari stanno cercando di combatterlo.

Sulla formula dell'amore La formula dell'amore sfida la formalizzazione. Nella migliore delle ipotesi, può essere rappresentato solo come un modello molto grezzo

Linguaggi di modellazione

Un linguaggio di modellazione è un insieme di regole che governano la costruzione di modelli (rappresentazioni semplificate della realtà), compresa la loro visualizzazione e la definizione di struttura e comportamento. Il linguaggio di modellazione include:

    elementi del modello - concetti fondamentali di modellazione e loro semantica;

    notazione - una rappresentazione visiva di elementi di modellazione;

    guida all'uso - regole per l'utilizzo di elementi nell'ambito della creazione di modelli di dominio.

Linguaggi e framework di programmazione

    Secondo il creatore del primo ambiente integrato FRAMEWORK, un ambiente integrato è un programma applicativo tale che un utente, dopo averlo lanciato all'inizio della giornata lavorativa, trova in esso tutte le risorse necessarie per lavorare e quindi non lascia l'integrato ambiente fino alla fine della giornata lavorativa. Naturalmente, questa definizione non è molto corretta e idealizza in qualche modo la situazione, ma il suo significato generale è abbastanza chiaro. La caratteristica principale degli ambienti integrati è un alto grado di interattività. Si ottiene integrando varie risorse software in un unico insieme, da cui il nome. Quindi, l'ambiente integrato di un compilatore di un linguaggio di programmazione (un programma che crea un programma eseguibile dal testo di un determinato linguaggio di programmazione) contiene solitamente un editor di testo e un compilatore stesso con un sistema per la diagnosi degli errori di compilazione. Inoltre, di solito contiene anche un interprete-debugger del linguaggio dato, che esegue il programma riga per riga e ha una serie di altre caratteristiche speciali. Una delle aree in via di sviluppo attivo, il visual design, è completamente basata sull'uso delle capacità di un ambiente integrato. L'utente seleziona in modo interattivo gli oggetti del linguaggio di programmazione necessari per il suo programma e stabilisce le connessioni tra di loro. La popolarità di linguaggi come Visual BASIC (Microsoft), così come Object PASCAL (ambienti Delphi e Kylix, Borland) non è casuale. Anche un programmatore inesperto che non conosce altri linguaggi di programmazione oltre al BASIC e non ha mai programmato sotto Windows può creare un'applicazione Windows utilizzando Visual BASIC in due o tre giorni. Ma un programmatore di alta classe che non ha precedentemente programmato in Windows utilizzando C ++ spesso deve impiegare settimane, o addirittura mesi, per creare lo stesso programma. È vero, Visual BASIC ha una serie di limitazioni significative. Con l'aiuto di ambienti di progettazione visiva, puoi creare programmi altamente complessi senza digitare una riga di codice dalla tastiera. Tuttavia, tutti i programmi basati su linguaggi di programmazione procedurali tradizionali hanno lo stesso difetto. Per loro, il codice eseguibile è una cosa e i dati elaborati dal programma sono un'altra. Infatti, il codice del programma è contenuto in un file con estensione EXE, e i dati sono o in appositi file di dati (di norma, in formato testo o binario nella rappresentazione interna del computer), oppure vengono immessi dalla tastiera o da qualche altro dispositivo esterno. Poniamo ora la domanda: cosa succede se l'utente deve fornire al programma eseguibile informazioni che possono essere considerate come una “aggiunta” al testo del programma? Ad esempio, vogliamo che un grafico di funzioni venga tracciato sullo schermo e in un tale programma forniamo tutte le funzionalità di servizio necessarie. Tuttavia, la formula per la funzione deve essere impostata dall'utente stesso e non si sa in anticipo quale sarà. È abbastanza ovvio che compiti di questo tipo possono essere risolti solo con l'aiuto di un sistema di interpreti. Ma "devi pagare tutto". Il compilatore traduce il testo del programma in codice eseguibile che può funzionare senza il programma del compilatore. D'altra parte, i programmi creati sulla base di linguaggi di tipo interpretativo possono essere eseguiti solo sotto il controllo di un programma interprete. Inoltre, sono più lenti di quelli compilati, poiché l'interpretazione richiede più tempo. Tuttavia, in molti casi questo è irrilevante.

Data di creazione: 1963 Influenzato: PROFT Digitando: senza tipo Dialetti:

    Applesoft BASIC

    Commodore BASIC

    Microsoft BASIC

Implementazioni e versioni:

  • Interprete Applesoft BASIC in Javascript

    Atari Microsoft BASIC I / II

  • Commodore BASIC

    Galaksija BASIC

    Microsoft Visual Basic

  • Visual Basic per applicazioni

BASIC (abbreviazione di Beginner's All-purpose Symbolic Instruction Code) è una famiglia di linguaggi di programmazione di alto livello.

Basic è stato inventato nel 1963 dai professori del Dartmouth College John Kemeny e Thomas Kurtz, e sotto la loro guida è stato implementato da un team di studenti universitari. Nel corso del tempo, quando iniziarono ad apparire altri dialetti, questo dialetto "originale" divenne noto come Dartmouth BASIC.

BASIC è stato progettato in modo che gli studenti possano scrivere programmi utilizzando terminali in multiproprietà. Nasce come soluzione ai problemi legati alla complessità dei linguaggi più antichi, destinati agli utenti più "semplici", interessati non tanto alla velocità dei programmi, ma semplicemente alla possibilità di utilizzare un computer per risolvere i propri problemi.

Il linguaggio è stato progettato utilizzando i seguenti otto principi:

    essere facile da usare per i principianti;

    essere un linguaggio di programmazione generico;

    fornire la possibilità di espandere le funzionalità disponibili ai programmatori esperti;

    essere interattivo;

    fornire messaggi di errore chiari;

    lavorare rapidamente su piccoli programmi;

    non richiedono una comprensione del funzionamento dell'hardware;

    essere un intermediario tra l'utente e il sistema operativo.

Il linguaggio era basato in parte su Fortran II e in parte su Algol-60, con aggiunte che lo rendono conveniente per la condivisione del tempo, l'elaborazione di testi e l'aritmetica a matrice. Inizialmente, BASIC è stato implementato sul GE-265 con supporto per più terminali. Contrariamente alla credenza popolare, al momento della sua nascita, era una lingua compilata. Il linguaggio ha guadagnato popolarità universale dalla sua apparizione sul microcomputer Altair 8800. Molti linguaggi di programmazione erano troppo ingombranti per adattarsi a una piccola memoria. Per le macchine con supporti lenti come nastri di carta, cassette e nessun editor di testo adatto, un linguaggio piccolo come BASIC è stata un'ottima scoperta. Nel 1975, Microsoft (allora ce n'erano solo due: Bill Gates e Paul Allen, con la partecipazione di Monte Davidov) pubblicò Altair BASIC. Per il sistema operativo CP / M è stato creato il dialetto BASIC-80, che per lungo tempo ha determinato lo sviluppo del linguaggio. Durante questo periodo sono state create diverse nuove versioni di BASIC. Microsoft ha venduto diverse versioni di BASIC per MS-DOS / PC-DOS, tra cui BASICA, GWBASIC e Quick BASIC (QBASIC) Borland ha rilasciato Turbo BASIC 1.0 nel 1985 (i suoi successori sono stati successivamente venduti da un'altra società con il nome PowerBASIC). Varie estensioni di BASIC sono apparse sui computer di casa, di solito inclusi strumenti per lavorare con la grafica, il suono, l'esecuzione di comandi DOS e strumenti di programmazione strutturata. Diversi altri linguaggi hanno utilizzato la nota sintassi BASIC come base su cui è stato costruito un sistema completamente diverso (vedi ad esempio GRASS). Tuttavia, a partire dalla fine degli anni '80, i nuovi computer sono diventati molto più sofisticati e hanno fornito funzionalità (come un'interfaccia utente grafica) che hanno reso il BASIC meno programmabile. Il BASIC iniziò a perdere terreno, nonostante il fatto che un numero enorme delle sue versioni fosse ancora in uso e venduto. Il BASIC ha avuto la sua seconda vita con l'avvento di Visual Basic di Microsoft. È diventato uno dei linguaggi più utilizzati sulla piattaforma Microsoft Windows. Successivamente, è stata creata una variante chiamata WordBasic, che è stata utilizzata in MS Word prima di Word 97. La variante Visual Basic for Applications (VBA) è stata incorporata in Excel 5.0 nel 1993, quindi in Access 95 nel 1995 e quindi in tutti gli altri strumenti. incluso nella suite Office - nel 1997. Internet Explorer 3.0 e versioni successive e Microsoft Outlook includevano un interprete VBScript. Il pacchetto completo di OpenOffice.org include anche un interprete BASIC.

Ciao, Mondo!: Esempio per le versioni QBasic 1.1, QuickBasic 4.50

STAMPA " Ciao , Mondo !"

Fattoriale: Esempio per le versioni QBasic 1.1, QuickBasic 4.50

Viene utilizzata la determinazione iterativa del fattoriale. Quando si calcola 13! si verifica un overflow aritmetico e qui il comportamento di diverse implementazioni è diverso: QBasic segnala un overflow e QuickBasic restituisce semplicemente valori negativi. Inoltre, il comando PRINT, per impostazione predefinita, stampa uno spazio prima e dopo il numero.

DIM f AS LONG f = 1 PRINT "0! ="; f PER i = da 1 a 16:

f = f * io:

STAMPA i; "! ="; F

LINGUAGGIO FORMALIZZATO- un sistema di segni artificiali progettato per rappresentare una teoria. Una lingua formalizzata differisce dalle lingue naturali (nazionali) della comunicazione e del pensiero umani, dalle lingue artificiali come l'esperanto, dalle lingue "tecniche" della scienza che combinano i mezzi di una certa parte della lingua naturale con i corrispondenti simboli scientifici (il linguaggio della chimica, il linguaggio della matematica ordinaria, ecc.), da linguaggio algoritmico come la programmazione generica, ecc. prima di tutto, il fatto che il suo compito è quello di servire come mezzo per fissare (formalizzare) un certo contenuto logico, il che rende possibile introdurre la relazione di conseguenza logica e il concetto di dimostrabilità (o loro analoghi). Storicamente, la prima lingua formalizzata è stata sillogistica Aristotele, implementato utilizzando un pezzo standardizzato di lingua naturale (greca). L'idea generale di un linguaggio formalizzato è stata formulata da Leibniz (characteristica universalis), che ha previsto la sua estensione al "calcolo delle inferenze" - calculus ratiocinator. Nei tempi moderni, sono state sviluppate varie varianti di linguaggi formalizzati basati sull'analogia tra logica e algebra. La pietra miliare qui è stato il lavoro Morgana , boule e i loro seguaci, in particolare Schroeder e Poretsky ... I linguaggi formalizzati moderni - nelle loro forme più comuni - tornano al lavoro Frege "Begriffsschrift" - "Writing in Concepts" (1879), da cui procede la linea principale di sviluppo del linguaggio della logica proposizionale e (inglobandola) della logica dei predicati (multiposto), nonché l'applicazione di questi mezzi di linguaggio logico per i problemi di fondare la matematica.

La struttura caratteristica di tali lingue formalizzate è l'assegnazione dell'alfabeto dei segni iniziali, la determinazione induttiva della formula linguistica (correttamente costruita), la cosiddetta. fissare le regole dell'educazione, fissare le regole dell'inferenza, le cosiddette. regole di trasformazione che preservano la caratteristica logica distinta delle formule (verità, dimostrabilità, ecc.). L'aggiunta di regole di trasformazione trasforma un linguaggio formalizzato in un calcolo logico. Esistono molti tipi di linguaggi formalizzati: si tratta, innanzitutto, di linguaggi di costruzioni deduttive-assiomatiche, sistemi di inferenza naturale ("naturale") e costruzioni sequenziali, tabelle analitiche, sistemi di "logica della disputa" e molti altri .

Le lingue formalizzate differiscono nella loro forza logica, a partire dalle lingue "classiche" (in cui le leggi aristoteliche dell'identità, della contraddizione e del terzo escluso, nonché il principio di ambiguità logica, sono in pieno vigore) e terminando con i numerosi linguaggi di logiche non classiche che consentono di indebolire certi principi, di introdurre ambiguità nella valutazione delle formule o nella loro modalità. Sono stati sviluppati linguaggi in cui i mezzi logici sono ridotti al minimo in un senso o nell'altro. Tali sono i linguaggi della logica minimale e positiva o il linguaggio della logica proposizionale che utilizza un'unica operazione logica, ad esempio. L'ictus di Schaeffer (v. Connettivi logici ).

Le lingue formalizzate sono generalmente caratterizzate in termini di sintattica e semantica. Ma la cosa più essenziale è la caratteristica logica delle sue formule, che è preservata dalle regole dell'inferenza (verità, dimostrabilità, confermabilità, probabilità, ecc.). Per qualsiasi linguaggio formalizzato, fondamentali sono i problemi di completezza della logica in esso espressa, della sua decidibilità e consistenza; ad esempio la lingua dei classici proposizione logica è completo, risolvibile e coerente, ma il classico logica dei predicati (multiposto), sebbene completo, è insolubile; il linguaggio del calcolo predicativo esteso - con quantificatori per predicati e applicazione illimitata del principio di astrazione - è contraddittorio (tale era il sistema logico-aritmetico di Frege, in cui Russell scoprì l'antinomia che porta il suo nome).

Un linguaggio formalizzato può essere "forma pura", cioè non portare alcuna informazione extra-logica; se lo porta, allora diventa un linguaggio formalizzato applicato, la cui specificità è la presenza di predicati e termini costanti (descrizioni) - per esempio. aritmetica, - che riflette le proprietà dell'area di applicazione. Per formalizzare teorie di alto livello di astrazione, un linguaggio formalizzato può essere modificato in diversi modi, ampliato o "costruito"; esempio: formalizzazione dell'analisi matematica classica come aritmetica di secondo ordine (cioè con quantificatori su variabili predicato). In alcuni casi, un linguaggio formalizzato contiene strutture logiche di molti - anche infiniti - ordini (come ad esempio la "torre delle lingue" di AA Markov, che serve a formalizzare la matematica costruttiva, o l'interpretazione delle modalità nella forma di una gerarchia di "mondi possibili"). La base semantica di un linguaggio logico formalizzato può essere teoria degli insiemi, algebrica, probabilistica, teoria dei giochi, ecc. Potrebbe anche esserci un tale "indebolimento", che è correlato solo alla semantica probabilistica: ecco come, ad esempio , nasce il linguaggio formalizzato della “logica fuzzy” (nel senso Zade). Quindi la lingua acquisisce una pragmatica specifica, tenendo conto del fattore del parlante nativo (che dà una valutazione della "funzione di appartenenza" del soggetto al volume del concetto dato). È qui che si manifesta l'ormai crescente tendenza a tener conto del "fattore umano" nei linguaggi formalizzati, in una forma o nell'altra, che si manifesta chiaramente in alcuni linguaggi formalizzati della logica della meccanica quantistica. Lo sviluppo dei linguaggi formalizzati sta andando in una direzione diversa, la cui semantica presuppone il rifiuto di presupposti esistenziali o di determinati prerequisiti ontologici - sull'ammissibilità di regole con un numero infinito di premesse, il "multigrado" delle aree disciplinari , anche contraddittori, ecc.

Una caratteristica indispensabile di un linguaggio formalizzato è la "possibile" interpretazione delle regole di inferenza; per esempio, a un certo punto siamo liberi di usare o non usare, diciamo, la regola del modus ponens. I linguaggi algoritmici "prescrittivi" sono privi di questa caratteristica. Ma con lo sviluppo della logica del computer e lo sviluppo di programmi di tipo "descrittore", questa differenza inizia ad appianarsi. Lo sviluppo di linguaggi formalizzati incentrati sulla risoluzione di problemi euristici opera nella stessa direzione.

Letteratura:

1. Chiesa A. Introduzione alla logica matematica, volume 1. M., 1960;

2. Zeppe S.K. Introduzione alla metamatematica. M., 1957;

3. Curry H. Fondamenti di logica matematica. M., 1969;

4. Freudenthal H. Il linguaggio della logica. M., 1969;

5. Smirnova E.D. Linguaggi formalizzati e problemi di semantica logica. M., 1982.

LINGUE FORMALIZZATE (FORMALI)

CAPIRE

Il linguaggio formalizzato (formale) è un linguaggio artificiale caratterizzato da regole precise per costruire espressioni e comprenderle.

Un linguaggio formale è costruito secondo regole chiare, fornendo una visualizzazione coerente, accurata e compatta delle proprietà e delle relazioni del dominio studiato (oggetti modellati).

Contrariamente alle lingue naturali, le lingue formali sono caratterizzate da regole chiaramente formulate per l'interpretazione semantica e la trasformazione sintattica dei segni utilizzati, nonché dal fatto che il significato e il significato dei segni non cambiano a seconda di circostanze pragmatiche (per esempio, sul contesto).

I linguaggi formali sono spesso costruiti attorno al linguaggio della matematica.

Nel corso della storia dello sviluppo della matematica, ha ampiamente utilizzato designazioni simboliche per vari oggetti e concetti. Tuttavia, insieme alle designazioni simboliche, i matematici usavano liberamente anche il linguaggio naturale. Ma ad un certo punto dello sviluppo della scienza (XVII secolo), è sorta la necessità di un'analisi logica rigorosa dei giudizi matematici, nonché di un chiarimento del concetto di "prova", che è importante per la matematica. Si è scoperto che è impossibile risolvere questi problemi senza una rigida formalizzazione delle teorie matematiche. Era necessario presentare queste teorie in un linguaggio formale. Il XX secolo può essere considerato il secolo del rapido sviluppo di vari linguaggi formali.

Dal punto di vista dell'informatica, tra i linguaggi formali, il ruolo più significativo è svolto dal formale linguaggio della logica (il linguaggio dell'algebra della logica) e linguaggi di programmazione ... Sono anche di importanza pratica.

Tutti i linguaggi formali sono costruzioni create da qualcuno. La maggior parte di essi è costruita secondo il seguente schema.

Prima di tutto, è scelto alfabeto , o un insieme di simboli sorgente, da cui verranno costruite tutte le espressioni del linguaggio. Poi descrive sintassi linguaggio, cioè le regole per costruire espressioni significative.

Poiché il concetto di "simbolo" ha un significato semantico multivalore, il termine "lettera" viene spesso utilizzato per i caratteri dell'alfabeto. Ma va ricordato che le lettere dell'alfabeto di una lingua formale possono essere lettere degli alfabeti delle lingue naturali, parentesi e caratteri speciali, ecc.

Dalle lettere, secondo certe regole, puoi fare parole ed espressioni .

La regola più semplice è che qualsiasi sequenza finita di lettere può essere considerata una parola. In realtà la parola è il modello di informazione più semplice(ed è, ovviamente, un oggetto costruttivo).

ESEMPIO 1

Uno dei più importanti dal punto di vista dell'informatica è l'alfabeto, composto da due lettere "0", "1". Qualsiasi sequenza finita di zero e uno è una parola in questo alfabeto.

Nei linguaggi logico-matematici si distinguono le espressioni termini e formule .

terme- questo è un analogo dei nomi degli oggetti, il loro scopo principale è quello di indicare un oggetto.

I termini includono principalmente variabili soggetto e costanti - espressioni utilizzate per designare oggetti specifici.

I termini più complessi sono costruiti da variabili e costanti soggetto secondo determinate regole. Di solito, per questo vengono utilizzate le funzioni consentite nella lingua.

ESEMPIO 2

In logica, tali funzioni sono inversione (), congiunzione (), disgiunzione (), implicazione (), ecc.

Esempi di termini nell'algebra booleana:

MA; А; (AC).

Nei linguaggi di programmazione, le operazioni aritmetiche sono coinvolte nella formazione dei termini, le operazioni della relazione (,

Esempi di termini nel linguaggio di programmazione Pascal:

MA; prog_1; ((A1 + 25) 3 * B) e (B0)); 2 + sqrt (z * sin (b)).

Formula

ESEMPIO 3

Esempi di formule logiche:

(АС)  АС = 1; x ( (x)  (x))

Le formule in un linguaggio di programmazione possono essere chiamate istruzioni di programma.

Esempi di "formule" del linguaggio di programmazione Pascal:

A: = 2 + sqrt (Z * sin (B)); se F3 allora scrivi (R) altrimenti R: = sqr (F);

Le espressioni significative si ottengono in una lingua formale solo se si osservano alcune nella lingua. regolamenti educazione, trasformazione e “comprensione” di termini e formule. Queste regole includono:

    regole di costruzione termini e formule;

    regole di interpretazione termini e formule (aspetto semantico del linguaggio);

    regole di prelievo

Per ogni lingua formale, l'insieme di queste regole deve essere rigorosamente definito e la modifica di una di esse porta molto spesso all'emergere di una nuova varietà (dialetto) di questa lingua.

ESEMPIO 4

Operatore Pascal

se F3 allora scrivi (R) altrimenti R: = sqr (F);

interpretata secondo le seguenti regole:

    la variabile F può essere solo di tipo intero o reale e la variabile R può essere solo di tipo reale. In caso contrario, l'istruzione viene considerata sintatticamente non valida e non verrà eseguita (verrà visualizzato un messaggio di errore di sintassi);

    variabili (termini più semplici) F e R devono essere definite in precedenza, cioè le celle con questi nomi devono contenere alcuni valori del tipo appropriato (per alcune versioni di Pascal questa regola non è inclusa nella sintassi del linguaggio. In questo caso, viene selezionata quella sequenza di zero e uno , che è contenuta nelle celle con gli indirizzi dati ed è interpretata come un numero decimale);

    se il valore dell'espressione (termine complesso “F3”) che segue la parola chiave (riservata) if è “true”, allora viene eseguita l'istruzione posta dopo la parola chiave then (sullo schermo viene visualizzato il valore della variabile F); se il suo valore è "false" (false), viene eseguito l'operatore che si trova dopo la parola chiave else (viene calcolato il quadrato del valore della variabile F e il risultato viene inserito nella cella denominata R).

La presenza nella sintassi del linguaggio formale di regole per la derivazione di termini e formule permette di eseguire trasformazioni isomorfe modelli basati su questo linguaggio. Pertanto, i linguaggi formali non solo riflettono (rappresentano) l'uno o l'altro insieme di conoscenze già esistenti, ma sono mezzi di formalizzazione di questi conoscenza, permettendo di acquisire nuove conoscenze attraverso trasformazioni formali... Inoltre, poiché le trasformazioni possono avvenire solo secondo rigide regole formali, la costruzione di modelli isomorfi a uno dato, ma che diano nuove conoscenze, può essere automatizzato... Questa funzionalità è ampiamente utilizzata nelle basi di conoscenza dei computer, nei sistemi esperti, nei sistemi di supporto alle decisioni.

Le lingue formali sono ampiamente utilizzate nella scienza e nella tecnologia. Nel processo di ricerca scientifica e attività pratica, i linguaggi formali vengono solitamente utilizzati in stretta connessione con il linguaggio naturale, poiché quest'ultimo ha capacità espressive molto maggiori. Allo stesso tempo, un linguaggio formale è un mezzo per una rappresentazione della conoscenza più accurata rispetto a un linguaggio naturale, e quindi un mezzo per uno scambio di informazioni più accurato e oggettivo tra le persone.

SAPERE

Il linguaggio formalizzato (formale) è un linguaggio artificiale caratterizzato da regole precise per la costruzione delle espressioni e la loro interpretazione (comprensione).

Quando si costruisce un linguaggio formale, si sceglie alfabeto , ed è descritto sintassi linguaggio.

Alfabeto- un insieme di simboli sorgente da cui verranno costruite tutte le espressioni del linguaggio.

espressioni linguaggio formale sono termini e formule.

Scopo principale termine - designare un oggetto.

I termini più semplici sono variabili e costanti soggetto - espressioni usate per designare oggetti specifici.

I termini complessi vengono costruiti secondo determinate regole applicando le funzioni consentite nel linguaggio a termini semplici.

Formula sono formati da termini a cui vengono applicati gli operatori consentiti nella lingua.

Sintassi linguaggio - un insieme di regole per la costruzione di espressioni significative - include:

    regole di costruzione termini e formule;

    regole di interpretazione termini e formule;

    regole di prelievo alcune formule e termini da altre formule e termini.

Lingue formali come linguaggio della logica e linguaggi di programmazione .

Le lingue formali sono ampiamente utilizzate nella scienza e nella tecnologia. Sono un mezzo per uno scambio di informazioni più accurato e obiettivo tra le persone rispetto al linguaggio naturale.

I linguaggi formali non solo riflettono (rappresentano) l'uno o l'altro insieme di conoscenze già esistenti, ma sono un mezzo per formalizzare questa conoscenza, consentendo attraverso trasformazioni formali di ottenere nuove conoscenze. Questa funzionalità è ampiamente utilizzata nelle basi di conoscenza dei computer, nei sistemi esperti, nei sistemi di supporto alle decisioni.

ESSERE IN GRADO DI

ESERCIZIO 1

Elenca in quali lettere è composto l'alfabeto di un linguaggio di programmazione che conosci e quali sono le regole per la formazione di termini semplici in questo linguaggio.

Se questo linguaggio di programmazione ha parole riservate? In tal caso, fornire esempi di parole riservate e non riservate.

Cosa possono essere considerati termini e formule nei linguaggi di programmazione?

RISPONDERE. L'alfabeto di un linguaggio di programmazione include tutti i caratteri che possono essere utilizzati durante la scrittura dei programmi.

I termini del linguaggio di programmazione sono identificatori, nonché espressioni costruite da identificatori, costanti, segni di operazioni aritmetiche e logiche, funzioni matematiche e altre (definite nel linguaggio), parentesi.

Le formule di un linguaggio di programmazione sono gli operatori in esso consentiti: input, output, assegnazione, condizionale, loop, ecc.

COMPITO 2

Se hai studiato le basi della logica formale, allora:

    Fornire esempi quando la trasformazione formale di formule logiche consente di acquisire nuove conoscenze sugli oggetti oggetto di studio;

    interpretare la formula: x ( (x)   (x)) o  (A  A) = 1

RISPONDERE. 2) è la legge della coerenza, la cui essenza è: nessuna affermazione può essere vera e falsa allo stesso tempo.

COMPITO 3

Qual è l'alfabeto decimale?

Qual è la regola di base per la formazione (registrazione) dei numeri in questo sistema di numerazione posizionale?

RISPONDERE. Alfabeto: cifre decimali, punto decimale (o virgola) e segni più e meno. Regola: il peso di una cifra in un numero dipende dalla sua posizione nel record del numero.

COMPITO 4

Come può essere interpretata la parola dell'alfabeto binario "0100 1001 0100 0110" in un sistema di programmazione che conosci (gli spazi sono inseriti per leggibilità)?

RISPONDERE. In Pascal, questi due byte possono essere interpretati come una stringa di caratteri "IF", come due byte - 73 e 70, come un intero - 20758 (18758 ???).

COMPITO 5

L'interfaccia grafica di Windows contiene elementi come pittogrammi o icone. Possiamo presumere che siano inclusi nell'alfabeto della lingua dell'interfaccia utente di questo sistema? Giustifica la risposta.

ESPANDI IL TUO CIRCUITO

Nei linguaggi formali, come in nessun altro, il ruolo del segno, inteso in senso lato, è grande. Abbiamo considerato alcuni aspetti dell'uso dei segni in precedenza, ma ha senso parlarne in modo più dettagliato.

La ragione della comparsa dei segni è abbastanza ovvia: la maggior parte degli oggetti di cognizione e attività non sono accessibili alla percezione diretta nel processo di cognizione e presentazione nel processo di comunicazione.

Cartello(gr.  - segno, trascrizione latina - semeion) è un oggetto materiale che funge da rappresentante di qualche altro oggetto, proprietà o relazione e viene utilizzato per acquisire, archiviare, elaborare e trasmettere messaggi (informazioni, conoscenza).

NOTA 1 Al posto della parola “segno” in senso analogo vengono utilizzati altri concetti: “nome”, “termine”, “designazione”.

Secondo la definizione di uno dei fondatori della teoria dei segni (semiotica) C.P. Pearce, cartelloè un elemento x che sostituisce qualche elemento y (denotato) per il soggetto secondo qualche attributo.

Rispettivamente, denotazione- questo è ciò che significa questo segno in una situazione particolare.

Denotato di qualche unità linguistica astratta (dal lat. denoto - designo) - un insieme di oggetti che possono essere nominati da questo segno.

NOTA 2. Invece della parola "denotatum" in logica, vengono usati altri nomi (identici, sinonimi): il più delle volte "significato", "designato".

A sua volta, ogni segno definisce alcune proprietà dell'oggetto da esso designato. L'informazione che il segno porta sul designato è solitamente chiamata concetto segno (dal latino conceptus - concetto).

NOTA 3 Il termine “concetto” ha sinonimi: “significato”, “significato di un segno”.

AD ESEMPIO, nella parola "animale" troviamo l'antico significato della parola "pancia" - vita. Gli animali si distinguono non per la presenza di una pancia, ma per il fatto che sono vivi, hanno una vita di pancia. Quindi, il concetto del segno "animale" è il concetto di un essere vivente, la detonazione è qualsiasi essere vivente specifico che si intende in una data situazione simbolica.

Secondo Peirce, tutti i segni sono divisi in indice , iconico e simbolico dalla natura del rapporto tra significante e significato.

Indice di rapporto tra il significante e il significato nel segno si basa sulla loro somiglianza effettiva, esistente nella realtà. Questa classe comprende, ad esempio, parole onomatopeiche o formule di struttura di composti chimici. I segni indice sono associati a una relazione causale designata (ad esempio, la presenza di tetti bagnati è un segno che ha piovuto).

Atteggiamento iconico tra il significante e il significato è, secondo Charles Pearce, "una semplice generalità in qualche proprietà". Segni-copie (segni iconici) - riproduzioni, riproduzioni simili a quelle designate (ad esempio fotografie, impronte digitali).

IN segno simbolico il significante e il significato sono correlati "senza riguardo a nessuna connessione effettiva" (per esempio, una certa combinazione di suoni, lettere, figure, colori, movimenti, ecc., è messa in corrispondenza con qualche oggetto.

È questo tipo di segni che è importante per la costruzione dei linguaggi formali (si veda il paragrafo del primo capitolo sulla tesi principale della formalizzazione).

NOTA 4 I segni simbolici sono talvolta indicati come simboli ... Secondo il pensiero dell'eminente filosofo russo PA Florensky, un simbolo è “l'essere che è più grande di se stesso. Simbolo- è qualcosa che è qualcosa che non è se stesso, più grande di lui, eppure essenzialmente dichiarato attraverso di lui”. Ad esempio, la mitica creatura grifone, che unisce un leone e un'aquila, è uno dei simboli di Gesù Cristo.

Capita spesso che un segno che prima appariva come segno iconico diventi poi segno simbolico.

PER ESEMPIO, la lettera  nell'alfabeto fenicio era chiamata "Aleph" - toro (assomiglia alla testa di un toro). Allora era un segno iconico. In greco, invece, questa lettera non è associata al toro e diventa un segno-simbolo.

Con lo sviluppo del simbolismo matematico, anche i segni iconici vengono sostituiti da simboli. Ad esempio, il numero romano V assomigliava a una mano aperta (cinque dita), mentre il numero moderno 5 è un simbolo.

I segni designano rispettivamente il pianeta Venere e Marte in astronomia e in biologia: sesso femminile e maschile. Questi segni sono di origine iconica. Il primo è un'immagine stilizzata di un antico specchio, il secondo è uno scudo con una lancia.

Gli oggetti della vita reale e gli insiemi di tali oggetti sono lungi dall'essere sempre denotativi. Molti esempi di denotazioni che non sono oggetti della realtà sono contenuti nella famosa fiaba di L. Carroll “Alice nel paese delle meraviglie”. Formula anche figurativamente il principio dell'emergere di tali denotazioni:

"Viveva per vivere (lepre di marzo - ndr), ma per essere, non lo era." A questo proposito il proverbio russo “vissuto ed era” non sembra affatto una tautologia.

La struttura del segno è descritta dal cosiddetto "triangolo di Frege" (dal nome di un eccezionale logico tedesco che molto ha fatto per lo sviluppo della teoria dei linguaggi formali). In altri termini, è chiamato "triangolo semantico" o triangolo di Ogden-Richards. Stabilisce una connessione tra il segno, la denotazione del segno e il concetto di segno.

Riso. 4.3.1. Il triangolo di Frege

Con l'aiuto di questo triangolo è possibile chiarire una serie di effetti linguistici ben noti (situazioni di segni).

1) sinonimo- una situazione consistente in una coincidenza totale o parziale dei significati di segni diversi:

Riso. 4.3.2. Schema di sinonimia

2) i segni possono avere la stessa denotazione, ma avere significati diversi (identità denotativa). Ad esempio, i segni "sin 30 °" e "1/2" hanno la stessa denotazione, cioè nominano lo stesso numero reale, ma il significato di questi segni è diverso:

Riso. 4.3.3. Schema di identità denotativa

3) polisemia(ambiguità) - un segno ha più di un significato:

Riso. 4.3.4. Schema di polisemia

FATTO INTERESSANTE

Riferimento storico

I primi passi verso la creazione di un linguaggio formale della logica furono compiuti nel periodo dell'antichità. Aristotele (384-322 a.C.) introdusse variabili letterali per soggetti e predicati di semplici affermazioni categoriche, e il capo della scuola stoica Crisippo (c. 281-208 a.C.) e i suoi studenti - variabili per affermazioni in generale ... Nel XVI secolo, R. Descartes (1596-1659) creò le basi del moderno linguaggio formale della matematica - l'algebra alfabetica, e G.V. Leibniz (1646-1716) trasferì il simbolismo cartesiano nella logica. Il linguaggio principale della logica a quel tempo era il linguaggio naturale. Comprendendo le significative carenze sintattiche e semantiche di un linguaggio naturale (ingombranza, ambiguità e imprecisione delle espressioni, regole sintattiche poco chiare, ecc.), Leibniz ha formulato la tesi che senza creare un linguaggio artificiale speciale - "calcolo universale" - l'ulteriore sviluppo della logica è impossibile. Ma solo alla fine del XIX secolo, l'idea di Leibniz fu sviluppata negli studi di J. Boulle (1815-1864), S. Jevons (1835-1882), E. Schroeder (1841-1902) e altri - l'algebra di apparve la logica.

L'ulteriore sviluppo del linguaggio della logica è associato ai nomi J. Peano (1858-1932) e G. Frege (1848-1925). Peano ha introdotto una serie di simboli adottati nella matematica moderna, in particolare “”, “”, “”, per denotare, rispettivamente, le relazioni di appartenenza, unione e intersezione di insiemi. Frege costruì un calcolo assiomatico proposizionale e predicativo, che conteneva tutti gli elementi di base dei calcoli logici moderni.

Sulla base dei risultati ottenuti da Frege, e utilizzando la notazione Peano modificata, B. Russell (1872-1970) e AN Whitehead (1861-1947) nel loro lavoro congiunto "Principles of Mathematics" (1913) hanno formulato le principali disposizioni del linguaggio formale di logica.

Attualmente, il linguaggio della logica trova importanti applicazioni nell'informatica, nello sviluppo di linguaggi di programmazione, software per computer e vari sistemi tecnici.

L'emergere dei linguaggi di programmazione cade nei primi anni '50 del XX secolo. Inizialmente, i programmi venivano creati nel linguaggio delle istruzioni macchina ed erano sequenze di codici binari che venivano immessi dalla console in un computer per l'esecuzione.

Il primo passo nello sviluppo dei linguaggi di programmazione è stata l'introduzione di simboli mnemonici (memoria) per istruzioni e dati e la creazione di un programma macchina che traduce questi simboli mnemonici in codici macchina. Il programma takai, e con esso il sistema di notazione, ha ricevuto il nome assemblatore .

Ogni tipo di macchina aveva il proprio assemblatore e trasferire i programmi da una macchina all'altra era una procedura molto laboriosa. Pertanto, è nata l'idea di creare un linguaggio indipendente dalla macchina. Tali lingue iniziarono ad apparire a metà degli anni '50 e iniziò a essere chiamato un programma che traduce frasi di questa lingua in linguaggio macchina traduttore .

Esistono diverse migliaia di linguaggi di programmazione e i loro dialetti (varietà). Possono essere classificati in diversi modi. Alcuni autori rompono l'intera varietà di linguaggi di programmazione in procedurali e dichiarativi. Nei linguaggi procedurali, la trasformazione dei dati viene specificata descrivendo una sequenza di azioni su di essi. Nei linguaggi dichiarativi, la trasformazione dei dati viene specificata principalmente descrivendo la relazione tra i dati stessi. Secondo un'altra classificazione, i linguaggi di programmazione possono essere suddivisi in procedurali, funzionali, logici, orientati agli oggetti. Tuttavia, qualsiasi classificazione è in qualche modo arbitraria, poiché, di norma, la maggior parte dei linguaggi di programmazione include le capacità di linguaggi di diverso tipo.

Un posto speciale tra i linguaggi di programmazione è occupato dai linguaggi che garantiscono il funzionamento dei sistemi di gestione di database (DBMS). Spesso in essi si distinguono due sottosistemi: il linguaggio di descrizione dei dati e il linguaggio di manipolazione dei dati (chiamato anche linguaggio di interrogazione).

Il 21° secolo è un momento in cui la proprietà delle informazioni è il vantaggio competitivo più importante in qualsiasi area. Tuttavia, non sarà di alcuna utilità se non è espresso in una lingua comprensibile a coloro ai quali è destinato o non esiste un traduttore che possa trasmetterne il significato al destinatario.

Al momento, circa 2000 persone vivono sulla terra. La loro caratteristica distintiva, prima di tutto, è la lingua.

Insieme alle lingue parlate (naturali), l'umanità ha creato molte lingue artificiali. Ognuno di essi è progettato per risolvere problemi specifici.

Questi sistemi di segni includono lingue formali, esempi dei quali sono presentati di seguito.

Definizioni

Prima di tutto, diciamo cos'è una lingua. Sotto questa parola è consuetudine intendere il sistema di segni, che viene utilizzato per stabilire la comunicazione tra le persone e la conoscenza.

La base della maggior parte delle lingue sia artificiali che naturali è l'alfabeto.

È un insieme di simboli usati per formare parole e frasi.

Il linguaggio è caratterizzato da:

  • un insieme di caratteri utilizzati;
  • regole per comporre da esse "parole", "frasi" e "testi";
  • un insieme di regole (sintattiche, pragmatiche e semantiche) per l'utilizzo delle strutture costruite.

Caratteristiche delle lingue naturali

Come già accennato, tutte le lingue sono convenzionalmente divise in artificiali e naturali. Ci sono molte differenze tra i due.

Le lingue parlate sono naturali. Le loro caratteristiche, tra le altre, includono:

  • ambiguità della maggior parte delle parole;
  • l'esistenza di sinonimi e omonimi;
  • la presenza di più nomi per lo stesso soggetto;
  • l'esistenza di eccezioni a quasi tutte le regole.

Tutte queste caratteristiche sono le principali differenze tra i sistemi di segni naturali e i linguaggi formali. Esempi di ambiguità nelle parole e nelle affermazioni sono noti a tutti. Quindi la parola "etere", a seconda del contesto, può significare sia sostanza che trasmissione radiofonica o televisiva.

Allo stesso tempo, le principali funzioni delle lingue parlate sono:

  • comunicazione;
  • attività cognitiva;
  • espressione di emozioni;
  • impatto sull'interlocutore (corrispondente, se si tratta di corrispondenza).

Caratteristiche delle lingue artificiali

I linguaggi artificiali sono creati dagli umani per scopi speciali o per gruppi specifici di persone.

Una delle caratteristiche principali delle lingue artificiali è la chiarezza inequivocabile del loro vocabolario, nonché le regole per l'assegnazione di significati e la formazione delle espressioni.

Lingue formali e grammatiche

Il linguaggio, indipendentemente dal fatto che sia naturale o artificiale, può esistere solo se esiste un insieme di regole specifiche. Allo stesso tempo, dovrebbe essere garantita una visualizzazione coerente, compatta e accurata delle relazioni e delle proprietà dell'area disciplinare studiata. Se sono rigorosamente formulati, allora dicono che la lingua. Esempi di tali sistemi di segni sono i linguaggi di programmazione, sebbene, a rigor di termini, essi occupino piuttosto una posizione intermedia (vedi sotto).

Lo schema per la costruzione di sistemi di segni formali è il seguente:

  • viene selezionato un alfabeto (un insieme di simboli sorgente);
  • vengono impostate le regole per la costruzione delle espressioni (sintassi) del linguaggio.

Ambito di applicazione

Logiche formali, programmazione, ecc.) sono utilizzate nel processo di ricerca scientifica. Sono migliori di quelli naturali per rappresentare la conoscenza e sono un mezzo per uno scambio di informazioni più oggettivo e accurato.

I linguaggi formali includono tutti i sistemi conosciuti di simboli matematici e chimici, codice Morse, notazione musicale, ecc.

Inoltre, i linguaggi di programmazione formali sono ampiamente utilizzati. Il loro rapido sviluppo iniziò a metà del XX secolo, in connessione con l'avvento della tecnologia informatica.

Il linguaggio della logica formale

Qualsiasi linguaggio di programmazione è basato sulla matematica. Egli, a sua volta, si affida al sistema dei segni della logica formale.

Come scienza, la logica è stata creata da Aristotele. Ha anche sviluppato le regole per trasformare le affermazioni che conservano il loro valore di verità indipendentemente dal contenuto dei concetti inclusi in queste affermazioni.

La logica formale combatte con le "carenze" dei linguaggi naturali associate all'ambiguità di alcune affermazioni, ecc. A tal fine, le operazioni con i pensieri sono sostituite da azioni con segni del linguaggio formale. Ciò elimina qualsiasi incertezza e consente di stabilire con precisione la verità dell'affermazione.

Caratteristiche dei linguaggi di programmazione

Come già accennato, con qualche riserva, possono essere classificati come formali.

Molte regole sintattiche le uniscono a queste ultime, e alcune parole chiave e costruzioni a quelle naturali.

La creazione di un linguaggio di programmazione richiede la definizione dell'insieme dei simboli validi e dei programmi corretti del linguaggio e del significato di ciascun programma corretto. Se il primo compito può essere affrontato attraverso la formalizzazione, nel caso del secondo questi approcci non funzionano.

Molti dei caratteri validi nei linguaggi di programmazione sono caratteri che puoi digitare dalla tastiera. Rappresentano la prima parte della tabella di codifica ASCII.

Grammatiche

I linguaggi di programmazione, come tutti gli altri, hanno una grammatica. Questo termine è inteso come una descrizione del metodo di scrittura delle frasi. Le grammatiche sono descritte in vari modi. Nel caso dei linguaggi di programmazione, sono regole che vengono specificate da coppie ordinate di stringhe di caratteri di due tipi: definizione di costrutti sintattici e vincoli semantici. Quando definiscono le grammatiche, prima stabiliscono formalmente le regole per la costruzione di costruzioni sintattiche e quindi definiscono quelle semantiche in una delle lingue naturali.

La registrazione grafica delle regole viene eseguita utilizzando diagrammi speciali. Inizialmente, questo approccio è stato utilizzato durante la creazione del linguaggio Pascal. Tuttavia, poi ha iniziato ad essere ampiamente utilizzato in altri.

Classificazione dei linguaggi di programmazione

Al momento sono diverse migliaia, insieme ai “dialetti”. Sono classificati come procedurali e dichiarativi. Nelle lingue del primo tipo, la trasformazione dei dati viene specificata descrivendo la sequenza di azioni eseguite su di essi, la seconda - relazioni. Ci sono anche altre classificazioni. Ad esempio, i linguaggi di programmazione sono divisi in funzionali, procedurali, orientati agli oggetti e logici. Se affrontiamo il problema in modo rigoroso, nessuna classificazione può essere oggettiva. Dopotutto, una parte significativa dei linguaggi di programmazione ha le capacità di diversi tipi di sistemi formali contemporaneamente. Nel tempo, è probabile che i bordi si consumino ancora di più.

Ora puoi rispondere alla domanda: "Quali lingue formali conosci?" Gli scienziati continuano a migliorarli per rendere possibile la soluzione di vari problemi pratici e teorici che attualmente sono considerati irrisolvibili.

Hai domande?

Segnala un errore di battitura

Testo da inviare ai nostri redattori: