Ce este sintaxa limbajului de programare. Limbaj de programare. Vocabular, sintaxă, semantică japoneză Litere latine mici și mari

alfabet limba este ansamblul de caractere folosit în limbă. Limbajul C distinge, spre deosebire de multe alte limbaje de programare, între litere mari și mici.

Limbajul vorbit obișnuit este format din patru elemente principale: simboluri, cuvinte, fraze și propoziții. Limbajul algoritmic conține elemente similare, numai cuvintele se numesc construcții elementare, fraze - expresii, propoziții - operatori. Un limbaj algoritmic (ca orice alt limbaj) este format din cele trei componente ale sale: alfabet, sintaxă și semantică.
Alfabetul este un set fix de caractere pentru o anumită limbă (litere, cifre, caractere speciale etc.) care poate fi folosit la scrierea unui program.
Sintaxă - reguli pentru construirea de construcții speciale din simboluri ale alfabetului, cu ajutorul cărora este compilat un algoritm.

Semantica este un sistem de reguli pentru interpretarea constructelor limbajului. Astfel, programul este compilat conectând caracterele alfabetului în conformitate cu regulile sintactice și ținând cont de regulile semanticii.

12) Alfabetul limbajului C++. Cuvinte de serviciu din limbajul C++.

Litere mari și mici ale alfabetului latin;

2. Numerele de la 0 la 9;

3. Caractere speciale (-, /, ., , (), +, -), etc.;

4. Literele rusești pot fi folosite în comentarii, șiruri și constante de caractere.

Comentariul este format ca o succesiune de caractere delimitate in stanga de /* si in dreapta de */. Comentariul poate fi separat de stânga prin simbolul // (în acest caz, comentariul poate fi scris doar pe un singur rând).

/* Cu italice, scriu un comentariu la un program C; acesta poate fi scris pe mai multe rânduri */

// sau într-un rând, după două liniuțe. Cursivele sunt luate condiționat, pentru o mai bună digestibilitate.

// Cursivele se iau condiționat, pentru o mai bună digestibilitate.

Un identificator este o succesiune de litere, numere și liniuțe de subliniere care încep cu o literă sau liniuță de subliniere.

Literele mari și mici se disting prin identificatori care denotă cuvinte de serviciu, constante, constante de șir, semne de operație, semne de punctuație.



Cuvintele de funcție sunt identificatori rezervați în limbaj care nu pot fi aleși ca nume de variabile și constante.

Exemple de cuvinte de serviciu:

Alfabetul C++ include:

  • litere mari și mici latine și litere de subliniere;
  • cifre arabe de la 0 la 9;
  • personaje speciale: ? { } , ¦ () + - / % * . \ ‘ : ? < = > ! & # ~ - ; ^
  • caractere cu spații albe: spațiu, caractere de tabulatură, caractere de linie nouă.

Lexemele limbii sunt formate din simbolurile alfabetului:

  • identificatori;
  • cuvinte cheie (rezervate);
  • semne de operare;
  • constante;
  • separatoare (paranteze, punct, virgulă, caractere de spațiu).

Limitele jetoanelor sunt definite de alte jetoane, cum ar fi delimitatorii sau semnele de operare.

13) Reguli pentru crearea identificatorilor. Structura programului în C++.

ID - este numele obiectului programului. Litere latine, cifre și liniuțe de subliniere pot fi folosite în identificator. Literele mari și mici sunt diferite, de exemplu, sysop, SySoP și SYSOP sunt trei nume diferite. Primul caracter al unui identificator poate fi o literă sau un caracter de subliniere, dar nu un număr. Spațiile în nume nu sunt permise.

  1. Primul caracter al unui identificator C++ poate fi doar o literă.
  2. Următoarele caractere identificatoare pot fi litere, cifre și litere de subliniere.
  3. Lungimea identificatorului este nelimitată (de fapt, lungimea depinde de implementarea sistemului de programare).

Spre deosebire de regulile de formare a cuvintelor din C++, există restricții cu privire la utilizarea unei liniuțe de subliniere ca prima literă în identificatori. Caracteristicile de implementare fac nedorită utilizarea identificatorilor care încep cu acest caracter.

