lexémy. Interpunkce, speciální znaky a operace v C

Abeceda programovacího jazyka C je založena na sadě znaků z tabulky kódů ASCII. Zahrnuje:

Malá a velká písmena latinské abecedy;

Čísla od 0 do 9;

Znak "_" (podtržítko);

Sada speciálních znaků: " ( ) , | + - % / \ ; " : ?< > = ! & # ~ ^ . *

Jiné symboly.

Abeceda C se používá ke konstrukci slov, která se v C nazývají lexémy. Existuje pět typů lexémů:

Identifikátory;

Klíčová slova;

Znaky (symboly) operací;

Literály (z anglického konstanta) jsou záznamem ve zdrojovém kódu počítačového programu, který představuje pevnou hodnotu. 4 typy literálů: celé číslo, reálné číslo, znak, řetězec. Číselné literály se zapisují přímo jako číslo. Řetězcové literály jsou řetězce znaků ohraničené uvozovkami. Znakové literály obsahují jeden znak. ;

Oddělovače (mezera, vodorovné a svislé tabulátory, nový řádek, komentáře).

6. Klíčová slova jazyka C.

Klíčová slova jsou vyhrazené identifikátory, které mají specifický význam. Klíčová slova jazyka C jsou vyhrazena, tzn. nemůžete je použít pro jiné účely, jako je například zadání názvu proměnné. 32 klíčových slov.

Smyčky: for, while, do;

Rozhodování a volba: if, else, switch, case, default.

Přechody: break, continue, goto;

Typ dat: char, int, short, long, unsigned, sign, float, double, struct, union, typedef, void.

Třídy paměti: auto, extern, register, static.

Misc: sizeof, return

Použitelné pouze na některých systémech: enum

Kvalifikátor typu: const, volatile.

7. Interpunkční znaménka, speciální znaky a operační znaky v jazyce C.

Interpunkční znaménka a speciální znaky:

Čárka

; středník

: dvojtečka

Otazník

"závorka jednoduché uvozovky

"" závorka v uvozovkách

(levá závorka

) pravá závorka

[ levá hranatá závorka

] pravá obdélníková závorka

(levá složená závorka

) pravá složená závorka

< левая угловая скобка

> pravoúhlý držák

Vykřičník

| vertikální lišta

/ dělení znamení

\ znaménko inverzního dělení

% procent

& ampersand

^ víko, dům

* hvězdička

Jazyk C obsahuje velké množství vestavěných operací. Existují čtyři třídy operací: aritmetické, logické, bitové a porovnávací operace. Kromě nich existují také některé speciální operátory, jako je operátor přiřazení.

Obecný tvar operátoru přiřazení je: název proměnné=výraz;

Jediný příkaz přiřazení může přiřadit stejnou hodnotu mnoha proměnným. Chcete-li to provést, použijte operátor vícenásobného přiřazení: x=y=z=0;

Složené přiřazení je variací operátoru přiřazení, ve kterém je zápis zkrácen a zápis je pohodlnější. Například operátor x=x+10; lze zapsat jako x+=10;

Aritmetické operace.

Odečítání, také unární mínus

Přidání

* násobení

/ divize

% zbytek dělení

Přírůstek neboli zvýšení přidá 1 k hodnotě proměnné.

Snížení nebo snížení

Priorita provedení aritmetických operátorů:

Nejvyšší: ++, --, - (unární mínus), *, /, %

Nejnižší: +, - .

Operace se stejnou prioritou se provádějí zleva doprava. Pomocí závorek můžete změnit pořadí výpočtů.

Srovnávací operace:

> více

>= větší nebo rovno

< меньше

<= меньше или равно

Ne rovné

Logické operace

NE, popření

Operace s ukazateli:

& - operace přijímání adresy: vrací adresu proměnné, jejíž název následuje za označením operace.

* - nepřímé adresování: vrací hodnotu zapsanou na adrese, na kterou odkazuje ukazatel.

Další operace:

Provozní podmínky?

Operátor? lze často použít místo příkazu if-then-else.

Výraz 1? Výraz2: Výraz3;

Nejprve se vyhodnotí Výraz1, pokud je pravdivý, vyhodnotí se Výraz2 a jeho hodnota se přiřadí celému výrazu; pokud je Výraz1 nepravdivý, vyhodnotí se Výraz3 a celému výrazu se přiřadí jeho hodnota.

