Pok-3-wyk-Slajd16
Wyrażenia regularne w LEX’e(2)
Analizator leksykalny wygenerowany przez program LEX operuje na danych wejściowych będących znakami zapisanymi zgodnie z konwencją ASCII. Aby ułatwić przygotowanie wyrażeń regularnych, LEX umożliwia wykorzystanie tzw. klas znaków. Klasa to alternatywa znaków, którą można zapisać w uproszczony sposób korzystając z operatora zakresu od – do. Przykładowo klasa [a-z] oznacza dowolny znak z zakresu od małej litery „a” do małej litery „b”, czyli „a”, lub „b”, lub „c”, itd. aż do „z”. Analogicznie można stworzyć klasę dla cyfr. Klasa [0-9] oznacza dowolna cyfrę z zakresu od 0 do 9.
Zanegowanie klasy oznacza dowolny znak spoza klasy. [^a-z] oznacza więc dowolny znak, ale nie małą literę. Będzie to więc zarówno dowolna wielka litera, jak i cyfra czy znak specjalny.
Klasy oprócz zakresu mogą zawierać również jawnie wymienione znaki. Tak oto klasa [a-zXY] oznacza dowolną małą literę z zakresu od „a” do „z” lub wielką literę X lub wielką literę Y.
Kolejnym uproszczeniem dla przygotowujących wyrażenie regularne jest symbol specjalny . (kropka). Oznacza on dowolny znak różny od symbolu końca linii.
Symbol końca linii, znak tabulacji i inne sekwencje specjalne zapisujemy w sposób identyczny jak w języku C, czyli poprzedzając odpowiednią literę znakiem \ (backslash).