Lungimea unui identificator nu este limitată de standard, dar unii compilatori și linkeri impun restricții asupra acestuia. Un identificator este creat în etapa declarării unei variabile, funcție, tip etc., după care poate fi folosit în instrucțiunile de program ulterioare. Atunci când alegeți un identificator, țineți cont de următoarele:

  • identificatorul nu trebuie să se potrivească cu cuvintele cheie și numele obiectelor de limbaj standard utilizate;
  • nu este recomandat să începeți identificatorii cu un caracter de subliniere, deoarece acestea pot coincide cu numele funcțiilor sau variabilelor sistemului și, în plus, acest lucru reduce portabilitatea programului;
  • identificatorii utilizați pentru definirea variabilelor externe sunt supuși restricțiilor de linker (folosirea diferitelor linkere sau versiuni de linker impune cerințe diferite pentru numele variabilelor externe).

Constante, variabile, tipurile lor.

constante se numesc marimi imuabile. Există constante întregi, reale, caractere și șir. Compilatorul, după ce a distins o constantă ca simbol, o trimite la unul dintre tipuri în funcție de aspectul său (puteți specifica singur formatul constantei).

constante întregi.

Conform regulilor limbajului C, un număr fără virgulă zecimală și fără exponent este tratat ca un număr întreg. Prin urmare, compilatorul determină prin scrierea unei constante dacă este întreagă sau reală. Dacă trebuie să introduceți o constantă de tip lung, atunci trebuie să specificați semnul L sau l la sfârșitul numărului. Dacă, la scrierea unei constante, întregul începe cu cifra 0, atunci această constantă este interpretată ca un număr octal, dar dacă întregul începe cu caracterul 0x sau 0X, este interpretat ca un număr hexazecimal.

Variabil- aceasta este o „celulă” a memoriei RAM a computerului, în care poate fi stocată orice informație. În programare, o variabilă, ca și în matematică, poate avea un nume format dintr-o literă latină, dar poate fi formată și din mai multe caractere, un cuvânt întreg sau mai multe cuvinte.

Tipuri de date

În C++ toate variabilele au un anumit tip de date. De exemplu, o variabilă de tip întreg nu poate conține altceva decât numere întregi, în timp ce o variabilă în virgulă mobilă poate conține doar numere fracționale.

Tip de date atribuită unei variabile atunci când aceasta este declarată sau inițializată. Următoarele sunt principalele tipuri de date în limbajul C++ de care vom avea nevoie.

Tipuri de date de bază în C++

  • int- tipul de date întreg.
  • pluti- tip de date în virgulă mobilă.
  • dubla- tip de date în virgulă mobilă cu precizie dublă.
  • char- tipul de date caracter.
  • bool- Tipul de date boolean.

Declarație variabilă

Declarația unei variabile în C++ se desfășoară astfel: mai întâi, este specificat tipul de date pentru această variabilă și apoi numele acestei variabile.

15) Operații, operanzi, expresii în C++.

Operand - este o constantă, literală, identificatoare, apel de funcție, expresie index, expresie selector de elemente sau o expresie mai complexă formată dintr-o combinație de operanzi, semne operator și paranteze. Orice operand care are o valoare constantă se numește expresie constantă. Fiecare operand are un tip.

Dacă o constantă este folosită ca operand, atunci aceasta corespunde valorii și tipului constantei care o reprezintă. O constantă întreagă poate fi de tipul int, long, unsigned int, unsigned long, în funcție de valoarea și notația sa. O constantă de caractere este de tip int. O constantă în virgulă mobilă este întotdeauna de tip double.

Operand este o constantă, variabilă, element de matrice sau valoare returnată de o funcție. Un operand este o constantă, literal, identificator, apel de funcție, expresie index, expresie selector de elemente sau expresie mai complexă formată dintr-o combinație de operanzi, semne operator și paranteze.

Operațiune este o operație efectuată pe operanzi.