y=x>9? 100:200; proměnné y bude přiřazena hodnota 100.

sizeof udává velikost (v bajtech) operandu vpravo.

operace přetypování typu (type): přemění hodnotu, která za ní následuje, na typ definovaný klíčovým slovem uzavřeným v závorkách.

Operátor čárky spojí dva výrazy do jednoho a zajistí, že levý výraz bude vyhodnocen jako první. Typickým případem použití je zahrnutí dalších informací kontrolní výraz pro smyčku.

Operace na strukturách a odborech.

Operátor členství se používá ve spojení s názvem struktury (nebo unie) k určení prvku této struktury (nebo unie). Pokud name je název struktury a člen je název prvků zadaných v šabloně struktury, pak name.member definuje tento prvek struktury.

-> nepřímé adresování. Používá se ve spojení s ukazatelem na strukturu (nebo spojení) k identifikaci jednoho nebo jiného prvku těchto struktur (nebo spojení). Předpokládejme, že ptrstr je ukazatel na strukturu a člen je prvek určený v šabloně struktury. Potom ptrstr->member určí, že se jedná o člen struktury, na kterou odkazuje ukazatel.

Jazyková abeceda

Přednáška 1 Skladba jazyka

Jsou představeny základní pojmy pro veškerou další prezentaci: jaké jsou nejjednodušší „stavební bloky“ všech textů v programovacím jazyce, co se rozumí datovým typem, jaké jsou vestavěné datové typy v jazyce C++.

V textu v jakémkoli přirozeném jazyce jsou čtyři hlavní prvky: symboly, slova, fráze a věty. Programovací jazyk také obsahuje podobné prvky, pouze slova se nazývají lexémy (elementární konstrukce), fráze se nazývají výrazy a věty se nazývají operátory.

