Lexikalanalys

Från Wikipedia
Uppslagsordet ”Lexer” leder hit. För andra betydelser, se Lexer (olika betydelser).

Lexikalanalys är inom datalogi den process som består i att en serie tecken tolkas och omvandlas till lexikala element, eller s.k. tokens, såsom enskilda ord eller delar av ord. Tokenisering är processen att bryta ned en textsträng till dessa enskilda tokens. Lexikalanalys innebär att indata omvandlas till exempelvis reserverade ord, konstanter, operatorer och parameterar.

Exempel[redigera | redigera wikitext]

Indata till en Google-sökning (alltså det användaren skriver i sökrutan) kan se ut så här:

bison OR oxe

Den funktion som utför själva sökningen måste på något sätt få veta att användaren vill hitta alla sidor som innehåller antingen ordet "bison" eller ordet "oxe" eller båda. Lexikalanalysen är det steg i parsningen av sökuttrycket som identifierar "bison" och "oxe" som de ord som användaren vill söka efter, och "OR" som den operator som innebär att användaren är intresserad av att söka både efter sidor som innehåller "bison" och sidor som innehåller "oxe". I exemplet ovan är "bison" och "oxe" konstanter, och "OR" är ett reserverat ord. Lexikalanalysen innebär att detta sökuttryck skiljs från till exempel bison or oxe eller "bison OR oxe".

Däremot kan syntaktiska fel inte identifieras under analysen. Ansvaret för syntaktisk analys ankommer på den komponent som tar emot de lexikala element som lexikalanalysen genererar. Ett uttryck i programspråket C som

int hej(int "text" int)
{
 printf void "mera text" if;
};

kan tolkas korrekt under lexikalanalysen, men är syntaktiskt felaktigt. Den komponent som kontrollerar ett uttrycks syntaktiska eller grammatiska korrekthet kallas en "parser".

Ett vanligt sätt att skapa den komponent som hanterar lexikalanalysen är att använda program som lex eller flex. Ett exempel på ett Java-baserat lexikaliseringsprogram är JFlex. Två exempel på datorprogram som genererar programkod för en parser är yacc och bison.

Externa länkar[redigera | redigera wikitext]