Expresie- o secvență de operanzi și semne de operație - o intrare în program, a cărei valoare calculată este caracterizată de tipul de date.

Pe obiecte în limbajul C pot fi efectuate diferite operații:

  • operațiuni de atribuire;
  • operațiuni de relație;
  • aritmetic;
  • joc de inteligență;
  • operatii in schimburi.

Rezultatul operației este un număr.

operația de atribuire

Operația de atribuire se notează cu simbolul = și se realizează în 2 etape:

  • se evaluează expresia din partea dreaptă;
  • rezultatul este atribuit operandului din partea stângă:

obiect = expresie;

Exemplu:

int a = 4; // variabilei a i se atribuie valoarea 4
intb;
b = a + 2; // variabilei b i se atribuie valoarea 6,

// calculat pe partea dreaptă

operațiuni de relație

Operații de bază de relație:

  • == echivalent - verificare pentru egalitate;
  • != not equal - verificați inegalitatea;
  • < Mai puțin;
  • > Mai mult;
  • <= mai mic sau egal;
  • >= mai mult sau egal.

Operatii aritmetice

Operații binare de bază, aranjate în ordinea descrescătoare a priorității:

  • multiplicare * ;
  • Divizia / ;
  • plus + ;
  • scădere - ;
  • restul diviziunii întregi % .

Operații unare de bază:

  • creștere (creștere cu 1) ++ ;
  • scăderea (scăderea cu 1) -- ;
  • schimbare de semn - .

Operații logice condiționale de bază:

  • && - Și (binar) - este necesară executarea simultană a tuturor operațiilor relației;
  • || - SAU (binar) - este necesară cel puțin o operație de relație;
  • ! - NOT (unar) - este necesară neexecutarea operației de relație.

Pentru a începe să creați mai întâi cele mai simple și apoi programe complexe în limbajul Pascal, să ne familiarizăm cu structura și elementele acestui limbaj de programare. Cu ajutorul sintaxei și semanticii, descriem fiecare element al limbajului. Ce înseamnă sintaxa și semantica lui Pascal? Regulile de construire a elementelor sunt stabilite de sintaxă, iar semantica este asociată cu sensul și regula folosirii unuia sau altuia element al limbajului, căruia i-au fost atribuite definiții sintactice.

Alfabet. Sintaxa si semantica:

Acum să vorbim despre alfabetul limbii Pascal. În primul rând, alfabetul este o listă de simboluri permise în limbă. Limbajul de programare Pascal are următorul set de simboluri definitorii de bază:

Litere latine mici și mari:

Caracter de subliniere: „_” Spațiu: „ „ Cifre arabe de la 0 la 9:

Lista semnelor de operare:

Secvența limitatorului:

Specificatori:

Cuvinte de serviciu:

Construcții elementare ale limbajului Pascal: nume, numere, șiruri. Numele (sau identificatorii) sunt elementele limbajului - etichete, constante, variabile, tipuri, proceduri, module, funcții, obiecte. Numele (identificatorul) în mediul Turbo Pascal include numere, litere din alfabetul latin și caracterul de subliniere. Nu există nicio distincție între litere mari și mici (PROGRAM, Program și program înseamnă același lucru).

Primul loc în identificator nu poate fi o cifră (adică 1program - nu este corect, program3 și program2file - astfel de identificatori sunt permise). Caracterul „_” poate fi în orice poziție (adică _program,program_, program_file sunt identificatori validi). Identificatorul poate fi de lungime nedeterminată, dar numai primele 63 de caractere din el sunt semnificative. Cuvintele de serviciu (rezervate) nu pot acționa ca nume.

La separarea numerelor, identificatorilor sau cuvintelor rezervate unul de celălalt, se folosesc separatori: spațiu și tabulare, avans de rând, comentariu. Oriunde în codul sursă al programului, puteți plasa un număr nedefinit de delimitatori în orice combinație. Acest lucru vă permite să vizualizați structura programului creat.

