Lex (software): Porovnání verzí
Smazaný obsah Přidaný obsah
m robot přidal: ko:Lex odebral: fr:Lex et yacc; kosmetické úpravy |
Formulace, styl |
||
Řádek 1:
{{Upravit}}
== Struktura lex souboru ==
Struktura vstupu je záměrně velice podobná
''Sekce definic''
▲Struktura je velice podobná souboru pro výše zmíněný [[yacc]]. Soubor je rozdělen do tří oblastí, oddělených dvoumi znaky procenta '%', jak ukazuje následující příklad.
%%
''
%%
''
* Oblast '''definice''' je určena pro difinici [[Makro (software)|maker]] a import [[Hlavičkový soubor|hlavičkových souborů]] v jazyce [[Programovací jazyk C|C]]. Je zde možno zapsat i kód jazyka C, který bude bezezměn vložen do vygenerovaného souboru.▼
* Oblast '''pravidel''' je nejdůležitější, protože jsou zde umístěny vzory, které jsou v podstatě [[Regulární výraz|regulárními výrazy]]. Tyto vzory jsou zapsany v jazyce C a vykonány ve chvíli, kdy je nalezena schoda na vstupu s daným regulárním výrazem. Toto je základ toho jak lex funguje.▼
▲*
* Oblast '''kódu v jazyce C''' obsahuje příkazy a [[Funkce (programování)|funkce]], které jsou bezezmněny zkopírovány do výsledného souboru. Příkazy jsou defakto kódem, který je volán pomocí daných pravidel z oblasti pravidel. Při využití ve velkých aplikacích je lepší tuto sekci umístit do externího souboru a ten nalikonkovat ve chvíli [[Překladač|překladu]].▼
▲*
▲*
== Příklad souboru pro lex ==
Následující kód je ukázkou vstupního
<pre>
/*** Oblast definice ***/ %{
Řádek 54 ⟶ 50:
yylex();
return 0;
}
</pre> Po
▲Po předání vstupu flexu je tento vstup konvertován do souboru jazyka C, lex.yy.c. Tento výsledek může být přeložen do spustitelného programu, který na výstup vypíše všechny řetězce čísel. Příklad vstupu:
abc123z.!&*2ghj6
program vypíše:
Saw an integer: 123
Saw an integer: 2
Řádek 64:
== Využití Lexu s jinými nástroji pro programování ==
===
Lex a syntaktické analyzátory, jako je například [[yacc]] nebo [[GNU bison|Bison]], se často využívají společně. Analyzátor využívá [[Formální gramatika|
== Související články ==
* [[Flex lexical analyser]]
* [[Yacc]]
== Externí odkazy ==
*
{{překlad|en|Lex_(software)|350504908}}
|