Uge 34, 35
Gennemgået materiale den 27 august 2010 (Forventet)
Regulære udtryk
[Martin, kap. 1.5, 3.1] (Der forventes kendskab til resten af kap. 1 samt kap. 2.)- specifikation og genkendelse af tekststrenge (eksempel: PowerForms)
- strenge, sprog, rekursive definitioner, induktionsbeviser. Her er induktionsbeviset fra slidesne i alle detaljer.
- regulære udtryk, regulære sprog
- Java: dRegAut.RegExp klassen
Endelige automater
[Martin, kap. 3.2-3.5]- definition af endelige automater og deres sprog
- skelnelighed
- produkt-konstruktionen (∪, ∩, -, ∁)
- Java: klassen dRegAut.FA og metoderne accepts, intersection, minus, og complement
- eksempel på brug af automater: modellering og verifikation af systemer
Opgaver
[Martin]:
Regulære udtryk- 3.2 (s.112)
- 3.9 (a-e) (s.113)
- 3.10 (a-b) (s.113)
- 3.12 (s.114)
- 3.17 (e) (s.115)
- 3.18 (s.115)
- 3.19 (a-c) (s.116)
- 3.33 (a-c) (s.117) (brug produktkonstruktionen)
Perspektiverende opgaver:
(Brug max 20 min. på disse opgaver.)- Syntaksen for URL'er er formelt specificeret i RFC 1738, Uniform Resource Locators (URL) (se afsnit 5. BNF for specific URL schemes). Der anvendes en speciel notation:
- alfabetsymboler står i "..." og specielle ASCII tegn skrives med hexcode %xx
- | bruges i stedet for +
- *X bruges i stedet for X*
- 1*X betyder X*X
- [X] betyder (X+Λ)
- http://130.225.16.54:80
- http://com
- http://x//%CA%FE%
- Syntaksen for email-adresser er formelt specificeret i RFC 2822, Internet Message Format (se afsnit 3.4 Address Specification). Hvis man f.eks. optrævler definitionen af addr-spec,
så ender man med et (stort) regulært udtryk - forudsat at man (f.eks.)
ikke tillader kommentarer inden i kommentarer (dvs. at en ccomment kan være en comment). Undersøg om følgende strenge er lovlige email-adresser (dvs. matcher addr-spec):
- a@b.c
- "@"@[1.2.3.4]
- #*!@!*#
Programmeringsprojekt
I de kommende uger skal I - baseret på en udleveret kode-skabelon - opbygge jeres egen dRegAut pakke i Java.- Dokumentation for hele dRegAut pakken
- dRegAut.jar - forelæserens samlede dRegAut pakke (uden kildekode)
Udleverede programdele til dRegAut pakken:
- FA.java (skabelon hvor de interessante metoder ikke er implementeret)
- Alphabet.java
- State.java
- StateSymbolPair.java
- AutomatonNotWellDefinedException.java
Ovenstående dele refererer til følgende klasser, som gennemgåes i uge 8:
Opgaver:
- J1:
Gennemlæs disse programstumper, overbevis dig om at de gør det ønskede, og udvid programpakken med dem:
- J2:
Implementer flg. metoder (ialt. ca. 80 linjers programkode):
- FA.accepts
- FA.intersection
- FA.union
- FA.minus
-
J3: Skriv en stump Java-kode, der gør som følger.
- bygger de to FA'er, der er vist i [Martin] Fig. 3.13 (b) og (c),
- laver difference-automaten af de to FA'er, (bemærk at det er L3-L2, ikke L2-L3) - vi kalder resultatet M,
- checker med accepts at strengene 1001001 og 10010 bliver accepteret af M, og at Λ og 10111 ikke bliver accepteret, og
- udskriver M med toDot-metoden.
Obligatoriske afleveringsopgaver
Der vil i løbet af kurset blive stillet 3 obligatoriske afleveringsopgaver (ikke strengt obligatoriske, men på det kraftigste anbefalede ;) i forbindelse med programmeringsprojektet. Det er tilladt at aflevere opgaverne i grupper af op til 3 personer. Afleveringsfristen for første delopgave er: Lørdag d. 4 september, kl. 12:00. Du skal aflevere opgaven i en email til Sigurd.Første afleveringsopgave:
Lav en automatiseret løsning af [Martin, opg. 3.33 (e)] (s.117) vha. din egen FA.java implementation. Skriv et veldokumenteret Java-program der konstruerer den ønskede automat ved hjælp af dRegAut-pakken.
Afleveringen skal bestå af:
- FA.java: Din løsning på opgave J1, J2.
- Martin3_33.java: Din løsning på opgave J3.
- difference.png: En tegning lavet med dot-værktøjet, af automaten som dit program har konstrueret
Husk at skrive navn i emailen
Hvis flere er sammen om en opgave, angiv venligst dette i en kommentar i toppen af FA.java