Laboration 2: ändliga automater och reguljära uttryck
- Kod att börja med. (Tänk på det där med paket. Pröva lösningen av del (a) med TestFSA.java, som förutsätter att den är löst)
- Relevanta overheadbilder
Utgå från given klass FSA.
(a) Skriv en metod som säger om automaten accepterar en sträng eller inte:
public boolean accepts(String input)
Relativt lätt.
(b) Skriv en metod som givet en LinkedList av strängar returnerar en LinkedList med dem av strängarna som automaten accepterar.
public LinkedList<String> filter(LinkedList<String> strings)
Lättare?
(c) Nedan har vi en lista med acceptabla ord och en med oacceptabla. Skriv en automat som skiljer de acceptabla från de oacceptabla. Gör det så enkelt för dig som möjligt. Du behöver inte fånga hela svenskans grafotax/fonotax. Skriv även ett reguljärt uttryck som gör precis samma klassificering som automaten.
Acceptabla ord
skral skriva skrå skraltig springa språk straff stråle |
Oacceptabla ord
sfalt skr skmas smrisk sprk sptatt stkisk stmisk |
Lite klurigare?
(d) Skriv ett program som givet en automat (hanterad som ovan), ett reguljärt uttryck, och en godtycklig fil med ord (textfil, ett ord per rad), kontrollerar att automaten och uttrycket är överens om vartenda av dessa ord. Om de inte är det skall programmet skriva ut en "protest".
Lite pyssligt.
VG-uppgift
(e) Skriv en metod som givet en heltal int returnerar en LinkedList<String> med alla de strängar som automaten accepterar och vars längd är lika med det givna heltalet eller mindre (kortare).
public LinkedList<String> generate(int length)
Mer krävande.
