Предикат tokl є сканером; він аналізує стрічку і
перетворює її в список лексем.
Всі предикати, які починаються з s є предикатами
синтаксичного анализу. В цьому прикладі вхідний текст є
программою на псевдопаскалі. Вона включає оператори: IF
THEN ELSE, IF THEN, DO WHILE і ASSIGNMENT. Для
побудови виразів використовуються дії додавання і
віднімання над змінними і константами цілого типу.
Програма працює наступним чином:
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", "=",...]
106