În codul sursă al programului, comentariile sunt incluse fie între paranteze „( ... )”, fie între paranteze de forma „(* ... *)”. Comentariile se pot întinde pe un număr nedefinit de rânduri. În Pascal, numerele sunt adesea reprezentate în notație zecimală (întreg și real). Semnul pozitiv al numărului nu este luat în considerare, deci poate fi omis. Numerele întregi sunt reprezentate sub forma fără virgulă zecimală:

395 -67 7808 +126

Iar cele reale sunt reprezentate sub forma cu virgulă zecimală:

597.2 1.79 -5.526 8.0004

Ocazional, este posibil să scrieți un număr folosind notația zecimală (notat cu E):

3E09 = 3*10^9 -5,34E6 = -5,34*10^6 29,3E-29 = 29,3*10^(-29)

Modalități de a seta limbile

Conceptul de limbaj. Definirea limbajului formal

În cazul general, o limbă este un set dat de simboluri și reguli care stabilesc modalități de a combina aceste simboluri între ele pentru a scrie texte semnificative. Baza oricărui limbaj natural sau artificial este alfabetul, care definește setul de caractere permise ale limbii.

Alfabet este un set numărabil de caractere permise ale limbii. Acest set de simboluri reprezintă v. Conform definiției formale, un alfabet nu trebuie să fie un set finit (numerabil), dar, în realitate, toate limbile existente sunt construite pe baza alfabetelor finite.

Șirul a este un șir peste alfabet V: A( V) dacă conține doar caractere care aparțin setului de caractere v. Pentru orice alfabet V un șir gol l poate fi sau nu un șir l ( V). Această condiție este specificată suplimentar.

În cazul în care un V este un alfabet, atunci:

V⁺ este ansamblul tuturor lanțurilor de peste alfabet V fără l;

V*- setul tuturor lanțurilor peste alfabet V, inclusiv l.

Egalitatea corectă este: V*=V + È(λ)

limba L peste alfabet V: L( v) se numește un subset numărabil de lanțuri de lungime finită din setul tuturor lanțurilor de pe alfabet V. Din această definiție rezultă două concluzii: în primul rând, setul de lanțuri lingvistice nu trebuie să fie finit; în al doilea rând, deși fiecare șir de caractere inclus în limbaj trebuie să aibă o lungime finită, această lungime poate fi arbitrar mare și nu este limitată formal de nimic.

Toate limbile existente se încadrează în această definiție. Majoritatea limbajelor naturale și artificiale reale conțin un număr infinit de șiruri. De asemenea, în majoritatea limbilor, nu există nicio limită pentru lungimea lanțului. Un șir de simboluri aparținând unei anumite limbi se numește propoziție a limbii, iar un set de șiruri de simboluri ale unei anumite limbi se numește L(V)-set de propoziții ale acestei limbi.

Două limbi L(V) și L"(V) coincid (echivalent): L'(V)=L(V) dacă L'(V)⊆L(V) și L(V)⊆L'(V) ).

Seturile de șiruri de caractere valide pentru limbi echivalente trebuie să fie egale.

Două limbi L(V) și L'(V) sunt aproape echivalente dacă L'(V)È(l)= L(V)È(l). Seturile de șiruri de caractere admisibile ale limbilor aproape echivalente pot diferi doar printr-un șir de caractere gol.

Deci, fiecare limbă este un set de lanțuri de simboluri peste un anumit alfabet. Dar, pe lângă alfabet, limbajul prevede și stabilirea regulilor de construire a lanțurilor admisibile, deoarece nu toate lanțurile de pe un anumit alfabet aparțin limbii. Simbolurile pot fi combinate în cuvinte sau lexeme - construcții elementare ale limbajului, propozițiile sunt construite pe baza lor - construcții mai complexe. Ambele sunt în general șiruri de simboluri și oferă câteva reguli de construcție. Astfel, este necesar să se precizeze aceste reguli, sau, strict vorbind, să se stabilească limba.



Limba poate fi setată în trei moduri:

1. Enumerarea tuturor șirurilor de limbă admisibile.

2. Specificarea metodei de generare a lanțurilor de limbi (setarea gramaticii limbii)

