Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книги / ПРОЕКТИРОВАНИЕ ПОВС (последнее).doc
Скачиваний:
77
Добавлен:
01.06.2015
Размер:
36.23 Mб
Скачать

7.2. Разработка языка структурного программирования высокого уровня для модульных ивс

Для модульных ИВС предлагается использовать язык структурного программирования высокого уровня, разработка которого опирается на основные идеи Э.В. Дейкстры [68, 115], а также на работу К. Бома и Г. Джакопини [113].

В данных работах авторами доказана теорема о возможности представления управляющей логики любой программы с помощью трех базовых конструкций: простой последовательности , структуры типа и типа . В работе [115] показано реальное использование идей при построении мультипрограммной системыTHE.

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

При построении языка, а также компиляторы с него и программы загрузки, учитывалось, что в конечном итоге, задачи, решаемые на ИВС, представляются с помощью некоторых Τ-операторов, которые вводятся как отображения вида . Кроме того, многозначность отображения используется при загрузке программы, когда для зависимости f нет соответствующего оператора, но для другого оператора зависимостиq.

Таким образом, воплотив данные идеи в ЯП ИВС, можно рассматривать отображение задач в них безотносительно к внутреннему содержанию ФМ ИВС, реализующих набор базисных операторов. Это, в свою очередь, дает возможность на внешнем уровне при программировании использовать естественную математическую запись исходной задачи.

Грамматику ЯП ИВС зададим в форме четверки ,

где VT множество терминальных символов языка (буквы от А до Ζ, цифры от 0 до 9, пробел, операции *, +, -, /, #);  множество синтаксических классов (нетерминалов); S - множество подстановок; начальный символ (аксиома). Правила подстановок S имеют вид, заданный в форме Бэкуса:

<программа>:: = <список операторов>

<список операторов> :: = <оператор> | <список операторов> <оператор>

<оператор> :: = <метка> <пробел> <оператор> | <оператор присваивания> | <управляющий оператор>

<оператор присваивания> :: = <переменная> <операция отождаствле-ния> <выражение>

<управляющий оператор> :: = IF (<выражение>) <метка>,

<метка > <метка>

<выражение> :: = <терм> | - <терм> | <выражение> <операция типа сложения> <терм>

<терм> :: = <множ> | <терм> <операция типа умножения>

<множ>

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

<первичное> :: = (<выражение>) | < константа> | < функция> | |<переменная>

<переменная> ::= <идентификатор> | <индексный идентификатор>

<функция> ::= <имя функции> (< выражение>) | INT

(<идентификатор>, < идентификатор>, < выражение>

<выражение>)

<имя функции> ::= < буква > { <буква> | <цифра> } *15

<операция отождествления> ::=

<операция типа сложения> ::= + | -

<операция типа умножения> ::= * | /

<операция типа возведения в степень>:; = #

<идентификатор> ::= <буква> { <буква> | <цифра> *15 - IF

<индексный идентификатор> :: = <буква> { <буква> | <цифра>} *15

(<целое> | <переменная >)

<константа> ::= <целое> | < вещественное>

<вещественное> :: = <целое>  <целое>}

<целое> ::= <цифра> { < цифра> } *15

<метка>::= < цифра> { < цифра>} *4

<пробел> ;:= _

<буква> ::= А | В | ...| Z

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

При построении транслятора с заданного введенной грамматикой языка функции синтаксического анализа исходкой программы, как наиболее веяной и сложной части, а также других этапов трансляции можно осуществить как программными, так и аппаратными средствами. Основным методом обоих решений, лежащим в основе построения транслятора, является синтез магазинного автомата (детерминированного - ДМА, или недетерминированного - НДМА), представляющего данный язык. С одной стороны, это позволит однозначно установить тип языка (грамматике), с другой – оценить затраты на схемную реализацию транслятора с него с практической точки зрения.

Следуя работе [8], для данной грамматики G вводим обозначения, после чего можно будет записать для G уравнения в языках, исходя из бэкусовской записи грамматических форм:

S – нетерминал <список операторов>;

О – -"- <оператор> ;

Μ – -"- <метка > ;

 - -"- <управляющий оператор >;

- -"- <оператор присваивания >;

V - -"- <переменная>;

С - -"- <операция отношения>;

В - -"- <выражение>;

T - -"- <терм > ;

- -"- <операция типа сложения > ;

L - -"- <множимое > ;

- -"- <операция типа умножения >;

W - -"- < первичное > ;

- -"- <операция возведения в степень>;

- -"- <константа> ;

F - -"- <функция >;

I - -"- <идентификатор> ;

- нетерминал < индексный идентификатор> ;

N - -"- <имя функции> ;

R - -"- <буква>;

А - -"- <цифра> ;

P - -"- <целое >;

-"- <вещественное>.

Входным алфавитом МА является множество символов:

  открывающая скобка "(" ;

 закрывающая скобка ")" ;

 запятая "," ;

 унарный минус "-";

 знак равенства "=";

  знак плюс "+";

 знак минус "-",:

 знак умножения "*";

  знак деления "/";

  знак возведения в степень "#";

  точка ".";

  пробел "",

а также буквы латинского алфавита А, B, С,..., Ζ и цифры от 0 до 9, кроме того, сюда же относится зарезервированный идентификатор if - "если", и идентификатор int - "интеграл".

После введенных обозначений система уравнений в языках для G запишется в следующем виде:

Далее все вхождения нетерминалов, обозначенных буквами, в правые части индивидуализируются с помощью индексации. Это приводит к следующим выражениям:

После индексации те уравнения, в которых имеется два и более дизъюнктивных членов, заключаются в скобки, после чего все символы уравнений разделяются черточками. Следующим шагом является разметка мест в уравнениях, производящаяся по известной методике [8] . После разметки мест получаются следующие выражения:

Теперь все введенные места отождествляются с состояниями синтезируемого автомата. Внутренний алфавит МА составляют все буквенные обозначения в левых частях выражений; входной алфавит остался без изменений.

На следующем этапе проводится построение таблицы МА:

1) в местах {5, 8, II, 12, 14, 16, 18, 21, 34, 37, 43, 45, 41, 46, 48, 50, 52, 54, 57, 59, 61, 67, 69, 71, 73, 75, 77, 81, 89, 91} МА считывает букву входного алфавита из входного магазина и переходит в состояние, которое занумеровано непосредственно справа от считанной буквы;

2) в местах {0, 2, 3, 6, 7, 9, 13, 15, 17, 19, 21, 23, 24, 25, 26, 28, 29, 30, 32, 33, 36, 34, 38, 41, 44, 46, 48, 50, 52, 54, 55, 60, 62, 63, 64, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 86, 87, 88} MA производит запись данной буквы внутреннего алфавита во внутренний магазин и переходит к самому левому начальному месту в выражении для данной буквы (к правилу для данного нетерминала) ;

3) в конечных местах {l, 4, 10, 20, 22, 27, 31, 35, 37, 39, 53, 55, 57, 59, 61, 65, 78, 82, 84, 88, 91, 93 } ΜΑ считывает верхнюю букву внутреннего магазина и переходит к месту, расположенному непосредственно справа от считанной буквы.

При пустом внутреннем магазине МА останавливается.

Используя данную методику, можно построить таблицу МA. В качестве начального состояния выбирается состояние "О", в качестве заключительного  "1", так как МА должен представлять язык G(G = S).·

Исходя из изложенного, можно сделать следующие выводы:

1) данный язык является контекстно-свободным языком с простой структурой;

2) данный язык представим МА с числом внутренних состояний Q  93, что показывает практическую реализуемость транслятора с него без значительных аппаратурных затрат.

Ниже приводится методика подготовки и программирования задач для решения на ИВС.

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