Lex (computerprogramma)

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

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.

Inhoud

[bewerken] 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 macros 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.

[bewerken] 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 );
                 }

[bewerken] 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++.

[bewerken] Zie ook

[bewerken] Externe links

[bewerken] Bronnen, noten en/of referenties

Bronnen, noten en/of referenties:

  1. Dit voorbeeld komt uit de handleiding van flex
Persoonlijke instellingen
Naamruimten

Varianten
Handelingen
Navigatie
Informatie
Hulpmiddelen
Afdrukken/exporteren
In andere talen