Документ взят из кэша поисковой машины. Адрес оригинального документа : http://colamo.parallel.ru/bnf-colamo.html
Дата изменения: Thu May 28 15:44:00 2009
Дата индексирования: Mon Oct 1 19:44:18 2012
Кодировка: Windows-1251
Грамматика языка COLAMO в расширенной форме Бэкуса-Наура

Грамматика языка COLAMO в расширенной форме Бэкуса-Наура

цифра = '0' |Т | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'.
символ = 'A'...'Z' | 'а' ...'z' | '_'.
число = цифра{цифра}.
константа = число.
знакоперации     = '+' | '-'|'*'| '/'| '&'| '^'| '|' |'>>'| '<<'.
символическоеимя = символ {символ} |символ {число}.
программа     =     'PROGRAM'      [имяпрограммы]      [телопрограммы] 'ENDPROGRAM'.
имяпрограммы = символическоеимя.
телопрограммы = [описаниепеременных] [опсание_ меток] [описаниеконстант] [иницализацяпеременных] [Операторызагрузкипамятиданных]
[описание_подкадров][описание_кадров] [описаниевызываемыхпрограмм] [вызовыкадров].
описаниепеременных = 'VAR' описаниепеременной {описаниепеременной} |
'VAR' описаниемассива { описаниемассива }.
описаниепеременной = списокпеременных ':' типпеременной типхранения ';'
списокпеременных = имяпеременной {',' имяпеременной}. мяпеременной = символическоеимя.
тип переменной = REAL'|'BOOLEAN'|'INTEGER' |'ARRAY'
типхранения = 'MEM '|'COM'|'REG'.
описаниемассива = имяпеременной : 'ARRAY' '[' размерностьмассива']'типхранения ';'.
размерностьмассива = размерностьизмерения {',' размерностьизмерения }.
размерностьизмерения = число : 'VECTOR' | 'STREAM'.
описаниеметок = 'LABEL' имяметки   {','   имяметки   }';'. \
имяметки = символическоеимя.
описаниеконстант = 'CONST' имяконстанты '=' значениеконстанты.
имяконстанты = символическоеимя. 
значениеконстанты = число.
инициализацияпеременных = 'DEFINE' имяпеременной '=' выражениеприсвавания ';'.
арифметическоевыражение = ['(']   имяпеременной |   имяпеременной знакоперации имяпеременной { знакоперации   имяпеременной } [')'].
описаниекадров = 'CADR' [имякадра] списокоператоров 'ENDCADR' ;.
имякадра = символическоеимя. 
списокоператоров = командакадра ';'{ командакадра ';'}. 
командакадра = {метка :} присваивание | операторцикла | оператор_условного_перехода |   операторбезусловногоперехода.
присваивание = имяпеременной ':=' арифметическоевыражение ';'.
операторцикла = 'FOR' счетчик ':=' начальноезначение 'ТО' конечноезначение ['STEP' значениешага] 'DO' [BEGIN] списокоператоров [END;].
счетчик =   имяпеременной.
начальноезначение = Арифметическоевыражение. 
конечноезначение = Арифметическоевыражение. 
значениешага = Арифметическоевыражение.
оператор_условного перехода = 'IF' условие 'THEN' [BEGIN] списокоператоров [END] ['ELSE' [BEGIN] списокоператоров [END] ] ';'. 
условие = ['('] выражение [')'] { знакоперации  ['('] выражение [')'] }.
оператор_безусловного_перехода= 'GOTO'   имяметки   ';'.
описаниеподкадров = 'SUBCADR' имяподкадра ['(' списокпараметров ')'] списокоператоров 'ENDSUBCADR;'.
имяподкадра = символическоеимя.
списокпараметров = описаниепараметра {';' описаниепараметра }.
описаниепараметра = списокпеременных ':' типпеременной типхранения.
описаниевызываемыхпрограмм = 'SUBROUTINE' имявызываемойпрограммы ['(' списокпараметровподпрограммы ')']
[ описаниепараметровфункций] [описаниепеременныхподпрограммы] списокоператоров 'ENDSUBROUTINE;' .
имявызываемойпрограммы = символическоеимя.
описаниепараметровподпрограммы = описаниепараметраподпрограммы {','описаниепараметраподпрограммы}.
описаниепараметраподпрограммы = описаниепеременной | описаниемассива | описанеподкадра.
описаниеподкадра = имяподкадра.
описаниепараметровфункций='VAR'   имяпроцедуры 'CONTR;'.
имяпроцедуры = символическоеимя.
описаниепеременныхподпрограммы = описаниепеременных [EXTERN;]