Tabel 4-1: Grundprincipper i regulære udtryk | ||
Sammensætning (Concatenation) | xy | Mønsteret består af x fulgt af y |
Alternativ (Alternation) | x|y | Mønsteret består af enten x eller y |
Arbitrær gentagelse (Arbitrary repetition) | x* | Mønsteret består af strengen x gentaget nul eller flere gange |
Kilde: Introduction to Compiling Techniques, 2nd Edition (Tabel 5.2 side 75) |
Tabel 4-2: Udvidelser af grundprincipperne brugt af FLEX | ||
Karakter klasser | [0-9] | Et valg af karakterer i mængden; i dette tilfælde 0|1|2|3|4|5|6|7|8|9. Det er muligt at specificere mere end én mængde, fx [A-Za-z] |
NOT operator | ^ | Angives som første tegn for at invertere det følgende, fx [^A-Z] betyder at der ikke må startes med stort bogstav |
Arbitrær karakter | . | Matcher alle tegn med undtagelse af ny linie |
Enkel gentagelse | x? | Nul eller én forekomst af x. I Svendsk bruges fx '-?' i definitionen for et tal, for at angive at der max. må forekomme ét minus-tegn. |
Ikke-nul gentagelse | x+ | x gentaget én eller flere gange |
Specificeret gentagelse | x{n, m} | x gentaget mellem n og m gange |
Begyndelse af linie | ^x | Match kun x i begyndelsen af en linie |
Slutning af linie | x$ | Match kun x i slutningen af en linie |
Kontekst følsom | ab/cd | Match kun ab når fulgt af cd |
Kilde: Introduction to Compiling Techniques, 2nd Edition (Tabel 5.3 side 76) |
Tabel 4-3: Udvidelser der involverer tegn med speciel betydning | ||
Litterære strenge | "x" | Brug x og ikke en evt. speciel betydning. Dette kan især være brugbart i Svendsk, når der skal tjekkes for "()". |
Litterære tegn | \x | Hvis x er en operator, bruges x. Nyttigt i Svendsk, når vi i tekst-strenge bruger "-tegnet. |
Definitioner | {navn} | Erstat med predefineret mønster navn. |
Kilde: Introduction to Compiling Techniques, 2nd Edition (Tabel 5.4 side 76) |
/* Definitioner */ kommentar ";>"[^"<;"\n]*"<;" mellemrum [ \t\n]+ tegn [^\[\]\(\)] // ASCII undt. '[', ']', '(', ')' skriv_tekst ({tegn})* %% /* Regler */ {mellemrum} { } {kommentar} { } ">>" { return(FELT_START) } "<<" { return(FELT_STOP) } %% /* Kode */ // Ingen kode endnu |
Eksempel 4-1: Et FLEX program |