Všechny texty v jazyce jsou psány pomocí jeho abecedy. Abeceda C++ obsahuje:

  • velká a malá písmena latinská písmena a podtržítko (_), které se používá spolu s písmeny;
  • arabské číslice od 0 do 9;
  • speciální znaky jako +, *, ( a &;
  • znaky mezery - mezera, tabulátor, nový řádek a znaky formátu.

Jazyková abeceda ve standardu se nazývá základní znaková sada. Kromě toho existuje koncept "implementační znakové sady" - celá sada znaků dostupných na tento počítač. Tato sada obsahuje základní sadu jako podmnožinu.

Ze základní sady znaků se skládají jazykové tokeny a direktivy preprocesoru. K psaní komentářů se používají znaky z implementační sady. Kompilátor ignoruje komentáře.

Existují následující typyžeton:

  • jména (identifikátory);
  • klíčová slova;
  • provozní značky;
  • separátory;
  • literály (konstanty).

Hranice tokenů jsou určeny jinými tokeny, jako jsou oddělovače nebo operační značky.

Tokeny programovacího jazyka jsou podobné slovům v přirozeném jazyce. Tokeny jsou například konstanta 128 (ale ne její část 12), jméno Vasia, klíčové slovo goto a znak operátoru sčítání +. Výrazy a operátory jsou tvořeny z lexémů.

  • Výraz určuje pravidlo pro výpočet určité hodnoty. Například výraz a + b určuje pravidlo pro výpočet součtu veličin a a b.
  • Operátor specifikuje úplný popis nějaké akce.

Operátory se dělí na spustitelné a nespustitelné, jednoduché a složené. Spustitelné operátory určují akce s daty. Nespustitelné operátory slouží k popisu dat, proto se často nazývají popisné operátory nebo jednoduše popisy. Například int a ; je operátor pro popis celočíselné proměnné a.

Složený příkaz nebo blok je skupina příkazů uzavřená ve složených závorkách. Bloky lze vnořovat.

Každý prvek jazyka je definován syntaxí a sémantikou. Syntaktické definice stanovit pravidla pro konstrukci jazykových prvků a sémantika určuje jejich význam a pravidla použití.

Soubor popisů a operátorů kombinovaných jediným algoritmem tvoří program.

do současnosti. Učebnice byla certifikována ministerstvem školství Ruská federace, je zařazena na seznamy doporučené literatury na mnoha univerzitách v Rusku a sousedních zemích. Učebnicové materiály obsažené v tomto kurzu byly částečně aktualizovány a přepracovány. V roce 2010 byla učebnici udělena Petrohradská vládní cena „Za vynikající počiny v oblasti vyšších a odborné vzdělání„jako součást vzdělávacího a metodologického komplexu o programovacích jazycích.

Součástí tohoto komplexu je také workshop o C/C++ a učebnice jazyků C# a Pascal [, postavené na stejném principu. Relevantní školicí kurzy lze nalézt na této stránce. Komplex zahrnuje více než 250 individuálních verzí laboratorních úloh pro studijní skupinu 20 osob (všechny možnosti naleznete v učebnici) a více než 1000 testových otázek. Učitelé budou mít prospěch z prezentací přednášek. Na stránkách internetové školy programování http://ips.ifmo.ru si můžete ověřit správnost některých laboratorní práce pomocí systému automatické testování programy.

Účelem tohoto kurzu je poskytnout stručnou a jasnou prezentaci hlavních vlastností jazyka C++ v souladu s normou ISO/IEC 14882 (2003). Pro psaní programů při tréninku můžete použít např. kompilátor gcc popř prostředí Microsoft Visual C++ 2005 Express Edition. Tyto softwarových produktů jsou distribuovány zdarma a podporují standard poměrně dobře.

Zašlete laskavou a konstruktivní kritiku, stejně jako návrhy na zlepšení kurzu, autorovi na adresu [email protected].

Složení jazyka

Prezentaci k přednášce si můžete stáhnout.

V textu v jakémkoli přirozeném jazyce jsou čtyři hlavní prvky: symboly, slova, fráze a věty. Obsahuje podobné prvky programovací jazyk, pouze slova se nazývají lexémy (elementární konstrukce), fráze - výrazy a věty - operátory.

Jazyková abeceda

Všechny texty v jazyce jsou psány pomocí něj abeceda. Abeceda C++ obsahuje:

  • velká a malá písmena latinky A podtrhnout(_), které se používá spolu s písmeny;
  • Arabské číslice od 0 do 9;
  • speciální znaky, například +, *, (a &;
  • prázdné znaky- mezera, znaky tabulátoru, nový řádek a znaky formátu.

Jazyková abeceda ve standardu se nazývá základní sada postavy. Kromě toho existuje koncept " implementační znaková sada" je celá sada znaků dostupných na daném počítači. Tato sada obsahuje základní sadu jako podmnožinu .

Postavy základní sestavy jsou tvořeny lexémy jazyka A direktivy preprocesoru. Pro psaní komentářů se používají znaky z implementační sady. Kompilátor ignoruje komentáře.

lexémy

Existují následující typy lexémy:

  • jména (identifikátory);
  • klíčová slova;
  • provozní značky;
  • separátory;
  • literály (konstanty).

Hranice tokenů jsou určeny jinými tokeny, jako jsou oddělovače nebo operační značky.

Tokeny programovacího jazyka jsou podobné slovům v přirozeném jazyce. Například tokeny jsou konstanta 128 (ale ne její část 12), jméno Vasia, klíčové slovo goto a znak operace sčítání +. Výrazy a operátory jsou tvořeny z lexémů.

  • Výraz určuje pravidlo pro výpočet určité hodnoty. Například výraz a + b určuje pravidlo pro výpočet součtu veličin a a b.
  • Operátor udává úplný popis nějaké akce.

Operátory se dělí na spustitelné a nespustitelné, jednoduché a složené. Spustitelný operátoři určují akce s daty. Nespustitelné příkazy slouží k popisu dat, proto se jim často říká operátory popisu nebo jen popisy. Například, int a; - Tohle operátor popisu celočíselná proměnná a.

Složený operátor nebo blok je skupina příkazů uzavřených ve složených závorkách. Bloky lze vnořovat.

Každý prvek jazyka je definován syntax A sémantika. Syntaktické definice stanoví pravidla pro konstrukci jazykových prvků a sémantika určuje jejich význam a pravidla použití.

Tvoří se sada popisů a operátorů kombinovaných jediným algoritmem naprogramovat.

Cesta od textu programu ke spustitelnému kódu

Chcete-li spustit program, musíte jej přeložit do jazyka, kterému procesor rozumí – do strojových kódů. Tento proces se skládá z několika fází.

Nejprve je zdrojový kód programu zpracován preprocesorem. Vyhledá v textu programu „své“ direktivy (instrukce, příkazy), které začínají symbolem # („hash“), a provede je. Direktivy preprocesoru umožňují vložit do programu text z jiných souborů, vyloučit fragmenty kódu z procesu kompilace nebo nahradit některé fragmenty jinými.

Text programu zpracovaný preprocesorem (ve standardu C++ se nazývá „kompilační jednotka“) je přenesen do kompilátoru, který provádí lexikální a rozebrat. Ve fázi lexikální analýza lexikální analyzátor ( skener) postupně prohledává proud symbolů přicházejících na jeho vstup, které tvoří zdrojový text programu, a vybírá platné tokeny. Jejich hranice jsou určeny oddělovači, prázdné znaky a další lexémy.

Ve fázi rozebrat analyzátor (analyzátor) Na základě jazykové gramatiky rozpoznává výrazy a operátory vytvořené z lexémů. To odhaluje syntaktické chyby . Také hotovo sémantická analýza, jehož účelem je také odhalit různé druhy sémantických chyb (například opakované popis proměnné) .

Pokud nejsou v programu nalezeny žádné chyby, fáze se provede generování kódu.Konkrétní typ kódu závisí na tom, jaký typ aplikace vytváříme: Windows popř. SÍŤ. Pokud se jedná o běžnou aplikaci Windows, je vytvořena objektový modul- obrobek spustitelný program PROTI strojové kódy. Pro aplikaci. NET kód je generován v jazyce CIL nezávislém na systému.

Další osud tohoto kódu závisí také na typu vytvářená aplikace. Pro obyčejné Windows aplikace linker(synonyma - linker, link editor) formuláře spustitelný modul programy, spojující další objektové moduly s objektovým modulem, včetně těch, které obsahují prvky standardní knihovny, které se používají v libovolném programu (například k provedení výstupu na obrazovku). Pokud se program skládá z několika zdrojových souborů, jsou kompilovány samostatně a ve fázi kombinovány

Název parametru Význam
Téma článku: lexémy
Rubrika (tematická kategorie) Programování

Abeceda

Standard C99 rozlišuje dvě sady znaků obsažené v abecedě: základní a rozšířenou. Základní sada obsahuje následující znaky:

Velká písmena a malá písmena Latinka;

arabské číslice;

Speciální znaky: “ { } , | () + - / % \ ; ‘ : ? < = > _ ! & # ~ ^ . *

Rozšířená znaková sada musí být buď prázdná, nebo musí obsahovat například znaky národní abecedy. Například paní Visual Studio 2008 umožňuje použití některých podmnožin prostoru Unicode, včetně azbuky.

Jíst speciální skupiny tří znaků (tříznakové sekvence / trigrafové sekvence), které jsou ve fázi předběžného zpracování převedeny na jiné znaky, např. ??= odpovídá #, ??( odpovídá [, ??/ zápasy \ a další.

Následující lexémy jazyka jsou tvořeny ze znaků abecedy.

1. Identifikátory - sada znaků sloužících k identifikaci objektů (proměnné, funkce, třídy, datové typy atd.) Identifikátory se zapisují v souladu s pravidly - jedná se o posloupnost písmen, číslic a podtržítek, nezačínající číslicí . Identifikátory v jazycích C a C++ rozlišují velká a malá písmena, na rozdíl například od Pascalu.

Zvláštní druh identifikátory jsou klíčová (servisní) slova - jsou vyhrazena pro speciální použití a nelze je přepsat.

Standard C99 zavádí následující klíčová slova: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, register, limited, return , short, sign, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while, _Bool, _Complex, _Imaginary

2. Konstanty jsou objekty, ke kterým se přistupuje „podle hodnoty“ (terminologie E. Dijkstra, který definoval rozdíl mezi konstantami a proměnnými podle způsobu jejich použití v programech – pomocí názvu proměnné označujeme adresa dané a použití konstantní, zapíšeme, tedy jeho význam). C podporuje čtyři jednoduchý typ konstanty - znak, celé číslo, plovoucí desetinná čárka a řetězec. Typ konstanty určuje, jak je uložena v paměti a jaké operace jsou s ní povoleny. Hodnota typu je určena formou zápisu konstanty (jejího vzhledu).

3. Známky operací.

4. Separátory. Oddělovače jsou mezera, tabulátor a nový řádek.

5. Komentáře jsou nejjednodušším prvkem. Jejich účelem je zlepšit lidskou čitelnost textu, jsou nezbytné pro údržbu programů a jsou prvkem vývojové technologie software. Jazyk podporuje dva typy komentářů – blokové a vložené.

Blokové komentáře zahrnují libovolnou sekvenci znaků na jednom nebo více řádcích, začínají a končí speciální kombinace znaky /* a */, které nelze použít v žádném jiném kontextu.

Řádkové komentáře jsou umístěny na jednom řádku a začínají dvojitým lomítkem

// Komentář se musí vejít na konec řádku

a mezi tyto znaky můžete psát víceřádkové komentáře

Pokud nějaký text programu zabírá několik řádků, ale musí být kompilátorem zpracován jako jeden řádek, použijte symbol ʼʼ\ʼʼ.

printf("Toto je \

Lexémy - pojem a typy. Klasifikace a vlastnosti kategorie "Lexemes" 2017, 2018.

Přečtěte si také

  • - Lexémy

    Abeceda jazyka Přednáška 1 Složení jazyka Jsou představeny základní pojmy pro veškerou další prezentaci: jaké jsou nejjednodušší „stavební kameny“ všech textů v programovacím jazyce, co se rozumí datovým typem, jaké jsou vestavěné datové typy v jazyce C++.

  • V... Téma psaní vlastním jazykem mě pronásleduje už asi půl roku. Nedal jsem si za cíl "zabít", CoffeeScript, TypeScript JILM


    , tisíce z nich, chtěl jsem jen porozumět kuchyni a tomu, jak se obecně píší. K mému nepříjemnému překvapení většina těchto jazyků používá Jison (Bison for JavaScript ), a to nespadalo do mého úkolu - „rozumět“, protože ve skutečnosti Jison dělá vše za vás, sbírá AST podle vámi nastavených pravidel (Jison jako takový skvělý nástroj


    , který za vás odvede lví díl práce, ale to teď není o něm).


    Nakonec jsem se pokusem a omylem (nebo přesněji čtením článků a reverzním inženýrstvím) naučil psát své vlastní plnohodnotné programovací jazyky, od dělení zdrojového textu na lexémy až po jeho překlad do kódu JS. To stojí za zmínku tento manuál K mému nepříjemnému překvapení většina těchto jazyků používá Jison (Bison for není vázán na


    , byl vybrán pouze pro rychlost vývoje a čitelnost, takže můžete svůj "Lisp"/"Python"/"vaši zbrusu novou syntaxi" napsat v jakémkoli jazyce, který znáte. Také až do okamžiku psaní kompilátoru (v našem případě překladatele) se proces psaní jazyka neliší od procesů vytváření jazyků kompilovaných v/A.S.M./bitový kód JVM/bitový kód LLVM atd K mému nepříjemnému překvapení většina těchto jazyků používá Jison (Bison for.


    , což znamená, že tato příručka není omezena na vytvoření jazyka, do kterého lze přeložit

    Veškerý kód, který bude napsán v tomto (a následujících článcích), je na Github Tagy pro usnadnění označují začátek a konec článků.

    Trochu teorie zdrojový kód ve finálním kódu JS postupuje takto:


    zdrojový kód -(Lexer)-> tokeny -(Parser)-> AST -(Kompilátor)-> kód js

    Co se tady děje:

    1) Lexer

    Zdrojový kód našeho programu je rozdělen do tokenů. Jednoduše řečeno, je to in zdrojový text klíčová slova, literály, symboly, identifikátory atd.


    Tito. na výstupu z tohoto ( Téma psaní vlastním jazykem mě pronásleduje už asi půl roku. Nedal jsem si za cíl "zabít"):


    a = true if a console.log("Ahoj, lexer")

    Dostáváme toto (krátká verze):


    Protože Téma psaní vlastním jazykem mě pronásleduje už asi půl roku. Nedal jsem si za cíl "zabít" odsazení-sensitive a nemá explicitní výběr bloků se závorkami ( a ), bloky jsou odděleny odsazením (INDENT a OUTDENT), které v podstatě nahrazují závorky.



    
    Nahoru