Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы / Laba3 / zad1
.pas 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 вЁЇл.
Џ®¤¤Ґа¦Ёўў овбп в®«мЄ® бва®злҐ ЎгЄўл.}
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 вЁЇл.
Џ®¤¤Ґа¦Ёўў овбп в®«мЄ® бва®злҐ ЎгЄўл.}