Lex (computerprogramma)

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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.