logo search
TurboProlog / Документация / TOM_1

Синтаксическая проверка

Перед выполнением программы компилятор прежде всего проверяет код

программы на соответствие синтаксису Турбо Пролога. При этом система

всегда проверяет, чтобы значения различных типов доменов не перемешива-

лись. Как показано в Главе 2, при обнаружении системой ошибки, она возв-

ращает управление редактору и располагает курсор в том месте программы,

где была найдена ошибка.

При выводе сообщения о синтаксической ошибке в коде вашей программы,

Турбо Прологом наряду с номером ошибки, выдается сообщение об ошибке (ес-

ли присутствует файл PROLOG.ERR ). Если вы не сообщение об ошибке остает-

ся для вас неясным, или хотите узнать больше о различных случаях, в кото-

рых возникает данная ошибка, нажмите клавишу F1. При этом вы получите до-

полнительную информацию по данной конкретной проблеме. Большинство сооб-

щений об ошибках снабжены дополнительным справочным текстом, в котором

объясняется, в каком случае может возникать подобная ошибка и каим обра-

зом можно ее устранить. (Подробные описание сообщений об ошибках Турбо

Пролога содержится в Приложении "Сообщения об ошибках" в "Справочном ру-

ководстве по Турбо Прологу".)

Когда вы отредактируете программу и захотите продолжить компиляцию,

нажмите клавишу F10. При этом Турбо Пролог возобновит компиляцию програм-

мы. Если имеются другие ошибки, то он снова вернет управление редактору.

В противном случае трансляция будет завершена и система спросит вас что

делать дальше.

Пример

Загрузите следующую программу в редактор Турбо Пролога и скомпили-

руйте ее.

/* Программа CH10EX01.PRO -

Пример синтаксической ошибки */

domains

list = integer*

predicates

make_list (integer, list, list)

goal

make_list (1, [1,2], New_List).

clauses

make_list (Head, List, [Head,List]).

Files Edit Run Compile Option Setup

╔══════════════════ Editor ══════════════╗┌────── Dialog ──────┐

║Error Correction Line18 Col33 C:EXAMPLES║│ │

║ ║│ │

║predicates ║│ │

║ make_list( integer, list, list) ║│ │

║goal ║│ │

║ make_list( 1, [1,2], New_List). ║│ │

║clauses ║│ │

║ make_list(Head, List, [Head,List]). ║│ │

║ ║│ │

║505 Type error: Illegal variable type ║│ │

║for this position. ║│ │

╚════════════════════════════════════════╝└────────────────────┘

┌─────────── Massage ──────────┐┌──────────── Trace ───────────┐

│Load WORK.PRO ││ │

│Load C:EXAMPLES\CH10EX01.PRO ││ │

│Compiling C:EXAMPLES\CH10EX01.││ │

└──────────────────────────────┘└──────────────────────────────┘

F1:Error explanation F2-Save F3-Load F5-Zoom F6-Next F10-Continue

────────────────────────────────────────────────────────────────

Рисунок 10.1 Синтаксическая проверка

Такие ошибки, как в этой программе, программистам очень трудно обна-

ружить. Их также трудно обнаружить при трассировке. Однако этот тип оши-

бок можно просто обнаружить с помощью средства проверки соответствия ти-

пов.