Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afStefan Paulsen Redigeret for ca. et år siden
1
FEN 2013-01-29Sprog1 Lidt om sprog Definition: Et sprog over et endeligt alfabet (sigma) er en mængde af strenge dannet af tegn fra . Eksempel: Lad = {a, b} Sprog over alfabetet kan være: { , a, aa, aab}-- er den tomme streng { , a, b, aa, ab, ba, bb}-- og kan dannes over et- {abba, baba} -- hvert alfabet
2
FEN 2013-01-29Sprog2 Programmeringssprog Et program i et programmerings-sprog, P er en streng dannet af sprogets grundsymboler: –Hvad er det? som overholder visse regler givet ved P’s grammatik /* hello.cs */ public class Startup { public static void Main() { System.Console.WriteLine("Hello World!"); } }//class En parser er et program, som afgør om en streng til hører et sprog
3
FEN 2013-01-29Sprog3 Lidt om sprog * betegner mængden af alle strenge, som kan dannes over alfabetet . For = {a, b} er: * = {a, b}* = { , a, b, aa, ab, ba, bb, aaa, aab, aba,…} Med denne notation kan vi beskrive flere sprog over : –{x {a, b}* x < 8}-- x betegner længden af x -- ( == antal tegn i x) –{x {a, b}* n a (x) n b (x)}-- n a (x) betegner antal a-er i x Sproget med mindst 4 a’er og højest 12 b’er?
4
FEN 2013-01-29Sprog4 Sprog er mængder… Derfor kan vi danne nye sprog ved mængdeoperationer: –Lad L 1 og L 2 være sprog over , da er L 1 L 2, L 1 L 2 og L 1 - L 2 også sprog over Da ethvert sprog L over er en delmængde af *, kan vi tale om det komplementære sprog L’ = * - L
5
FEN 2013-01-29Sprog5 Konkatenering Vi kan konkatenere sprog ligesom strenge: –Lad x og y *, så er xy strengen, hvor symbolerne i y er skrevet efter x –Tilsvarende definerer vi for L 1, L 2 * konkateneringen af L 1 og L 2: L 1 L 2 = { xy x L 1 y L 2 }
6
FEN 2013-01-29Sprog6 Mere om konkatenering Det ses let, at konkatering bl.a. er associativ, hvorfor vi kan snakke om konkatenering af mere end to strenge: –Lad a , x * og L * for et eller andet alfabet –Vi skriver da: a k = aa … a-- k a’er x k = xx … x-- k x’er k = … = {x * x = k} Er k=0, så definerer vi: a 0 = , x o = og 0 = { }
7
FEN 2013-01-29Sprog7 Kleene Star (Closure) Vi kan også konkatenere sprog: –Lad a , x * og L * for et eller andet alfabet –Vi skriver da: L k = LL … L-- k L’er L * betegner tilsvarende sproget af alle strenge, som kan dannes ved at konkatenere 0 eller flere strenge i L. Hermed: L * = {L k | k N} Specielt er L 0 = { } Operationen L * kaldes Kleene Star eller Kleene closure af L
8
FEN 2013-01-29Sprog8 Eksempel: Regulære Sprog Regulære sprog er strenge over et alfabet, som kan dannes ud fra regulære udtryk: Lad være et alfabet, a og r og s strenge over Regulære udtryk: –Basis: r = a er et regulært udtryk. Den tomme streng ε er et regulært udtryk. –Operationer: Hvis r og s er regulære udtryk, så er: Alternativer’|’ r | s | ε Konkatenering:rs | ε Gentagelse (0 eller flere)’*’(r | s)* –også regulære udtryk.
9
Flere eksempler: Det tomme sprog Sproget Pal: alle palindromer over {a, b} (fx strenge som abba eller bab). Mængden af valide Java identifiers Sproget Expr: lovlige regneudtryk med identifieren a, de binære operationer + og * samt parenteser (fx strenge som a, a+a*a og (a+a*(a+a))) FEN 2013-01-29Sprog9
10
Flere eksempler: Sproget Bal: strenge indeholdende parenteser, hvor parenteserne balancerer (fx strenge som , (), (a+a*a) og (a+a*(a+a)), men også ((()))). FEN 2013-01-29Sprog10
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.