Описание языка канальной программы

текущая спецификация

Синтаксис

Данный язык является lisp-подобным, так как не претендует на полную совместимость со стандартами CLISP или ISLISP. В нем нет определений lambda-функций, ни классов, ни рекурсии, ни механизмов захвата ошибок, ни многих других полезных функций. Тем не менее, используюется базовые синтаксис и семантика Lisp'а.

Все конструкции языка записываются в виде списка элементов: (элемент1 элемент2 элемент3 ... элементN). Элементы списка разделяются пробелами, сам список заключен в круглые скобки.

В качестве элементов могут выступать: символьные обозначения, целые числа, числа с плавающей запятой, строки и сами списки. Например:

	(9 10 11 15)
	(setq u 1.356)
	(do-list m ("u=" u " in channel" 5) (print m))

здесь "u=", " in channel" являются строками; setq, do-list, print, u, m - символами (обозначениями); 5 - целое число; 1.356 - нецелое число; последняя строка является примером вложенных списков.

    Тип элемента определятеся следующими правилами:
  1. Список начинается с открывающейся круглой скобки "(". Заканчивается закрывающейся круглой скобкой ")". Список может содержать от нуля до "бесконечности" элементов.
  2. Все числа начинаются с цифры, и допустимо в начале ставить знак минус "-". Числа с плавающей точкой обязательно должны содержать точку ".".
  3. Строки начинаются с двойной кавычки и заканичваются ей. Внутри строки символом обратной косой черты экранируются спецсимволы:
    В строкесимвол
    \\\
    \""
    \nновая строка
    \rвозврат
    \tтабуляция
    \aзвонок
  4. Остальные возможные варианты используются для символьных обозначений. Есть один особый случай: если обозначение начинается с одиночной кавычки, то оно транслируется в оператор quote: 'a = (quote a).

Семантика

Всякий список, если это не особенный случай, описывает обращение к определенной функции. Первый элемент является именем функции, остальные её аргуметами. Например:

	(print "hello world!\n")
	(wait-keypress)
	(set 'a 8)
	(set 'b a)

здесь print, wait-keypress и set - имена фукнци; строка в кавычках - аргумент. 'a и 'b аргументы передаваемые по имени; a аргумент передаваемый в виде значения, т.е. 8. Таким обазом, значения всех аргументов вычисляются при обращении к функции.


Revised 06:23 15/12/2004