КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Алфавит нетерминальных символов
Полный синтаксис языка SPL Лекция 6 Из структурной схемы компилятора видно, что после лексического анализа следует фаза синтаксического анализа. То же самое имеет место и для идентификатора. Для ее реализации нужно знать основные конструкции языка SPL. Эти конструкции обозначаются нетерминальными символами, для каждого из которых имеется правило вывода. Терминальными символами являются лексемы. Как уже говорилось выше, язык SPL, как и любой другой формальный язык,, описывается грамматикой. Конкретно, его полный синтаксис ниже представлен расширенной грамматикой в виде последовательности регулярных выражений. Для каждого нетерминального символа имеется отдельное регулярное выражение. Условимся нетерминальные символы в регулярных выражениях обозначать заглавными буквами, а терминальные (лексемы) – строчными. Помимо специальных символов языка SPL в регулярных выражениях также будут использованы квадратные скобки ‘[‘, ‘]’ для выделения необязательных цепочек символов. 1) PROG – программа; 2) DCONST – описание констант; 3) CONS – константа; 4) DVARB – описание переменных; 5) DFUNC – описание функций; 6) PARAM – параметры функции; 7) BODY – тело функции; 8) STML – последовательность операторов; 9) STAT – оператор; 10) EXPR – выражение; 11) TERM – слагаемое; 12) FACT – множимое; 13) FCTL – последовательность выражений. Ниже приводятся 13 регулярных выражений, представляющих полный синтаксис языка SPL. Первое из них для главного (стартового) нетерминального символа PROG. 1) PROG ® (DCONST | DFUNC | DVARB)* eof Здесь показано, что программа – это описание констант или описание функций, или описание переменных. Причем все эти описания заключены в круглые скобки, после которых стоит звездочка. Напомним, это означает, что эти описания могут повторяться нуль и больше раз. То есть может случиться, что ни одного из них нет. А за этими описаниями обязательно должна быть лексема eof – признак конца файла. Таким образом, в принципе программа может состоять только из признака конца файла. 2) DCONST ® constl CONS (‘,’ CONS)* ‘;’ Описание констант должно начинаться со служебного слова const, которому соответствует лексема constl в регулярном выражении. За лексемой должен быть нетерминальный символ CONS. Затем через запятую могут быть еще нуль и больше констант. В конце описания констант должна быть ‘;’. 3) CONS ® iden ‘=’ [‘+’ | ‘-‘] numb Константа являет собой идентификатор, за которым следует ‘=’, а за ним число с необязательным знаком. Для лучшего понимания 2-го и 3-го регулярных выражений вспомним, как описываются константы в программе на языке SPL. Например, const k=4, m=-5, q=125;
4) DVARB → intl iden (‘,’ iden) * ‘;’ Перед описанием переменных должно быть служебное слово int. Ему соответствует в регулярном выражении лексема intl. Далее должен следовать идентификатор. Через запятые могут быть еще идентификаторы. В конце описания ставится ‘;’. 5) DFUNC → iden PARAM BODY Вначале следует имя функции, а за ним – описание параметров и тело функции. 6) PARAM → ‘(‘ [ iden (‘,’ iden) * ] ‘)’ При описании параметров обязательно должны быть круглые скобки. В них необязательно может быть идентификатор или последовательность идентификаторов через запятую. 7) BODY → beginl (DVARB | DCONST)* STML endl Тело функции начинается служебным словом begin, которому соответствует лексема beginl. Далее могут следовать ноль и больше раз описание переменных или констант. Затем – последовательность операторов и служебное слово end (лексема endl). 8) STML → STAT (‘,’ STAT)* Последовательность операторов может состоять из одного оператора или их последовательности через ‘,’. 9) STAT → iden ‘=’ EXPR | readl iden | pritl EXPR | retrl EXPR | ifl EXPR thenl STML endl | whilel EXPR dol STML endl
Операторы в языке SPL следующие: 1 Оператор присвоения, когда переменной присваивается результат вычисления выражения. 2 Чтение переменной. 3 Вывод на печать результата вычисления. 4 Возврат из функции результата вычисления. 5 Оператор условной передачи управления. Проверяется результат вычисления выражения. Если он больше нуля, то вычисляется последовательность операторов, расположенная между ключевыми словами then и end. 6 Оператор цикла. Последовательность операторов, расположенная между служебными (ключевыми) словами do и end, выполняется в цикле до тех пор, пока результат вычисления выражения после while больше нуля. 10) EXPR → [‘,’ | ‘-‘] TERM ((‘+’ | ‘-‘) TERM)* Выражение представляет собой слагаемое, перед которым необязательно может стоять знак. Через знаки ‘+’ или ‘-‘ могут также быть и другие слагаемые. 11) TERM → FACT ((‘*’ | ‘/’ | ‘%’) FACT)* Слагаемое может состоять из одного множителя или из соединенных знаками ‘*’, или ‘/’, или ‘%’ других сомножителей. 12) FACT → ‘(‘ EXPR ‘)’ | numb | iden [ ‘(‘ ]FCTL ] ’)’ ] Множитель - это или выражение в круглых скобках, или число, или идентификатор. Последний может быть идентификатором переменной или же функции. Тогда за идентификатором следуют круглые скобки. Внутри них – необязательная последовательность выражений. 14) FCTL → EXPR (‘,’ EXPR)* Это одно или несколько выражений через запятую.
Дата добавления: 2015-06-27; Просмотров: 879; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |