Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
tmp, tmp_:string;
dl_tmp:integer;
s:string;
t:array[1..20] of string;
tt:array[1..20] of string;
e:array[1..20] of string;
a_:array[1..20] of string;
term:array[1..30] of char;
term_:array[1..30] of char;
nn:array[1..20] of integer;
begin
{ TODO - oUser - cConsole Main : Insert code here }
a:=0;writeln('‡ ¤ ЁҐ:');writeln;
writeln('Vipolnit leksicheskii analiz vxodnogo teksta, postroyit tablitsy
leksem');
writeln('I vipolnit sintaksicheskii razbor teksta po zadannoi grammatike s
postroeniem dereva ');
writeln('а §Ў®а.');
writeln('');
writeln('Zadannaya grammatika);writeln('');
writeln('S->T<T|T>T|T<=T|T>=T');
writeln('T->T+E|T-E|E');
writeln;
writeln('Vypolnili studenty VM-31 Petrov, Sorokin');
writeln('');
writeln('!!!!!!!!!!!!!!!!!!!!!WARNING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
writeln('Vhodnoi fail dolzhen nahoditsya na diske C:\spo3_in. txt');
writeln('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
writeln;readln;
assign(fin,'C:\spo3_in. txt');reset(fin);
for i:=1 to 30 do
slovo[i]:='';
j:=0;
i:=1;
c:=1;
a:=1;
ii:=1;
count:=0;
s:='';n:=0;
while not eof(fin) do
begin read(fin, ch);
s:=s+ch;n:=n+1;
Y: if(((ch>='a')and(ch<='z'))or((ch>='A')and(ch<='Z')))
then begin if(a=0)then i:=i+1;slovo[i]:=slovo[i]+ch;a:=1;tip[i]:=1;end
else if(ch='+')
then begin i:=i+1;slovo[i]:=slovo[i]+ch;a:=0;tip[i]:=3;end
else if(ch='-')
then begin i:=i+1;slovo[i]:=slovo[i]+ch;a:=0;tip[i]:=4;end
else if(ch='*')
then begin i:=i+1;slovo[i]:=slovo[i]+ch;a:=0;tip[i]:=5;end
else if(ch='/')
then begin i:=i+1;slovo[i]:=slovo[i]+ch;a:=0;tip[i]:=6;end
else if((ch='<')or(ch='>'))
then begin i:=i+1;slovo[i]:=slovo[i]+ch;a:=0;tip[i]:=7;end
else if(ch='=')
then begin slovo[i]:=slovo[i]+ch;a:=0;end
else if(ch='(')
then begin
i:=i+1;tip[i]:=2;
read(fin, ch);s:=s+ch;n:=n+1;a:=0;
slovo[i]:=slovo[i]+ch;
X:read(fin, ch);s:=s+ch;n:=n+1;
if((ch>='0')and(ch<='9'))
then begin slovo[i]:=slovo[i]+ch;goto X;end
else goto Y;
end
else if(ch=')')
then begin end
else begin j:=1;goto Z;end;
end;
close(fin);
for j:=1 to i do
begin
if(tip[j]=1)then tip_[j]:='identificator';
if(tip[j]=2)then tip_[j]:='celoe 10_noe chislo so znakom';
if(tip[j]=3)then tip_[j]:='znak slozheniya';
if(tip[j]=4)then tip_[j]:='znak vichitaniya';
if(tip[j]=5)then tip_[j]:='znak ymnozheniya';
if(tip[j]=6)then tip_[j]:='znak deleniya';
if(tip[j]=7)then tip_[j]:='znak neravenstva';
end;
c:=0;
assign(fout,'C:\spo3_out. txt');rewrite(fout);
writeln(fout,'');writeln(fout,'Tablica lecsem');
writeln(fout,'N Lecsema Tip lecsemi');
for j:=1 to i do
writeln(fout, j,' ',slovo[j],' ',tip_[j]);
writeln(fout,'');writeln(fout,'Derevo vivoda:');
tmp:='';
for j:=1 to 20 do
begin a_[j]:='';t[j]:='';tt[j]:='';e[j]:='';end;
aa:=1;
for j:=1 to n do
begin
if((s[j]='<')or(s[j]='>'))
then begin
for i:=1 to j-1 do
t:=t+s[i];
term:=s[j];
for i:=j+1 to n do
tt:=tt+s[i];
c:=1;
end
else if(s[j]='=')
then begin term:='=';delete(t,1,1);end;
end;
if(c=0)then begin j:=2;goto Z;end;
tmp:='T'+term+term+'T -> ';
write(fout,'S -> ',tmp);
b:=1;a:=1;bb:=0;aa:=3;
TX:
nn[b]:=length(t[b]);
if(nn[b]>0)then
begin
for i:=nn[b] downto 1 do
begin
if((t[b][i]='+')or(t[b][i]='-'))
then begin
if(t[b][i-1]<>'(')then
begin
for g:=i+1 to nn[b] do
e[a]:=e[a]+t[b][g];
term[aa]:=t[b][i];
for g:=1 to i-1 do
t[b+1]:=t[b+1]+t[b][g];
bb:=1;break;
end;end;
end;
if(bb=0)then begin e[a]:=t[b];delete(tmp,1,1);tmp:='E'+tmp;bb:=0;end
else begin delete(tmp,1,1);tmp:='T'+term[aa]+'E'+tmp;bb:=0;end;
a:=a+1;
end;
nn[b]:=length(tt[b]);
if(nn[b]>0)then
begin
for i:=nn[b] downto 1 do
begin
if((tt[b][i]='+')or(tt[b][i]='-'))
then begin
if(tt[b][i-1]<>'(')then
begin
for g:=i+1 to nn[b] do
e[a]:=e[a]+tt[b][g];
aa:=aa+1;
term[aa]:=tt[b][i];
for g:=1 to i-1 do
tt[b+1]:=tt[b+1]+tt[b][g];
bb:=1;break;
end;end;
end;
dl_tmp:=length(tmp);
for g:=dl_tmp downto 1 do
if(tmp[g]='T')then
begin k:=g;break;end;
delete(tmp, k,1);
if(bb=0)then begin insert('E',tmp, k);e[a]:=tt[b];write(fout, tmp);bb:=0;end
else begin
tmp_:='T'+term[aa]+'E';insert(tmp_,tmp, k);write(fout, tmp);bb:=0;end;
a:=a+1;
end;
begin
for g:=1 to length(e[ii]) do
begin
if((e[ii][g]='*')or(e[ii][g]='/'))
then begin
for i:=1 to g-1 do
a_:=a_+e[ii][i];
term_:=e[ii][g];
for i:=g+1 to length(e[ii]) do
a_:=a_+e[ii][i];
bb:=1;break;
end;
end;
for g:=1 to length(tmp) do
if(tmp[g]='E') then
begin delete(tmp, g,1);break;end;
if(bb=0)then begin
insert('a',tmp, g);bb:=0;
end
else begin
tmp_:='a'+term_+'a';
insert(tmp_,tmp, g);bb:=0;
end;
ii:=ii+1;
for g:=1 to length(e[ii]) do
begin
if((e[ii][g]='*')or(e[ii][g]='/'))
then begin
for i:=1 to g-1 do
a_:=a_+e[ii][i];
term_:=e[ii][g];
for i:=g+1 to length(e[ii]) do
a_:=a_+e[ii][i];
bb:=1;break;
end;
end;
for g:=1 to length(tmp) do
if(tmp[g]='E') then
begin delete(tmp, g,1);break;end;
if(bb=0)then begin
insert('a',tmp, g);bb:=0;
end
else begin
tmp_:='a'+term_+'a';
insert(tmp_,tmp, g);bb:=0;
end;
c:=0;ii:=ii+1;
end;
if((length(t[b])>0)or(length(tt[b])>0))
then
begin b:=b+1;goto TX;end;
for g:=length(tmp) downto 1 do
begin
if(tmp[g]='>')then begin delete(tmp, g-1,10);break;end;
end;
write(fout, tmp,'-> ',s);
close(fout);
Z:if(j=1)
then writeln('Leksicheskaya oshibka!');
if(j=2)
then readln;
end.
end.
ЗАКЛЮЧЕНИЕ
Так, в ходе рассмотрения курсовой работы мы пришли к выводу, что регулярные выражения представляют удобный способ задания регулярных множеств. Аналогично множествам, они определяются рекурсивно:
-регулярные базисные выражения задаются символами и определяют соответствующие регулярные базисные множества, например, выражение f задает одноэлементное множество {f} при условии, что f - символ алфавита T;
-если p и q - регулярные выражения, то операции объединения, конкатенации и итерации - p+q, pq, p*, q* - являются регулярными выражениями, определяющими соответствующие регулярные множества.
По сути, регулярные выражения - это более простой и удобный способ записи регулярных множеств в виде обычной строки. Каждое регулярное множество, а, следовательно, и каждое регулярное выражение задает некоторый язык L(T) в алфавите T.
Этот класс языков - достаточно мощный, с его помощью можно описать интересные языки, но устроены они довольно просто - их можно определить также с помощью простых грамматик, например, правосторонних грамматик.
Более важно, что для любого регулярного выражения можно построить конечный автомат, который распознает, принадлежит ли заданное слово языку, порожденному регулярным выражением. На этом основана практическая ценность регулярных выражений.
С точки зрения практика регулярное выражение задает образец поиска. После чего можно проверить, удовлетворяет ли заданная строка или ее подстрока данному образцу. В языках программирования синтаксис регулярного выражения существенно обогащается, что дает возможность более просто задавать сложные образцы поиска.
Такие синтаксические надстройки, хотя и не меняют сути регулярных выражений, крайне полезны для практиков, избавляя программиста от ненужных сложностей. (В Net Framework эти усложнения, на наш взгляд, чрезмерны. Выигрывая в мощности языка, проигрываем в простоте записи его выражений.)
СПИСОК ЛИТЕРАТУРЫ
Perl для профессиональных программистов. Регулярные выражения. - М.: «Бином», 2007. Смит, Билл. Методы и алгоритмы вычислений на строках (regexp) = Computing Patterns in Strings. - М.: «Вильямс», 2006. Форта, Бен. Освой самостоятельно регулярные выражения. 10 минут на урок = Sams Teach Yourself Regular Expressions in 10 Minutes. - М.: «Вильямс», 2005. Фридл, Дж. Регулярные выражения. - СПб.: «Питер», 2001. Ян Гойвертс, Стивен Левитан Регулярные выражения. Сборник рецептов. - СПб.: «Символ-Плюс», 2010.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


