- •Рецензент
- •153003, Г. Иваново, ул. Рабфаковская, 34 Варианты заданий
- •3.4. Характерные задачи
- •3.5. Характеристика языковых категорий
- •4. Алфавит
- •5. Синтаксис языка
- •6. Семантика языка
- •7. Пример использования
- •8. Дерево грамматического разбора
- •9. Сравнительный анализ языков
- •Правила оформления
- •Сроки выполнения
- •Библиографический список
- •Приложение. Титульный лист
- •Отчет о выполнении самостоятельной работы на тему: ______________________________________
- •Оценка ___________________________ содержание
3.4. Характерные задачи
В этом пункте дается характеристика задач, которые могут эффективно решаться с помощью разрабатываемого языка, и определяются возможные области применения языка.
Например. В данной редакции язык может применяться только для создания прикладных программ для целочисленных алгебраических расчетов.
3.5. Характеристика языковых категорий
Дается характеристика и цель включения в язык элементов алфавита, исходных, промежуточных и результирующих данных, операций, операторов и управлений.
Например. Программа состоит из заголовка, раздела описания переменных и исполняемой части. Исполняемая часть программы состоит из последовательности операторов.
Ключевые слова служат для определения синтаксической структуры программы и операторов языка.
Для хранения промежуточных результатов вычислений и для управления ходом вычислительного процесса имеются переменные. Обращение к переменным ведется по их идентификаторам. В качестве идентификаторов нельзя использовать ключевые слова. В языке имеется всего один тип переменных – “INTEGER”. Он используется для хранения целых чисел. Константы также имеются только целого типа. Встроенных констант в языке нет.
Для задания алгебраических действий служат знаки операций.
Оператор присваивания служит для присваивания значений переменным.
Для ввода и вывода значений во время работы программы служат операторы ввода и вывода.
Для управления ходом вычислительного процесса в языке имеется только оператор цикла.
Разделители служат для разделения исходного текста программы на лексемы во время лексического анализа и для формирования структуры операторов и программы.
4. Алфавит
Приводятся списки символов языка по следующим категориям:
ключевые слова;
идентификаторы;
константы для каждого типа;
значащие разделители;
незначащие разделители.
Например.
Ключевые слова: “BEGIN”, “DO”, “DIV”, “END”, “END.”, “FOR”, “INTEGER”, “PROGRAM”, “READ”, “TO”, “VAR”, “WRITE”.
Идентификаторы программ и переменных могут содержать заглавные буквы латинского алфавита (“A”..“Z”), цифры (“0”..“9”) и знак подчеркивания (“_”). Начинаться идентификатор должен с буквы или знака подчеркивания.
Константы целого типа определим с помощью конечного автомата:
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
0,1,2,3,4,5,6,7,8,9
-
Значащие разделители: “+”, “–“, “*”, “:=”, “(“, “)”, “;”, “:”, “,”.
Незначащие разделители: пробел, символы конца строки, символ табуляции, комментарий.
Комментарий: начинается со знака “{” и заканчивается знаком “}”, между ними могут быть любые символы кроме “}”.
5. Синтаксис языка
В этом пункте описывается грамматика языка с помощью нотации Бэкуса-Наура. Рекомендуется расширенная нормальная форма Бэкуса (РНФБ).
Основными классами объектов, которые используются в РНФБ, являются символы основного (терминального) алфавита и имена конструкций описываемого языка в виде металингвистических переменных.
Описание грамматики состоит из совокупности металингвистических формул, каждая из которых описывает правила построения некоторой конструкции языка и состоит из двух частей. В левой части находится металингвистическая переменная, которая обозначает соответствующую конструкцию. Затем идет связка = , которая означает "определяется как". В правой части формулы задается способ построения конструкции, определенной в левой части.
Согласно РНФБ для обозначения повторов используются фигурные скобки {…}, для обозначения вариантов – знак | , для группирования альтернатив – круглые скобки (…), а для обозначения факультативных элементов – квадратные скобки […]. Металингвистические переменные не выделяются, а терминальные символы заключаются в кавычки.
Для перечислимых вариантов символов терминального алфавита, когда их состав очевиден, можно все элементы упорядоченного множества символов не приводить, ставя две точки .. между первым и последним вариантом.
Все эти правила позволяют определять синтаксис РНФБ с помощью самой РНФБ.
Описание необходимо строить «в глубину». Название нетерминальных символов лучше давать на русском языке и делать их настолько длинными, насколько это необходимо для понимания их смысла. При необходимости давать рядом комментарии для пояснения. Другое дело терминальные символы – они должны быть по возможности лаконичными.
Необходимо следить за тем, чтобы грамматика была однозначной и не допускала бы порождение синтаксически неправильных предложений.
Все, что трудно описать в правилах грамматики, необходимо отметить в примечании. Например: способ записи комментариев в исходном тексте, различаются или нет прописные и строчные буквы, способы отделения лексем друг от друга, требование описания типа всех используемых переменных до того как они встретятся в операторах, синтаксис таких лексем, как идентификаторы, константы и т. п.
Например.
1 prog = “PROGRAM” prog_name “VAR” dec_list “BEGIN” stmt_list “END.”
2 prog_name = id
3 dec_list = dec { “;” dec }
4 dec = id_list “:” type
5 id_list = id {“,” id }
6 type = “INTEGER”
7 stmt_list = stmt {“;” stmt}
8 stmt = assign | read | write | for
9 assign = id “:=” exp
10 exp = term { (“+”|“–”) term }
11 term = factor { (“*”|“DIV”) factor }
12 factor = id | int | “(” exp “)”
13 read = “READ” “(” id_list “)”
14 write = “WRITE” “(” id_list “)”
15 for = “FOR” index_exp “DO” body
16 index_exp = id “:=” exp “TO” exp
17 body = stmt | “BEGIN” stmt_list “END”
Примечания. Лексемы id (идентификатор) и int (константа целого типа) распознаются во время сканирования, а не во время синтаксического разбора. Их синтаксис определен в п. 4.