Aceasta faza a compilatorului realizeaza traducerea textului programului intr-o forma mai usor de prelucrat de catre celelalte componente. Analizorul lexical considera textul primit la intrare ca fiind format din unitati lexicale pe care le recunoaste producand atomi lexicali. Un atom lexical poate sa fie de exemplu, un cuvant cheie al limbajului (for, while, etc) dar si un numar sau un nume. Nu exista o corespondenta biunivoca intre sirurile de intrare si atomii lexicali. Adica, daca pentru atomul lexical corespunzator cuvantului cheie while exista un singur sir de intrare, pentru atomul lexical corespunzator unui numar intreg pot sa existe foarte multe siruri de intrare. Una dintre deciziile ce trebuie luate la inceputul proiectarii unui compilator consta din stabilirea atomilor lexicali. De exemplu, se pune problema daca sa existe cate un atom lexical pentru fiecare operator de comparatie (<, <=, >, >=) sau sa existe un unic atom lexical - corespunzator operatiei de comparatie. in primul caz generarea de cod poate sa fie mai simpla. Pe de alta parte existenta unui numar mare de atomi lexicali poate complica in mod exagerat analiza sintactica. in general, operatorii care au aceeasi prioritate si asociativitate pot sa fie grupati impreuna. Rolul unui analizor lexical este de a traduce sirurile de intrare in atomi lexicali. Un atom lexical este reprezentat printr-un cod numeric care specifica clasa acestuia si o serie de atribute care sunt specifice fiecarei clase. Astfel, poate sa existe clasa operatorilor relationali pentru care un atribut trebuie sa se specifice tipul concret al operatorului. Tipul atomului lexical este necesar pentru analiza sintactica in timp ce valoarea atributului este semnificativa pentru analiza semantica si generarea de cod. Pentru un atom lexical de tip numar atributele vor descrie tipul numarului si valoarea acestuia. Un analizor lexical apare in general ca o functie care interactioneaza cu restul compilatorului printr-o
interfata simpla : ori de cate ori analizorul sintactic are nevoie de un nou atom lexical va apela analizorul lexical care ii va da atomul lexical urmator...