Использование теории формальных грамматик, для описания входного языка пакета прикладных программ
Входной язык ППП, представляет собой, специально разработанный программный язык. Как правило, он ориентируется на терминологию, привычную для пользователя прикладного программного обеспечения.
Правильность предложений входного языка определяется специальным набором правил, которые называются формальной грамматикой.
Для описания формальной грамматики может быть использован лингвистический язык (метаязык). В качестве метаязыка часто применяют нотацию Бэкуса-Наури. В частности, данная нотация предусматривает использование следующих символов:
- по определению есть;
| - логическое сложение (или);
<...> - скобка для обозначения нетерминального символа;
[...]- обозначение необязательного элемента.
Формальная грамматика G, задается четырьмя элементами G={N,Z,T,F},
где N - множество нетерминальных символов; (нетерминальный словарь); Z - начальный символ (аксиома); Т - множество терминальных символов (терминальный словарь); F - множество порождений, т.е. формул вида А ::= В .
Например, грамматика может иметь вид:
<ПВЯ>:: = <оператор> [<оператор>]
<оператор>:: = <имя оператора> <разделитель> [<параметр>]
<признак конца оператора>
<имя оператора> :: = ВВОДИ, | ВВОДК | ТЕСТ | ПРОСМ |
ВЕДОМ | РАСП | СОХР
<разделитель> :: = =
<параметр>:: = «^символьная константа>
<символьная константа> :: = <БуКВА> [<БуКВА> | <ЦИФРА> | < спец. символ>]
<БуКВА>:: = А | Б | В...Я | А| В| C...Z
<ЦИФРА>:: = 0 | 1 | 2...9
< спец. символ> | | _
<ПРИЗНАК КОНЦА ОПЕРАТОРАМ: = ;
В соответствии с приведенным примером формальной грамматики ПВЯ может иметь вид:
ВВОДД = A:ISX; ТЕСТ = ЭКРАН; ВЕДОМ = ПРОМ_ИТ; СОХР = ДИСКЕТА;
Конструирование управляющей программы ППП
Центральным элементом управляющей программы является ведущий модуль. Ведущий модуль организует выполнение требуемой последовательности других модулей управляющей программы. Ведущий модуль обеспечивает выполнение следующих действий (но сам не выполняет):
осуществление лексического разбора ПВЯ;
проверку синтаксической правильности ПВЯ;
определение множества модулей, подлежащих выполнению;
реализацию обращения к модулям тела ППП.
При реализации ведущего модуля в среде DELPHI, файл, содержащий ведущий модуль может иметь следующую структуру:
Unit Unit_VED;INTERFACEUses Windows, Messages, Sy-sUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;Type TForm_VED = class(TForm) CMDINPUT: TButton; CMDPROCESS: TButton;
CMDEXIT: TButton;
LbPVJA: TLabel;
EdPVJA: TEdit;
MESINF: TMemo;
LbHELPl: TLabel;
LbHELP2: TLabel;
CMDHELP: TButton;
procedure CMDPROCESSClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure CMDEXITClick(Sender: TObject);
procedure CMDINPUTClick(Sender: TObject);
procedure CMDHELPClick(Sender: TObject);
End;
Var
Form_VED: TForm_VED;
PVJA: String; {Программа на входном языке}
IMPLEMENTATION
{$R *.DFM}
Procedure TForm_VED.FormActivate(Sender: TObject);
begin
Caption:='Управляющая программа';
CmdInput.Caption—'ВВОД ПВЯ';
CmdProcess.Caption:=,BbinonHEHHE';
CmdExit Caption:=' ВЫХОД';
CmdHelp.Caption:- СПРАВКА';
LbPVJA.Caption:='nporpaMMa на входном языке';
LbPVJA.Autosize:=True;
МЕ5ШР.ТЕХТ:='Выполняется управляющая программа';
LbHelpl.Visible:=False;
LbHelp2. Visible-False;
EDPVJA.TEXT:= ";
EDPVJA.SetFocus;
end;
Procedure TForm_VED.CMDINPUTClick(Sender: TObject);
{ Ввод программы на входном языке naKeTa}BeginPVJA:= EDPVJA.TEXT;CMDPROCESS.SetFocus;End;Procedure TForm_ VED.CMDPROCESSClick(Sender: TObject);{O6pa6oTKa события: нажатие на клавишу «ВЫПОЛНЕНИЕ»}
Туре
TypeTinf= Record
KV: Integer; {Код возврата}
РВ: Integer; {Признак блока}
End; {TypeTinf}
T_YV= Array[1..4O] Of Integer;{Tnn для управляющего вектора}
T_PAR= Array} 1..40] Of String;{Тип для вектора параметров}
Var
YV: T_YV; {Управляющий вектор}
PAR: T_PAR; {Вектор параметров}
KSL: Integer; {Количество расшифрованных слов ПВЯ}
TINF: TypeTinf; {Таблица информатора}
Procedure Lan (PVJA: String; {Программа на входном языке}
Var YV: T_YV; {Управляющий вектор}
Var Par: Т_Раг; {Вектор параметров}
Var Ksl: Integer; {Количество
расшифрованных слов ПВЯ} Var Tinf: TypeTinf {Таблица информатора});
Begin { Блок лексического разбора}
End; {Procedure}
Procedure San (YV: T_YV;
Ksl: Integer;
Var Tinf: TypeTinf);
{Блок синтаксического анализа}
Begin
End;
Procedure Yprava (YV: T_YV; Par: T_PAR; Ksl: Integer;
Var Tinf: TypeTinf);
{Модуль управления}
Begin
End; {Procedure}
Procedure Inform (Tinf: TypeTinf);
{Блок информатора}
Begin
End;
Begin
With TINF DO
Begin
Lan (PVJA,YV,Par,Ksl,Tinf);
{ Выполнение блока лексического разбора}
Inform (Tinf);
If KV =0 then
Begin
San (YV,Ksl,Tinf);
{Выполнение блока синтаксического анализа}
Inform (Tinf);
If KV=0 Then
Begin
Yprava( YV,Par,Ksl,Tinf);
{Выполнение блока управления}
Inform (Tinf);
End;
End;
End; {With}
MESINF.LINES.ADD('3aBepineHne работы управляющей программы');
END;
Procedure TF orm_VED. CMDEXIT Click (Sender:
TObject);Begin Close;End;Procedure TForm_VED. CMDHELPClick(Sender: TObject);
{ Метод, обеспечивающий помощь пользователю}1^т
End;
End.