|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Синтаксис входного языкаСанкт-Петербургский Государственный Электротехнический Университет ФКТИ
Кафедра МОЭВМ
Дисциплина: Теория языков программирования и методов трансляции
Пояснительная записка к курсовой работе на тему «Разработка языковых процессов»
Санкт-Петербург 2007 г. Содержание 1. Формальная постановка задачи.............................................................................................................................................. 3 Задание 10........................................................................................................................................................................................................... 3 2. Описание входного языка............................................................................................................................................................. 4 2.1. Синтаксис входного языка............................................................................................................................................................... 4 2.2. Описание семантики входного языка........................................................................................................................................ 6 3.1. Определение типов лексем................................................................................................................................................................ 9 3.2.Определение синтаксиса лексем.................................................................................................................................................. 14 3.3.Построение диаграммы лексического анализатора........................................................................................................... 16 Функции лексического анализатора................................................................................................................................................. 21 4.3.Описание промежуточного языка.................................................................................................................................. 33 4.6. Построение атрибутного ДМП-процессора............................................................................................................................. 42 4.7. Тестирование атрибутного ДМП-процессора........................................................................................................................ 56 Выводы.............................................................................................................................................................................................................. 60 Список литературы................................................................................................................................................................................ 61
Формальная постановка задачи Задание 10. Базовый язык – Си. Базовые типы: целый, вещественный, булевский. Структурированный тип – вектор с вещественными компонентами. Операции над векторами: определение длины вектора, сумма и разность векторов, Скалярное произведение векторов, умножение вектора на число. Дополнительные требования: операции ++, --, условный оператор присваивания, операторы присваивания +=, *=, -=, /=. Оператор цикла – с параметром. Перегрузка операций – разрешается. Эквивалентность типов – структурная. Класс грамматик – LL(1)-грамматики. Промежуточный язык – тетрады.
Описание входного языка Синтаксис входного языка Разработка языка программирования начинается с определения его синтаксиса. Естественный язык мало пригоден для этой цели, поэтому для точного описания синтаксиса языка программирования нужен некоторый вспомогательный язык. Язык, предназначенный для описания другого языка, называется метаязыком. Он задает систему обозначений, понятий языка и образованных из них конструкций, позволяющих представить описываемый язык с помощью определенных ранее понятий и отношений между ними. При этом каждое понятие языка подразумевает некоторую синтаксическую единицу и определяемые ею свойства программных объектов или процесса обработки данных. Для описания синтаксиса входного языка в данной курсовой работе необходимо использовать металингвистические формулы Бэкуса-Наура (БНФ) или их модификации, позволяющие более естественно представить альтернативные, необязательные и повторяющиеся части металингвистических формул. Опишем синтаксис входного языка С.
< программа >::= void main() { {< объявление переменной>;}|{< объявление вектора>;} | <составной оператор> }; < составной оператор>::= <оператор>; < оператор >::= [<метка>: ]<непомеченный оператор>
< непомеченный оператор>::= < составной оператор >|< оператор присваивания > < условный оператор присваивания>|< условный оператор >| <оператор цикла с параметром>|<оператор безусловного перехода>| < оператор ввода>|<оператор вывода>; < оператор присваивания >::= < переменная ><отношение присваивания>< выражение >
< отношение присваивания>::= + = | = | -= | *= | /=
< условный оператор присваивания>::= ( <логическое выражение> )? < выражение>: < выражение >
< условный оператор >::= if ( <логическое выражение> ) <составной оператор> [else<составной оператор> ]
< оператор цикла с параметром>::= for ( <оператор присваивания>; <логическое выражение>; <оператор присваивания> ) <составной оператор>
<оператор безусловного перехода>::= goto <метка>
< оператор ввода>::= cin >> <переменная>
< оператор вывода>::= cout << <переменная> < выражение>::= <выражение><аддитивная операция><слагаемое>|<слагаемое>| < унарная операция >< слагаемое >| ~ <вектор>
< слагаемое>::= <слагаемое><мультипликативная операция><множитель>|<множитель>
< множитель>::= <переменная>| ( <выражение> )
< мультипликативная операция>::= * | /
< аддитивная операция>::= + | -
< логическое выражение>::= <конъюнкция>or <конъюнкция>|<отношение>
< конъюнкция>::= <логический множитель>and <логический множитель>
< логический множитель>::= < ( <логическое выражение> ) | not <логический множитель>
< отношение>::= <выражение> <операция отношения> <выражение>
< операция отношения>::= < | > | <= | >= | == | != < унарная операция>::= ++ |--
< объявление переменной>::= <базовый тип> <идентификатор>
< объявление вектора>::= vector<идентификатор> [ <размерность> ]
< переменная>::= <идентификатор>|< вектор>
< метка>::= <идентификатор>
< идентификатор>::= <буква> {<буква>|<цифра>}
< буква>::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
< натуральная цифра>::= 1|2|3|4|5|6|7|8|9
< цифра>::= 0| <натуральная цифра> < размерность>::= <натуральная цифра> {<цифра>} < индекс>::= 0| <натуральная цифра>{<цифра>}
< базовый тип>::= int| float| bool < вектор>::= <идентификатор>| [ < элемент вектора> {, < элемент вектора>} ] < элемент вектора>::= < идентификатор > [ <индекс> ] |< идентификатор> |< вещественное число> < вещественное число>::=<натуральная цифра> {<цифра>}. {<цифра>} Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.) |