Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
28.06.2014
Размер:
6.68 Кб
Скачать
Program IndexExp;
uses crt;
var
ch: char;
fin: text;
str: string[6];



{ЋЎа Ў®вЄ  ®иЁЎ®Є}
procedure error(i: integer);
begin
case i of
0: writeln('ЌҐв const');
1: writeln('ЋиЁЎЄ  ў Ё¬Ґ­Ё');
2: writeln('ЋиЁЎЄ  ў вЁЇҐ');
3: writeln('ЋиЁЎЄ  ў ®ЇЁб ­ЁЁ бва®ЄЁ');
4: writeln('ЌҐв ]');
5: writeln('ЌҐв §­ Є  =');
6: writeln('ЌҐ Їа ўЁ«м­® гЄ § ­  бва®Є ');
7: writeln('ЌҐв ''');
8: writeln('ЌҐв ®иЁЎ®Є');
9: writeln('ЌҐв ;');
10: writeln('ЋиЁЎЄ  ў Ё¬Ґ­Ё');
11: writeln('ЋиЁЎЄ  ў ®ЇЁб ­ЁЁ зЁб« ');
15: writeln('ЋиЁЎЄ  ў ®ЇаҐ¤Ґ«Ґ­ЁЁ вЁЇ ');
end;
end;


{Џ®ЁбЄ Ї зЄЁ Їа®ЎҐ«®ў. •®зг Ї®¤зҐаЄ­гвм б«®ў® ЏЂ—Љ€. Ќ  ўе®¤ - ⥪гжЁ© бЁ¬ў®«. Ќ  ўл室 - бЁ¬ў®«,
®в«Ёз­л© ®в Їа®ЎҐ« . Џ® бгвЁ Їа®жҐ¤га  ўлЇ®«­пҐвбп ўбҐЈ¤  Ї®б«Ґ § Є®­зҐ­­®Ј® б«®ў .}
procedure probel;
begin
if ch = ' ' then
begin
read(fin, ch);
probel
end;
end;

{Џа®жҐ¤га  з⥭Ёп Ё¬Ґ­Ё. Ќ  ўе®¤Ґ ЇҐаў п ЎгЄў  Ё¬Ґ­Ё. Ќ  ўл室Ґ 1 ®в«Ёз­ п ®в Їа®ЎҐ«  ЎгЄў  Ї®б«Ґ Ё¬Ґ­Ё.}
procedure Read_name;
procedure Rec_Name; {ђҐЄгабЁў­л© Ї®ЁбЄ ЎгЄў, жЁда Ё ­Ё¦­Ёе Ї®¤зсаЄЁў ­Ё©. ’® Ґбвм ўбҐе ў®§¬®¦­л© бЁ¬ў®«®ў Ё¬Ґ­Ё}
begin
if ch in ['A'..'z', '0'..'9', '_'] then
begin
read(fin, ch);
rec_name;
end
end;
begin
read(fin, ch);
Rec_Name;
probel;
end;

{Џђ®жҐ¤га  з⥭Ёп вЁЇ (String, integer, Ё«Ё ЎҐ§ вЁЇ ), Ќ  ўе®¤Ґ - ЇҐаўл© бЁ¬ў®« вЁЇ , Ё«Ё §­ Є =}
procedure Read_Type;
var str: string;
procedure rec_Type; {Ќ  ўл室Ґ str - вЁЇ Є®­бв ­вл.}
begin
if ch in ['a'..'z'] then
begin
str:=str+ch;
read(fin, ch);
rec_type;
end
end;

