Програмски преводиоци 1/К1 2019
Први колоквијум 2019. године одржан је 28. октобра и трајао је 90 минута. Поставка рока доступна је са странице предмета (архива).
1. задатак
Поставка
За дати коначни аутомат навести:
- Класни дијаграм који илуструје пројектни шаблон (ГоФ десигн паттерн) Стање.
- Написати програмску реализацију датог аутомата на основу шаблона из тачке а).
а | б | ц | Прихвата | |
---|---|---|---|---|
→ С1 | С2 | С1 | С2 | 0 |
С2 | С2 | С1 | 1 |
Решење
Решење дела под а се може наћи на слици, док је под б испод:
class FSM {
interface State {
boolean accepting();
State handleInput(char input);
}
private StateS1 S1 = new StateS1();
private StateS2 S2 = new StateS2();
private StateError ERROR = new StateError();
class StateS1 implements State {
public boolean accepting() {
return false;
}
public State handleInput(char input) {
switch (input) {
case 'a':
case 'c':
return S2;
case 'b': return S1;
default: return ERROR;
}
}
}
class StateS2 implements State {
public boolean accepting() {
return true;
}
public State handleInput(char input) {
switch (input) {
case 'b': return S2;
case 'c': return S1;
default: return ERROR;
}
}
}
class StateError implements State {
public boolean accepting() {
return false;
}
public State handleInput(char input) {
return ERROR;
}
}
// ...
}
2. задатак
Поставка
Методом позиција одредити минимални детерминистички аутомат који је описан следећим регуларним изразром:[сиц]
b(a | (bc)*)+
Решење
У синтаксном стаблу је чвор + означен као поништив јер је његов подизраз поништив, па самим тим може резултовати празном секвенцом (празна секвенца поновљена један или више пута је и даље празна секвенца).
1 | 2, 3, 5 |
---|---|
2 | 2, 3, 5 |
3 | 4 |
4 | 2, 3, 5 |
5 | - |
а | б | ц | Прихвата | |
---|---|---|---|---|
→ 1 | 2, 3, 5 | 0 | ||
2, 3, 5 | 2, 3, 5 | 4 | 1 | |
4 | 2, 3, 5 | 0 |
а | б | ц | Прихвата | |
---|---|---|---|---|
→ А | Б | 0 | ||
Б | Б | C | 1 | |
C | Б | 0 |
3. задатак
Поставка
За све секвенце облика потребно је:
- конструисати граматику која описује овакве секвенце
- конструисати потисни аутомат који описује овакве секвенце
Решење
Граматика која препознаје овакве секвенце може да изгледа овако:
- <С> → <А> <Б>
- <А> → аб <А>
- <А> → ε
- <Б> → цца
- <Б> → ц <Б>
- <Б> → ц <Б> а
Једно решење ставке под б, које укључује једно стање потисног аутомата, изгледа овако:
а | б | ц | ─┤ | |
---|---|---|---|---|
∇ |
|
РЕЈЕЦТ |
|
РЕЈЕЦТ |
А | РЕЈЕЦТ |
|
РЕЈЕЦТ | РЕЈЕЦТ |
Б |
|
РЕЈЕЦТ |
|
РЕЈЕЦТ |
C |
|
РЕЈЕЦТ | РЕЈЕЦТ | АЦЦЕПТ |
D | РЕЈЕЦТ | РЕЈЕЦТ | РЕЈЕЦТ | РЕЈЕЦТ |
Алтернативно решење са више стања изгледа овако:
а | б | ц | ─┤ | |
---|---|---|---|---|
∇ |
|
РЕЈЕЦТ |
|
РЕЈЕЦТ |
А | РЕЈЕЦТ |
|
РЕЈЕЦТ | РЕЈЕЦТ |
а | б | ц | ─┤ | |
---|---|---|---|---|
∇ | РЕЈЕЦТ | РЕЈЕЦТ |
|
РЕЈЕЦТ |
А |
|
РЕЈЕЦТ |
|
РЕЈЕЦТ |
а | б | ц | ─┤ | |
---|---|---|---|---|
∇ | РЕЈЕЦТ | РЕЈЕЦТ | РЕЈЕЦТ | РЕЈЕЦТ |
А |
|
РЕЈЕЦТ | РЕЈЕЦТ | АЦЦЕПТ |