Скачиваний:
10
Добавлен:
01.05.2014
Размер:
527.87 Кб
Скачать

0. Формулировка задания

Вариант 1.

В процессе выполнения курсовой работы необходимо разработать язык программирования, являющийся подмножеством языка Паскальи транслятор с этого языка в последовательностьтетрад. Метод синтаксического анализа –грамматики простого предшествования.

Язык должен обеспечивать операции над переменными и константами заданных базовых типов (целый, вещественный, комплексный, ограниченный), а также над переменными и компонентами производного типа (вектор с комплексными компонентами). Перечень операций должен включать как предусмотренные базовым языком, так иоперации над векторами: определение длины вектора, сумма и разность векторов, скалярное произведение векторов, умножение вектора на число;операции над комплексными числами: доступ к вещественной и мнимой частям, определение модуля числа. В языке должна быть определена операция преобразования типов приименной эквивалентности типов. В языке должна быть предусмотрена возможность создания пользовательских типов.

Язык должен допускать использование арифметических выражений, в состав которых могут входить константы и простые переменные базовых типов, компоненты структурированного типа, круглые скобки и знаки операций: сложения, вычитания, умножения, деления.

Язык должен допускать использование логических выражений, в состав которых могут входить отношения, круглые скобки и знаки логических операций: И, ИЛИ, НЕ, константы и переменные логического типа.

Приоритет операций – обычный.

Состав операторов языка:

  • оператор присваивания

  • оператор ввода

  • оператор вывода

  • составной оператор

  • оператор безусловного перехода

  • условный оператор, условие в котором задается логическим выражением

  • оператор цикла – с параметром

Перегрузка операций – разрешается.

Краткая формулировка:

Базовый язык – Паскаль.

Базовые типы: целый, вещественный, комплексный, ограниченный.

Структурированный тип – вектор с комплексными компонентами.

Операции над векторами: определение длины вектора, сумма и разность векторов, скалярное произведение векторов, умножение вектора на число.

Операции над комплексными числами: доступ к вещественной и мнимой частям, определение модуля числа.

Оператор цикла – с предусловием.

Перегрузка операций – разрешается.

Эквивалентность типов – именная.

Класс грамматик – грамматики простого предшествования.

Промежуточный язык – тетрады.

1. Описание входного языка Формулы Бэкуса-Наура

<программа> ::= program <идент> ; <блок_описаний> <блок_опер> .

<блок_описаний> ::= <блок1> | <объявл_меток> <блок1>

<блок1> ::= <блок2> | <объявл_констант> <блок2>

<блок2> ::= <блок3> | <объявл_типа> <блок3>

<блок3> ::= <объявл_пер> | ε

<блок_опер> ::= <составной_оператор>

<объявл_меток> ::= label <метки> ;

<метки> ::= <целое_без_знака> | <целое_без_знака>, <метки>

<объявл_констант> ::= const <список_констант> ;

<список_констант> ::= <идент> = <константа> |

<идент> = <константа>; <список_констант>

<константа> ::= <конст_идент> | <компл_число>

<объявл_пер> ::= var <переменные> ;

<переменные> ::= <список_пер> : <тип> |

<список_пер> : <тип>; <переменные>

<список_пер> ::= <идент> | <идент>, <список_пер>

<объявл_типа> ::= type <типы> ;

<типы> ::= <идент> = <тип> | <идент> = <тип>; <типы>

<тип> ::= <простой_тип> | <структурный_тип> |

<ограниченныый_тип> | <перечисляемый_тип>

<ограниченный_тип> ::= <конст_идент> .. <конст_идент>

<перечисляемый_тип> ::= ( <список_пер> )

<простой_тип>::= integer | real | <идент> | complex

<структурный_тип> ::= vector[<конст_идент>]

<оператор> ::= <метка> : <непомеч_оператор> | <непомеч_оператор> | ε

<непомеч_оператор> :: = <простой_оператор> | <составной_оператор>

<составной_оператор> ::= begin <послед_операторов> end

<послед_операторов> ::= <оператор> |

<оператор> ; <послед_операторов>

<простой_оператор> ::= <оператор_ввода> | <оператор_вывода> |

<оператор_присваивания> | <оператор_безусловного_перехода> |

<условный_оператор> | <оператор_цикла_с_предусловием>

<оператор_ввода> ::= readln (<послед_ввода>)

<послед_ввода> ::= <единица_ввода> | <единица_ввода>, <послед_ввода>

<единица_ввода> ::= <идент> | <операция_доступа>

<оператор_вывода> ::= writeln (<послед_вывода>)

<послед_вывода> ::= <простое_выражение> |

<простое_выражение>, <послед_вывода>

<оператор_присваивания> ::= <левая_часть> := <простое_выражение> |

<идент> := <вектор>

<левая_часть> ::= <единица_ввода> | <компонента_вектора>

<оператор_безусловного_перехода> ::= goto <целое_без_знака>

<условный_оператор> ::= if <выражение> then <оператор> |

if <выражение> then <оператор> else <оператор>

<оператор_цикла_с_предусловием> ::= while <выражение> do <оператор>

<операция_над_компл> ::= abs(<компл>) | <операция_доступа>

<операция_доступа> ::= re(<компл>) | im(<компл>)

<компл> ::= <идент> | <компл_число> | <компонента_вектора>

<компонента_вектора> ::= <вектор> [<простое_выражение>]

<вектор> ::= <идент> | multconst(<вектор>,<конст_идент>) | sum(<вектор>,<вектор>) | dif(<вектор>,<вектор>)

<числ_опер_над_вект> ::= length(<вектор>) |

multscal(<вектор>,<вектор>)

<выражение> ::= <простое_выражение> |

<простое_выражение> <знак_отношения> <простое_выражение>

<простое_выражение> ::= <терм> |

<простое_выражение> <знак_сложения> <терм>

<терм> ::= <множитель> |

<терм> <знак_умножения> <множитель>

<множитель> ::= <унарный_знак> <множитель> | (<выражение>) |

<конст_идент> | <компл> | <операция_над_компл> |

<числ_опер_над_вект> | <приведени_типа>

<приведени_типа> ::= <простой_тип> ( <простое_выражение> )

<знак_отношения> ::= <= | >= | <> | < | > | =

<знак_сложения> ::=+ | - | OR

<знак_умножения> ::= * | / | AND

<унарный_знак> ::=+ | - | NOT

<конст_идент> ::= <идент> | <число>

<компл_число> ::= # <конст_идент> , <конст_идент> #

<целое> ::= <целое_без_знака> | <знак> <целое_без_знака>

<число> ::= <число_без_знака> | <знак> <число_без_знака>

<знак> ::= + | -

<целое_без_знака> ::= <цифра> | <цифра> <целое_без_знака>

<число_без_знака> ::= <целое_без_знака> | <целое_без_знака>.<целое_без_знака> |

<целое_без_знака> e <целое>

<идент> ::= <буква> | <буква><идент2>

<идент2> ::= <буква><идент2> | <цифра><идент2> | <буква> | <цифра>

<буква> ::= a...z | A...Z | _

<цифра> ::= 0...9

Соседние файлы в папке Курсовик (вар 1)