procedure rec_Str; {Џа®жҐ¤га  зЁв Ґв ўбҐ н«Ґ¬Ґ­вл бва®ЄЁ, Ї®б«Ґ ЇҐаў®Ј® ®вЄалў о饣®бп '.
Џа®жҐ¤га  § Є ­зЁў Ґвбп ЇаЁ ­Ґ®¦Ё¤ ­­®¬ Є®­жҐ д ©«  Ё«Ё § Єалў о饩бп Є ўлзЄЁ. Љ ўлзЄЁ ў­гваЁ бва®ЄЁ ­Ґ ЇаҐ¤гᬮв७­л.}
begin
if (ch <> '''') and (ch <> #26) then
begin
read(fin, ch);
rec_Str;
end
end;
procedure Exp_Str; {Џа®жҐ¤га  Їа®ўҐапҐв ­ «ЁзЁҐ бва®ЄЁ Ї®б«Ґ §­ Є  =}
begin
if ch = '=' then
begin
read(fin, ch);
probel; {Ћвᥪ Ґ¬ Їа®ЎҐ«л Ї®б«Ґ §­ Є  =}
if ch = '''' then {Ќ и«Ё ­ з «® бва®ЄЁ}
begin
read(fin, ch);
rec_str; {Џа®ўҐаЁ«Ё бва®Єг}
if ch = '''' then {…б«Ё ®­  Є®а४⭮ ®Є ­зЁў Ґвбп, в® }
begin
readln(fin, ch);
probel;
if ch = ';' then {€йҐ¬ в®зЄг б § Їпв®© - Є®­Ґж ўла ¦Ґ­Ёп}
error(8) {ЌҐв ®иЁЎ®Є}
else
error(9);
end
else
error(7);{ЌҐв '}
end
else
error(6);{ЌҐ Їа ўЁ«м­® ггЄ § ­  бва®Є }
end
else
error(5);{ЌҐв §­ Є  = }
end;

procedure rec_int; {ђҐЄгабЁў­ п Їа®жҐ¤га  Џа®жҐ¤га  з⥭Ёп зЁб«  Ї®б«Ґ §­ Є  =}
begin
if ch in ['0'..'9'] then {…б«Ё зЁб«® ­ зЁ­ Ґвбп б жЁдал}
begin
read(fin, ch);
rec_int; {’® Їа®ўҐа塞 зв® нв® зЁб«®}
end
else
begin {„®и«Ё ¤® Є®­ж  жЁда}
probel;
if ch in ['+', '-', '*'] then {Џа®ўҐа塞 §­ ЄЁ}
begin
probel;
rec_int;
end
end;
end;

procedure Exp_INT;{Џа®ўҐаЄ  ­  楫®Ґ зЁб«®.}
begin
read(fin, ch);
probel;
if ch in ['0'..'9', '+', '-'] then {…б«Ё жЁда , в® }
begin
read(fin, ch);
rec_int; {—Ёв Ґ¬ ўбҐ ®бв «м­лҐ жЁдал}
if ch = ';' then
error(8){ЌҐв ®иЁЎ®Є}
else
if ch = #26 then
error(9)
else
error(11){ЋиЁЎЄ  ўла ¦Ґ­Ёп}
end
else
error(11);
end; {Exp_int}

begin
if ch = ':' then {…б«Ё бв®Ёв : в® ¤ «ҐҐ Ї®©¤св вЁЇ.}
begin
read(fin, ch);
probel;
if ch in ['A'..'z'] then {’ЁЇ ­ зЁ­ Ґвбп в®«мЄ® б ЎгЄўл =)}
begin
rec_type; {—Ёв Ґ¬ вЁЇ}
if str = 'integer' then
begin
read(fin, ch);
probel;
if ch = '=' then {—Ёв Ґ¬ §­ зҐ­ЁҐ зЁб«®ў®Ј® вЁЇ .}
begin
Exp_INT;{’гв зЁв Ґ¬ зЁб«® Ё ®ЇҐа жЁЁ +, -, *}
end
else
error(5);{ЌҐв §­ Є  =}
end
else
if str ='string' then
begin
probel;
case ch of
'=': {—Ёв Ґ¬ §­ зҐ­ЁҐ бва®Є®ў®Ј® вЁЇ }
Exp_Str;
'[':
begin {€«Ё ¤«Ё­г бва®ЄЁ}
read(fin, ch);
probel;
if ch in ['0'..'9', '+'] then {…б«Ё жЁда , в® }
begin
read(fin, ch);
rec_int; {—Ёв Ґ¬ ўбҐ ®бв «м­лҐ жЁдал}
if ch = ']' then
begin
read(fin, ch);
probel;
exp_Str; {Ђ 㦥 Ї®б«Ґ §­ зҐ­ЁҐ}
end
else
error(4);{ЌҐв ]}
end
else
error(11);
end
else
error(3);{Ћ€ЃЉЂ}
END;
end
else
begin
error(2);{ЋиЁЎЄ  вЁЇ }
end;
end
else
error(2);{ЌҐЇа ўЁ«м­® гЄ § ­ вЁЇ}
{Џа®зЁв «Ё вЁЇ. Џа®ўҐаЁ¬....}
end
else
if ch = '=' then {Ђўв®®ЇаҐ¤Ґ«Ґ­ЁҐ вЁЇ }
begin
read(fin, ch);
probel;
if ch in ['0'..'9', '+', '-'] then {…б«Ё ­ зЁ­ Ґвбп б зЁб«  Ё«Ё §­ Є , в® нв® ¬®¦Ґв Ўлвм в®«мЄ® зЁб«®}
begin
read(fin, ch);
rec_int;
if ch = ';' then
error(8){ЌҐв ®иЁЎ®Є}
else
if ch = #26 then
error(9)
else
error(11){ЋиЁЎЄ  ўла ¦Ґ­Ёп}
end
else
if ch = '''' then {Ґб«Ё б Є ўлзЄЁ, в® в®«мЄ® бва®Є }
begin
read(fin, ch);
rec_str;
if ch = '''' then
begin
readln(fin, ch);
probel;
if ch = ';' then
error(8) {ЌҐв ®иЁЎ®Є}
else
error(9);
end
else
error(7);{ЌҐв '}
end
else
error(15);
end
else
error(10);{ЋиЁЎЄ  ў ®ЇЁб ­ЁЁ Є®­бв ­вл}
end;


procedure simpExpr;
begin
read(fin, str);
if str = 'const ' then {—Ёв Ґ¬ ЇҐаў®Ґ б«®ў®}
begin
read(fin, ch);
probel;
if ch in ['A'..'z'] then {Ќ зЁ­ Ґ¬ зЁв вм Ё¬п}
begin
Read_name; {—Ёв Ґ¬ Ё¬п}
Read_Type; {…б«Ё Ё¬п ¤®ЇЁб ­®, в® зЁв о вЁЇ. …б«Ё ­Ґв, в® ўлў®¦г ®иЁЎЄг}
end
else
error(1);{ЋиЁЎЄ  ў Ё¬Ґ­Ё}
end
else
error(0);{ЌҐв const}
end;

begin
{Џ®¤Ј®в®ўЄ  д ©« }
assign(fin, 'F:\TPascal\2semestr\laba3\exp.txt');
reset(fin);
str:='';
simpExpr;
close(fin);
readln;
end.

{ЋЇЁб ­ЁҐ Є®­бв ­вл § Є ­зЁў Ґвбп в®«мЄ® ;.
Џа®ЎҐ«л ®вᥪ овбп Ї зЄ ¬Ё, Ї®б«Ґ const ¤®«¦Ґ­ Ўлвм е®вп Ўл 1 Їа®ЎҐ«.
€¬п ᮤҐа¦Ёв в®«мЄ® жЁдал, ЎгЄўл Ё _, Ё ­ зЁ­ Ґвбп в®«мЄ® б ЎгЄўл.
Џ®¤¤ҐажЁў овбп в®«мЄ® integer Ё string вЁЇл.
Џ®¤¤Ґа¦Ёўў овбп в®«мЄ® бва®з­лҐ ЎгЄўл.}
Соседние файлы в папке Laba3