Lex (informatika)
From Wikipedia, the free encyclopedia
Remove ads
A lex egy program, amely segítségével lexikális szabályokból lexikális elemző programkódot lehet generálni.[1][2] A lexet gyakran, de nem feltétlenül, a yacc parserrel kombinálva használják. A legtöbb Unix rendszer szabványos lexikális elemzője a lex.

A lex egy szövegfájlból olvassa be a lexikális szabályokat, s kimenetként C nyelvű kódot állít elő.
Több kereskedelmi és nyílt forráskódú implementációja is létezik. Az egyik népszerű nyílt forráskódú lex a flex (fast lexical analyzer).
Remove ads
A lex fájl szerkezete
A lex bemeneteként szolgáló lex fájlok szövegfájlok, melyek három részre oszlanak. Az egyes részeket dupla százalékjelet tartalmazó sorok határolják.
Definíciós rész %% Szabályok %% C kód
A definíciós részben lehet makrókat definiálni és header fájlokat importálni C szintaxissal. Ide tulajdonképpen tetszőleges C kód írható. Az egész bemásolódik a generált C forrásállományba.
A szabályok rész a lex file legfontosabb része. Egy-egy szabály egy szabályos kifejezést és egy hozzá tartozó C kódot tartalmaz. Amikor az elemző felismeri az adott szabályos kifejezést, akkor végrehajtja a hozzárendelt C kódot.
A záró C kód is bemásolódik a generált C forráskódba. Jellemzően olyan függvények implementációja kerül ide, amelyek a szabályokból meghívódnak. Nagyobb programoknál célszerű ezt a részt külön állományban tárolni és fordítási időben belinkelni.
Példa
Ez egy példa input file a flex nevű lex verzióhoz.
/*** definíciós rész ***/
%{
/* Ez a kód bemásolódik a generált C forrásba*/
#include <stdio.h>
%}
/* Ez az opció azt mondja meg, hogy csak egy input file kerüljön beolvasásra. */
%option noyywrap
%%
/*** Szabályok ***/
[0-9]+ {
/* Az yytext változó tartalmazza az illeszkedő szövegrészt. */
printf("Találtam egy számot: %s\n", yytext);
}
. { /* Minden más karaktert ignorálunk. */ }
%%
/*** C kód. Ez is bemásolódik a generált C forrásba. ***/
int main(void)
{
/* Meghívjuk az elemzőt, majd kilépünk.*/
yylex();
return 0;
}
Remove ads
Jegyzetek
Fordítás
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
