Aalborg den 11.02.2003

Kompilerkonstruktion: Leksikalsk analyse

Det første trin i en kompiler er at læse kildeteksten til det program man gerne vil have kompileret. Til dette formål bruges en lexer (også kaldet en scanner) og trinnet kaldes leksikalsk analyse.

Det lexeren gør er at dele kildeteksten op i tokens (ord). Som et eksempel kildeteksten totalPris = pris + pris * momsSats; er en streng totalPris, efterfulgt af et tegn =, efterfulgt af en streng pris, efterfulgt af et tegn +, osv. Fordelen ved have kildeteksten splittet op i tokens er, at disse er nemmere at arbejde videre med i det næste faser af kompileringen, parsningen.

Til at beskrive tokens anvendes regulære udtryk. Regulære udtryk er et simpel sprog som I sikkert kender dels fra f.eks. Windows søgefacilitet, hvor man kan find alle filer der starter med abc med følgende regulære udtryk abc*.*.

Litteratur

Appel kapitel 2 "Lexical Analysis".

Læsevejledning

I sektion 2.1 beskrives tokens og token typer samt, hvordan token kan specificeres i et naturligt sprog. Moralen er, at det er de naturlige sprog dårlige til. Derfor anvendes i stedet et sprog, der kaldes regulære udtryk. Disse er netop emnet for sektion 2.2. Regulære udtryk er centrale for den leksikalske analyse så brug tid på af forstå dem.

Endelig automater en en måde at implementere regulære udtryk på i et programmeringssprog som VisualBasic eller Pascal. Det er også ved vha. endelig automater de værktøjer vi bruger i kurset implementerer en leksikalsk analysator. De endelige automater er emnet for sektion 2.3 og ideen er at forklaret hvad værktøjerne vi bruger gør, altså at "kigge under motorhjelmen" på f.eks. JavaCC og SableCC.

Sektion 2.4 omhandler NFA'er. Disse er ikke anvendelig i praksis, men er en meget brugbare notation til at visualisere regulære udtryk. Herudover kan en NFA altid konverteres til en DFA og disse er praktisk anvendelige.

Leksikalske analysatorer kodes sjælent i hånden fordi, der eksisterer gode værktøjer der kan generere den del af en kompiler ud fra bl.a. regulære udtryk. To sådanne værktøjer (JavaCC og SableCC) til Java beskrives i sektion 2.5. I skal højest sandsynlig bruge en af disse i jeres projekt, så det er en god ide at lære at bruge dem.

Opgaver

Appel opgave 2.1, 2.2, 2.4 og 2.5.

Venlig hilsen
Kristian Torp