Грамматика и семантика вещественных чисел, описанная с помощью языка программирования Prolog

Автор работы: Пользователь скрыл имя, 03 Июня 2012 в 11:52, практическая работа

Описание работы

Вещественное число – текстовая строка, состоящая из целой и (или) дробной частей, впереди возможно размещение знака (“+” / “-”) числа, целая часть отделяется от дробной части символом точки (“.”).

Семантика (смысл) языка – интерпретирующая функция, ставящая в соответствие синтаксическим компонентам определенные значения.

Файлы: 1 файл

Prolog.docx

— 17.44 Кб (Скачать файл)

1. Постановка задачи

 

1.1. Определение

 

Вещественное число – текстовая строка, состоящая из целой и (или) дробной частей, впереди возможно размещение знака (“+” /  “-”) числа, целая часть отделяется от дробной части символом точки (“.”).

 

Семантика (смысл) языка – интерпретирующая функция, ставящая в соответствие синтаксическим компонентам определенные значения.

 

 

1.2. Задание № 1

 

Написать грамматику вещественных чисел для системы счислений  с основанием М=2.

 

 

1.3. Задание № 2

 

Создать Prolog – программу грамматического разбора для языка вещественных чисел.

 

 

1.4. Задание № 3

 

Определить интерпретирующую функцию, равную количеству цифр в целой и  дробной частях числа.

 

 

2. Грамматика вещественных  чисел

(Задание №1)

 

 

ВЕЩ à ЗНАК МОДУЛЬ

ВЕЩ à МОДУЛЬ

ЗНАК à ‘+’ | ’-’

МОДУЛЬ à ‘.’ ЦИФРА ДРОБЬ

МОДУЛЬ à ЦИФРА ОСТАТОК

ОСТАТОК à

ОСТАТОК à ‘.’ ДРОБЬ

ОСТАТОК à ЦИФРА ОСТАТОК

ДРОБЬ à

ДРОБЬ à ЦИФРА ДРОБЬ

ЦИФРА à ‘0’ | ‘1’

 

 

3. Prolog – программа грамматического разбора

(Задания  № 2, № 3)

 

DOMAINS

el=char*

 

PREDICATES

treal(el,integer,integer)

modul(el,integer,integer)

dmodul(el,integer)

ostatok(el,integer,integer)

drob(el,integer)

cifra(char)

 

CLAUSES

treal(['+'|X],KC,KD):-

modul(X,KC,KD).

treal(['-'|X],KC,KD):-

modul(X,KC,KD).

treal(X,KC,KD):-

modul(X,KC,KD).

modul(['.'|D],KC,KD):-

KC=0,

dmodul(D,KD).

modul([C|O],KC,KD):-

cifra(C),

ostatok(O,K1,KD),

KC=K1+1.

dmodul([C|D],KD):-

cifra(C),

drob(D,KD1),

KD=KD1+1.

ostatok([],0,0).

ostatok(['.'|D],KC,KD):-

KC=0,

drob(D,KD).

ostatok([C|O],KC,KD):-

cifra(C),

ostatok(O,K1,KD),

KC=K1+1.

drob([],0).

drob([C|D],KD):-

cifra(C),

drob(D,KD1),

KD=KD1+1.

cifra('0'):-!.

cifra('1'):-!.

 

GOAL

treal(['+','0','.','1'],KOLICH_CEL,KOLICH_DROB).

%treal(['+','1','1','.','0'],KOLICH_CEL,KOLICH_DROB).

%treal(['+','0','1','.','1','1'],KOLICH_CEL,KOLICH_DROB).

 

4. Результат

 

 

При проверке первой строки из раздела GOAL получаем результат:

 

KOLICH_CEL=1, KOLICH_DROB=1

1 Solution

 

 

При проверке второй строки из раздела GOAL получаем результат:

 

KOLICH_CEL=2, KOLICH_DROB=1

1 Solution

 

 

При проверке третьей строки из раздела GOAL получаем результат:

 

KOLICH_CEL=2, KOLICH_DROB=2

1 Solution


Информация о работе Грамматика и семантика вещественных чисел, описанная с помощью языка программирования Prolog