3. Definirea unei metode de recunoaștere a șirurilor de limbaj.

Prima dintre metode este pur formală și nu este folosită în practică, deoarece majoritatea limbilor conțin un număr infinit de lanțuri valide și este pur și simplu imposibil să le enumerați.

A doua metodă oferă o descriere a regulilor prin care sunt construite lanțurile lingvistice. Atunci orice lanț construit folosind aceste reguli din simboluri și alfabetul limbii va aparține limbajului dat.

A treia metodă presupune construirea unui dispozitiv logic (recunoaștere) - un automat care primește un șir de caractere la intrare și dă un răspuns la ieșire: acest șir aparține sau nu unui anumit limbaj.

Vorbind despre orice limbă, puteți evidenția sintaxa și semantica. În plus, traducătorii se ocupă și de construcții lexicale (lexeme) care sunt specificate de vocabularul limbii.

Sintaxa limbajului este un set de reguli care definesc constructele permise ale limbajului. Sintaxa definește „forma limbii” - specifică setul de șiruri de caractere care aparțin limbii. Cel mai adesea, sintaxa unei limbi poate fi specificată sub forma unui set strict de reguli, dar această afirmație este complet adevărată numai pentru limbajele pur formale.

Semantica limbajului este o secțiune a limbii care definește semnificațiile propozițiilor limbii. Semantica determină „conținutul limbii” - setează valorile pentru toate șirurile de limbă valide. Semantica pentru majoritatea limbilor este determinată de metode informale.

Vocabular este un ansamblu de cuvinte (vocabular) ale unei limbi. Un cuvânt sau unitate lexicală a unei limbi este o construcție care constă din elemente ale alfabetului limbii și nu conține alte construcții. Cu alte cuvinte, un element lexical poate conține doar caractere elementare și nu poate conține alte elemente lexicale.

Unitățile lexicale ale limbii ruse sunt cuvintele limbii ruse, iar semnele de punctuație și spațiile sunt separatoare care nu formează lexeme. Unitățile lexicale ale algebrei sunt numerele, semnele operațiilor matematice, denumirile de funcții și mărimile necunoscute. În limbajele de programare, unitățile lexicale sunt cuvinte cheie, identificatori, constante, etichete, semne de operație; au și separatori (virgule, paranteze, punct și virgulă etc.)

Folosind terminologia matematică, putem defini o limbă ca o entitate care include următoarele componente:

    Un set de informații sau „sensuri” care caracterizează planul conținutului unei limbi date;

    Multe „texte”, adică secvențe de semnale fizice care caracterizează planul de expresie al unui limbaj dat;

    O mapare definită pe un set de texte și care atribuie fiecărui element al acestui set unele elemente ale setului de semnificații, precum și o mapare inversă.

Primind un mesaj semnificativ, o persoană reacționează la el într-un anumit mod, cu alte cuvinte, informațiile semantice conținute în acest mesaj îi afectează comportamentul ulterior. Multe sensuri poate fi considerată totalitatea acestor informații percepute sau transmise de o persoană.

Elemente multe texte sunt texte sau propoziții ale unei limbi care respectă reguli stricte de construcție.

Sunt numite regulile care descriu textele incluse în limbaj ca șiruri de anumite caractere sintaxă, și regulile care determină latura semantică a lanțurilor incluse în limbaj, i.e. atribuindu-le anumite semnificatii, semantică limba dată.

Cea mai importantă sarcină este de a studia traducerea dintr-o limbă în alta ca un proces algoritmic exact. Sarcina traducerii din limba A în limba B este de a mapa setul de texte din limba A în setul de texte din limba B, lăsând invariantă imaginea semantică a oricărui text. Traducerea poate fi semantică sau formală. Pentru a înțelege mai bine aceste două moduri, introducem următoarea notație:

T DAR- multe texte lingvistice DAR,

T LA- multe texte lingvistice LA,

S- multe sensuri ale limbilor DARși LA(pentru simplitate, presupunem că seturile semantice de limbi coincid),

f DAR- o funcție care afișează T DARîn S,

