Lex (computerprogramma)
computerprogramma Van Wikipedia, de vrije encyclopedie
Lex is een computerprogramma voor het genereren van lexical analysers (of: scanners, lexers). Lex wordt meestal gebruikt in combinatie met de parsergenerator Yacc.
De eerste versie van lex werd ontwikkeld door Eric Schmidt en Mike Lesk. Lex werd de standaard scanner-generator van het Unix-besturingssysteem, en is gestandaardiseerd als onderdeel van de POSIX-standaard.
Werking
De invoer van lex is een specificatie van de te genereren scanner. Op basis van deze specificatie genereert lex een scanner geschreven in C.
Een lex-specificatie voor een scanner bestaat uit 3 onderdelen:
- Een definitie
- Hier worden eventueel macro's gedefinieerd die later nodig zijn en headers geïmporteerd. Alle code in de definitie wordt onveranderd gekopieerd naar het gegenereerde C-programma.
- De regels
- Hier wordt het feitelijke gedrag van de scanner gedefinieerd. Dit gebeurt door reguliere expressies te koppelen aan C-code. Wanneer de scanner op text stuit die overeenkomt met een reguliere expressie wordt de bijbehorende C-code uitgevoerd.
- C-code
- Hier wordt alle overige C-code geplaatst die door de scanner gebruikt wordt. Als er in de regels bepaalde functies aangeroepen worden, kunnen deze functies hier gedefinieerd worden.
Voorbeeld
De onderstaande lex-specificatie genereert een scanner die het aantal karakters en het aantal regels van zijn invoer telt.[1]
int num_lines = 0, num_chars = 0;
%%
\n ++num_lines; ++num_chars;
. ++num_chars;
%%
main()
{
yylex();
printf( "# of lines = %d, # of chars = %d\n",
num_lines, num_chars );
}
Andere versies
Flex (fast lexical analyzer) is een veelgebruikt alternatief voor lex. Flex werd oorspronkelijk geschreven door Vern Paxson rond 1987 en is backward compatible met lex. Flex++ genereert scanners in C++.
GPLEX is een ander veelgebruikt alternatief voor lex. GPLEX genereert scanners in C# in plaats van C of C++.
Zie ook
Externe links
Wikiwand - on
Seamless Wikipedia browsing. On steroids.