Gramatyka leksykalna
W informatyce gramatyka leksykalna to gramatyka formalna określająca składnię tokenów . Program jest napisany przy użyciu znaków, które są zdefiniowane przez strukturę leksykalną używanego języka. Zestaw znaków jest odpowiednikiem alfabetu używanego w dowolnym języku pisanym. Gramatyka leksykalna określa zasady rządzące podziałem sekwencji znaków na podsekwencje znaków, z których każda reprezentuje indywidualny token. Jest to często definiowane za pomocą wyrażeń regularnych .
Na przykład gramatyka leksykalna wielu języków programowania określa, że literał łańcuchowy zaczyna się od znaku „ i trwa do momentu znalezienia pasującego znaku ( ucieczka czyni to bardziej skomplikowanym), że identyfikator jest ciągiem alfanumerycznym (litery i cyfry, zwykle również dopuszczanie podkreśleń i niedopuszczanie początkowych cyfr) oraz że literał całkowity jest ciągiem cyfr. Tak więc w następującej sekwencji znaków „abc” xyz1 23 tokeny to string , identifier i number (plus tokeny spacji), ponieważ znak spacji kończy sekwencję znaków tworzących identyfikator. Ponadto, niektóre sekwencje są klasyfikowane jako słowa kluczowe – generalnie mają one taką samą formę jak identyfikatory (zwykle słowa alfabetyczne), ale są klasyfikowane oddzielnie; formalnie mają inny typ tokena.
Przykłady
Poniżej znajdują się wyrażenia regularne dla wspólnych reguł leksykalnych (na przykład C).
Literał łańcuchowy bez zmiany znaczenia (cytat, po którym następują cudzysłowy, kończący się cudzysłowem):
"[^"]*"
Literał ciągu znaków ze zmianą znaczenia (cytat, po którym następują znaki ucieczki lub cudzysłowy, kończące się cudzysłowem):
"(\.|[^\"])*"
Literał całkowity:
[0-9]+
Dziesiętny literał całkowity (bez wiodącego zera):
[1-9][0-9]*|0
Szesnastkowy literał liczby całkowitej:
0[Xx][0-9A-Fa-f]+
Literał liczby całkowitej ósemkowej:
0[0-7]+
Identyfikator:
[A-Za-z_$][A-Za-z0-9_$]*