f B- o funcție care afișează Sîn T LA .

    Traducere semantică (semantică):

f DAR : T DARS f B : ST LA

Să fie ceva text tT DAR, apoi:

    f DAR (t) = sS

    f B (s) t'T LA .

Deci, traducerea textului tT DAR este textul tT LA .

    Traducere formală.

Această metodă constă în specificarea explicită a unui algoritm pentru calcularea unei funcții care este o suprapunere de funcții f DARși f B. Notăm această suprapunere prin eu AB .

eu AB = f B (f DAR (t)).

3.2. Backus forme normale

Definiție : Se numește un limbaj care descrie proprietățile unei alte limbi metalimbaj.

Astfel, metalimba care descrie limba rusă poate fi aceeași limbă rusă sau o altă limbă vorbită, de exemplu, engleza. Descrierea limbajelor de programare prin mijloace convenționale este justificată numai dacă este utilizată numai pentru studiul acestor limbaje de către programatorii utilizatori. În prezent, o serie de limbi sunt utilizate pentru a descrie sintaxa limbilor algoritmice pentru procesarea și studiul ulterioare prin mijloace matematice. Acestea sunt așa-numitele limbaje metasintactice. De asemenea, sunt dezvoltate limbaje speciale pentru a descrie semantica - limbaje metasemantice.

Cel mai frecvent limbaj metasintactic este Beckus forme normale(sau formule metalingvistice). Scopul principal al formularelor Backus este de a prezenta într-o formă concisă și compactă reguli strict formale și lipsite de ambiguitate pentru scrierea principalelor structuri ale limbajului de programare descris.

Clasele de obiecte care sunt utilizate în formularele Backus:

    Un lanț de simboluri de bază ale limbii.

    Numele constructelor limbajului descris sau așa-numitele variabile metalingvistice. Semnificația variabilelor metalingvistice este șirurile simbolurilor de bază ale limbajului descris.

    Legătura metalingvistică :: = . Conectează părțile din stânga și din dreapta ale formulei.

Fiecare variantă este un lanț format din variabile metalingvistice și simboluri de bază. Pentru a construi o construcție definită printr-o formulă, trebuie să alegeți o variantă de construcție din partea dreaptă a formulei și, folosind formulele adecvate, să înlocuiți câteva lanțuri de simboluri de bază în locul fiecărei variabile metalingvistice. Variantele din dreapta formulei sunt separate prin conjunctivul metalingvistic |, adică „sau”. O variabilă metallingvistică este desemnată prin cuvinte cuprinse între paranteze unghiulare< >, care explică sensul construcției descrise.

Numerele sunt definite în limbă folosind următoarele reguli:

    <число>:: = <число без знака> | + <число без знака>| – <число без знака>

    <число без знака> :: = <десятичное число> | <порядок> | <десятичное число> <порядок>

    <десятичное число> :: = <целое без знака> | <правильная дробь> | <целое без знака> <правильная дробь>

    <порядок> :: = e <целое>

    <правильная дробь> ::= .<целое без знака>

    <целое> ::= <целое без знака> | + <целое без знака> | – <целое без знака>

    <целое без знака> :: = <цифра> | <целое без знака> <цифра>

    <цифра> :: = 0|1|2|3|4|5|6|7|8|9

Exemplul 7: Concluzie după formulele numărului 1.5 e -2

<число>, <число без знака>, <десятичное число> <порядок>, <целое без знака> <правильная дробь> <порядок>, <цифра> <правильная дробь> <порядок>, 1 <правильная дробь> <порядок >, 1. <целое без знака> <порядок>, 1. <цифра> <порядок>, 1. 5 <порядок>, 1. 5e<целое>, 1. 5 e-<целое без знака>, 1. 5e-<цифра> , 1. 5 e-2 .

O caracteristică interesantă a formulelor metalingvistice este prezența în ele recursiuni , acestea. utilizarea structurilor descrise în sine pentru a descrie unele structuri.

  • Serghei Savenkov

    un fel de recenzie „rare”... parcă s-ar grăbi undeva