- •Лабораторне заняття № 1
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 2
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 3
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 4
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 5
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 6
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 7
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 8
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 9
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 10
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 11
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 12
- •1. Теоретичні відомості
- •1. Стара графіка.
- •2. Черепахова графіка (Turtle graphics).
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 13
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 14
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 15
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 16
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •43018, М. Луцьк, вул.Львівська, 75
2.1. Програма роботи та завдання.
2.1.1. Створити в середовищі Turbo Prolog програму з прикладу та дослідити її.
2.1.2. Задати різні варіанти цілей та проаналізувати отримані результати.
2.1.3. Зафіксувати результати.
2.1.4. Виправити наявні помилки.
2.1.5. Зафіксувати у звіті вихідні код створеної програми та логіку її роботи.
2.1.6. Відповісти письмово на контрольні питання.
Контрольні питання:
У чому суть лексикографічного упорядкування?
Лабораторне заняття № 9
Тема: Розв’язання задачі синтаксичного аналізу
Мета роботи. Розглянути задачу синтаксичного аналізу для деякої примітивної мови паскалеподібного типу; проаналізувати отримані результати.
1. Теоретичні відомості
Програма працює наступним чином:
1. Перша фраза сканера, s_program, приймає список лексем і перевіряє чи може він бути трансформований в список тверджень.
2. Предикат s_statement приймає той же список лексем і перевіряє чи зможуть лексеми бути разділені на індивідуальні твердження, кожне з яких завершується крапкою з комою.
3. Предикат s_statement перевіряє чи будуть перші лексеми з списку лексем допорожніимими твердженнями. Якщо так, тоді твердження повертається в структуру, а ті лексеми, що залишились повертаються в s_statement.
а) Чотири фрази s_statement відповідають чотирьом типам операторів псевдопаскалю. Вони аналізуються послідовно.
б) Потім проводиться порівняння з виразами.
4. Предикати sexp, s_exp1 і s_exp2 працюють аналогічно з s_statment, але лише стосовно виразів.
Якщо системі побудувати запит:
goal: tokl("b=2; if b then a=1 else a=2 fi; do a=a-1 while a ; ", Ans), s_program(Ans,Res)
тоді вона побудує відповідь: Ans = ["b", "=",...] Res = program([assign("b", int(2)), if_then_else(var("b"), assign("a",int(1))........])
2. Практична частина
domains
toklist = string*
predicates
tokl(string, toklist)
clauses
tokl(Str, [H | T]):-fronttoken(Str,H,Str1),!, tokl(Str1,T).
tokl(_,[]).
/* Друга частина програми є синтаксичним аналізатором */
domains
program = program(statementlist)
statementlist = statement*
/* визначення типу оператора */
statement = if_Then_Else(exp,statement, statement); if_Then(exp,statement);
while(exp,statement); assign(id,exp)
/* визначення виразу */
exp = plus(exp,exp); mines(exp,exp); var(id); int(integer)
id = string
predicates
s_program(toklist, program)
s_statement(toklist, toklist, statment)
s_statementlist(toklist, toklist, statmentlist)
s_exp(toklist, toklist, exp)
s_exp1(toklist, toklist, exp, exp)
s_exp2(toklist, toklist, exp)
clauses
s_program(List1, program(Statementlist)):- s_statementlist(List1, List2, Statementlist),
List2 = [].
s_statementlist([], [],[]):-!.
s_statementlist([List1, List4, [Statement | Program]):- s_statement(List1, List2, Statement), List2 = [";" | List3], s_statementlist(List3, List4, Program).
s_statement(["if" | List1], List7, if_theh_else(Exp,Statement1, Statement2)):-
s_exp(List1,List2, Exp), List2 = [ "then" | List3], s_statement(List3, List4, Statement1),
List4 = ["else" | List5],!, s_statement(List5, List6, Statement2), List6 = ["fi" | List7].
s_statement([" if.....
. .
s_statement([ " do .....
. . .
s_statement([Id | List1], List3, assign(Id,Exp)):-
isname(Id), List1 = ["=" | List2], s_exp(List2,List3,Exp).
s_exp(List1,List3,Exp):- s_exp2(List1,List2,Exp1), s_exp1(List2,List3,Exp1,Exp).
s_exp1(["+" | List1],List3,Exp1,Exp):-!, s_exp2(List1,List2,Exp2),
s_exp1(List2,List3,plus(Exp1,Exp2), Exp).
s_exp1(["-" ........
s_exp1(List,List,Exp,Exp).
s_exp2([Int | Rest],Rest, int(I)):-str_int(Int,I),!.
s_exp2([Id | Rest],Rest,var(Id)):-isname(Id).
