
КФБН. ___________
1. Наименование
Транслятор языка высокого уровня (упрощенной версии языка Си++).
2. ОСНОВАНИЕ ДЛЯ РАЗРАБОТКИ
Основанием для разработки данного программного продукта является учебный план специальности 220400 (Программное обеспечение вычислительных и автоматизированных систем) по дисциплине “Теория языков программирования и методы трансляции”, утвержденный ректором СГТУ.
3. НАЗНАЧЕНИЕ РАЗРАБОТКИ
Транслятор предназначен для транслирования программы, написанной на языке высокого уровня, в объектный псевдокод, с дальнейшей его интерпретацией и получением результата работы программы.
4. ТРЕБОВАНИЯ К ПРОГРАММЕ
4.1. Требования к функциональным характеристикам
Транслятор должен работать в оконном графическом режиме и поддерживать работу, как клавиатуры, так и манипулятора типа "мышь”.
Окно транслятора должно содержать поля ввода программы, вывода псевдокода, вывода результата интерпретации, вывода сообщений об ошибках или успешной трансляции.
Транслятор должен поддерживать как ручной ввод текста в поле программы, так и загрузку текста программы из файла.
Транслятор должен поддерживать сохранение составленной программы, полученного псевдокода, результата работы интерпретированной программы.
Транслятор должен обнаруживать как лексические, так и синтаксические ошибки:
использование символа не входящего в алфавит языка;
отсутствие текста программы;
отсутствие заголовка программы;
заголовок программы должен начинаться с буквы;
идентификатор не должен включать в себя разделители;
длина идентификатора не должна превышать 14 символов;
использование необъявленной переменной;
повторное объявление переменной;
разные типы операндов при операциях +, -, *,/;
отсутствие левой части при операции присваивание;
отсутствие правой части при операции присваивание;
неверная запись левой части при операции присваивание:
- должна быть только объявленная переменная;
разные типы операндов при операции присваивание;
отсутствие ожидаемых конструкций, таких как: ‘(‘,’)’,’:’,’;’.’.’, ПРОГРАМ, БЕГИН, ЕНД, ФОР, ТО, ДУ, СИН, КОС, ЕКС, ВВОД, ВЫВОД;
незакрытые кавычки строковой константы;
незакрытый комментарий;
лишний ЕНД.
отсутствие в секции ВАР объявления переменных;
В сообщении об ошибке должен обязательно присутствовать номер строки, где эта ошибка была найдена и прочая вспомогательная информация (имя ошибочного идентификатора, операция, операнды которой несовместимы по типам.)
При двойном щелчке мышью на строке ошибки должна подсвечиваться строка в программе, где произошла эта ошибка.
Исходный текст программы и псевдокод должны иметь подсветку синтаксиса.
Транслятор должен обеспечивать подсказку о текущем месте редактирования (строка, колонка).
Встроенный интерпретатор не должен выводить сообщения об ошибках времени исполнения, а должен до конца пытаться интерпретировать полученные им данные.
Язык исходного текста программы должен соответствовать следующим требованиям:
Алфавит языка должен содержать только кириллические заглавные буквы цифры и разделители +, -, *, /, (,), :, ;, =, {, }, пробел, но при этом допускать использование прочих символов в комментариях и текстовых константах.
Язык должен допускать использование комментариев.
Идентификаторы должны начинаться с буквы алфавита и могут включать буквы и цифры.
Длина идентификатора выбирается по желанию пользователя, но не более 14 символов.
Язык должен предусматривать следующие грамматические конструкции: описание заголовка и тела программы, объявление переменной, описание объявления цикла, присвоение значения переменной, ввод/вывод значения переменной.
Язык должен содержать ключевые слова ПРОГРАМ, НАЧАЛО, ВАР, РЕАЛ, ИНТЕЖЕР, ВВОД, ВЫВОД, ФОР, СИН, КОС, ТАН, ЕКС.
Язык должен поддерживать системные функции ввода/вывода ВВОД/ВЫВОД, математические функции СИН, КОС, ТАН, ЕКС, воспринимающие данные и вещественного, и целого типов.
Язык должен поддерживать два типа данных: целый (ИНТЕЖЕР), вещественный (РЕАЛ).
Присваивание должно обеспечиваться оператором “:=”.
Тип значения, вводимого пользователем при интерпретации программы должен автоматически приводиться к требуемому типу.
Язык должен содержать операции сложения, вычитания, умножения и деления. Приоритет операций должен соответствовать общепринятому.
Тип операндов при любых операциях должен совпадать.
Комментарии должны выделяться парой “{..}”.
Конструкции должны отделяться друг от друга символом “;”.
Использование необъявленных идентификаторов недопустимо.
Заголовок программы должен начинаться с ключевого слова ПРОГРАМ.
Секция объявления переменных должна начинаться с ключевого слова ВАР. Формат объявления: ВАР идентификатор [, идентификаторы] : тип переменной;
Переменные этой секции доступны только для основного блока БЕГИН...ЕНД.
Текст программы и логические блоки должны ограничиваться ключевыми словами БЕГИН в начале и ЕНД в конце.
Объявление цикла допустимо лишь в теле программы и подпрограммы;
Структура объявления цикла ФОР должна иметь формат:
ФОР пар_цик :=нач_знач TO кон_знач ДУ БЕГИН оператор [,операторы] ЕНД;
Язык псевдокода должен соответствовать следующим требованиям:
Псевдокод должен быть разбит на четверки следующего формата: код_операции адрес_операнда_1, адрес_операнда_2, адрес_результата
Язык должен содержать 2 системные переменные ax и bx.
Язык должен поддерживать работу со стеком.
Должны поддерживаться команды: pushX– затолкнуть в стекX,popX– забрать из стека вX,movX,Y– поместитьYвX,addX,Y,Z–X+Yпоместить вZ,subX,Y,Z– разностьXиYпоместить вZ,multX,Y,Z– произведениеXиYпоместить вZ,divX,Y,Z– частное от деленияXнаYпоместить вZ,createX,Y– завести переменную с именемXи присвоить ейY,disposeX– удалить переменную из памяти,cosX,Y,sinX,Y,tanX,Y– соответствующие математические команды, результат выполнения которых также помещается вY,callX– вызов подпрограммы,jmpX– переход на подпрограммуX.
Имена подпрограмм должны начинаться с символа ‘@’;
Тип введенного значения распознается автоматически;
Операндами операций могут быть переменные, задаваемые своим именем или константы, задаваемые своим значением.
Имена переменных являются строковыми константами, совпадающими с именами переменных в исходном коде программы.