Главная страница о компиляторе

# Краткое описание языка CLIP

Данное описание не претендует на полноту и не является учебником по языку. Целью данного описания является "введение в Clipper" для тех кто не знает что это такое и хочет быстро понять основные возможности.

Clipper является одним из диалектов xBase, а clip одной из реализаций компилятора Clipper. Clip старается быть полностью совместимым с Clipper, но увы Clipper - не без недостатков, поэтому при попытке избавится от недостатков, возникают некоторые несовместимости.

Начнем с того что xBase и Clipper ориентированы на обработку данных из табличных источников, к которым в частности относятся файлы формата DBF. xBase позволяет также производить различные манипуляции со стороками, датами, числами, файлами, экраном и т.п.
Кол-во функций зависит от реализации диалекта, наличием дополнительных библиотек, наличием API для поключения новых функций и может исчислятся несколькими тысячами.
А также в последних реализациях Clipper были добавлены объектно-ориентированные возможности и несколько типовых объектов.
Clip - это уже полностью объектно ориентированный язык, т.е. используя clip можно писать программы не применяя других подходов, кроме ОО.
Но при этом clip не запрещает использовать другие подходы к программированию и проектированию программ.

Самая простая программа в стиле xBase выглядит вот так:
? "Hello world"
Что означает вывести на экран (поток, файл, принтер) строку "hello World". Это самое можно получить и другими способами:
выведи на экран "Hello world"
qout("Hello world")
("Hello world"):qout()
Как видите - можно использовать разные стили программирования, в том числе можно разработать свою собственную систему команд. Такие возможности обеспечивает наличие гибкого препроцессора, которому можно объяснить как надо транслировать команды в "основной" стиль программирования, который понимает компилятор.
Итак - существует как бы две программы:
компилятор - переводчик с языка xBase/Clipper/Clip в более понятный для машины.
препроцессор - предварительный обработчик текстров программ, обеспечивающий гибкость стилей программирования.
На самом деле обе эти программы находятся в одном файле, который обычно и называют "компилятор", подразумевая что в нем одновременно присутсвует и препроцессор.

## Немного о препроцессоре

По своей сути препроцессор это "умная" команда редактора "найти и заменить", надо только ему объяснить что именно надо "найти" и на что "заменить". Самый простой спoсоб:
#define MY_WORD "Hello world"
В данном случае в любом месте текста где попадется MY_WORD будет произведена замена на "Hello world". И вот такая программа
? MY_WORD
Превратится в
? "Hello world"
На самом деле команда "?" тоже является назначенной командой, и вот как выглядит это назначение:
#command ? [ list,... ] => QOut( list )
И соотвественно очень легко назначить свою команду:
#command вывести на экран [ list,... ] => QOut( list )
В итоге текст программы может уже выглядеть как:
#define MY_WORD "Hello world"
#define MY_WORD2 date()
#define MY_WORD time()
вывести на экран MY_WORD, MY_WORD2, MY_WORD3
которая препроцессором будет превращена в:
qout("Hello World",date(),time())
а после ее компиляции и исполнения на экране будет сообщение
Hello world 08/03/2001 14:31:45
Возможности по назначению своих команд очень широки, некоторые ушлые программеры умудряются транслировать например программы на паскале в программы на клиппере.
Подробности опускаем, так как лучше читать полноценную документацию.

## Немного о компиляторе и основном синтаксисе языка

Основной синтаксис языка XBase/Clipper относится к процедурному/функциональному стилю программирования, т.е. это в основном вызовы функций, обработка возвращаемых значений и различные способы ветвления:

    for i=1 to 10 step 1
       if i=1
          qout(i)
       endif
       do case
       	case i=2
            	@ i, 1 say str(i)+":"+chr(65+i)
            otherwise
            	? log10(i)
       endcase
    next

    а при помощи препроцессора можно например получить вот такое:

    для всех i от 1 до 10 с шагом 1
        если i=1
    .........
    следуюший

Ну а для Clipper с версией больше 5.x и для clip можно использовать ОО-синтаксис:
result:=var:call_function(param1,param2,param3,....,paramN)
и если в clipper такие возможности очень ограничено, то в clip можно писать программы только в ОО-стиле, и соответсвенно создавать свои классы, наследовать и модифицировать структуры классов "на лету".

Главная страница о компиляторе
© Ю.Хныкин, uri@itk.ru, 2000