//SKANER PLIKU WEJSCIOWEGO ----------------------------------------------------------------------- procedure TForm1.skaner(); var pom:wsk; czyliczba, czyslowo, jest: boolean; linia, liczba, slowo: String; i,j: integer; begin czyliczba:=false; czyslowo:=false; liczba:=''; slowo:=''; jest:=false; if Memo1.lines.Count=0 then ShowMessage('nie ma co skanowac') else begin dodaj(0,'poczatek',' ',pocz,kon); for i:=0 to memo1.Lines.Count do begin linia:=memo1.lines.Strings[i]; for j:=1 to length(linia) do dodaj(i,'typ nieznany',linia[j],pocz,kon); dodaj(i,'koniec linii',' ',pocz,kon); end; dodaj(0,'koniec',' ',pocz,kon); wypiszp(pocz); // ShowMessage('rozbite na znaki'); pom:=pocz; //SKANER WŁAŚCIWY..(przeglada liste znakow utworzona z wczytanego pliku) while pom^.nast<>nil do begin //koniec liczby if (((pom^.wart=' ')or(pom^.wart=';')or(pom^.wart='+')or(pom^.wart='-')or(pom^.wart='/')or(pom^.wart='*')or (pom^.wart='.')or(pom^.wart='{')or (pom^.wart='}')or (pom^.wart='"')or(pom^.wart=':')or(pom^.wart='=')or(pom^.wart='<')or(pom^.wart='>')) and (czyliczba=true)) then begin dodaj(pom^.nrl, 'liczba', liczba, p1,k1); czyliczba:=false; liczba:=''; end; //koniec slowa if (((pom^.wart=' ')or(pom^.wart=';')or(pom^.wart='+')or (pom^.wart='-')or(pom^.wart='/')or(pom^.wart='*')or (pom^.wart='.')or(pom^.wart='{')or (pom^.wart='}')or (pom^.wart='"')or(pom^.wart=':')or(pom^.wart='=')or(pom^.wart='<')or(pom^.wart='>')) and (czyslowo=true)) then begin dodaj(pom^.nrl, 'słowo', slowo, p1,k1); czyslowo:=false; slowo:=''; end; //komentarz if (pom^.wart='{') then begin slowo:='{'; pom:=pom^.nast; while ((pom^.nast<>nil) and (jest=false)) do begin if (pom^.wart='}') then jest:=true; slowo:=slowo+pom^.wart; pom:=pom^.nast; end; if (jest=false) then ShowMessage('Blad w linii '+ Inttostr(pom^.nrl)+'! Blad we/wy. Brakuje znaku }. ') else dodaj(pom^.nrl, 'komentarz', slowo, p1,k1); if (pom^.nast=nil) then pom:=pom^.pop; slowo:=''; jest:=false; end; //we-wy if (pom^.wart='"') then begin slowo:='"'; pom:=pom^.nast; while ((pom^.nast<>nil) and (jest=false)) do begin if (pom^.wart='"') then jest:=true; slowo:=slowo+pom^.wart; pom:=pom^.nast; end; if (jest=false) then ShowMessage('Blad w linii '+ Inttostr(pom^.nrl)+'! Blad we/wy. Brakuje znaku ". ') else dodaj(pom^.nrl, 'we-wy', slowo, p1,k1); if (pom^.nast=nil) then pom:=pom^.pop; slowo:=''; jest:=false; end; //kropka if pom^.wart='.' then dodaj(pom^.nrl, 'kropka', pom^.wart, p1,k1); //separator if pom^.wart=';' then dodaj(pom^.nrl, 'separator', pom^.wart, p1,k1); //operatory if ((pom^.wart='+') or (pom^.wart='-') or (pom^.wart='/') or (pom^.wart='*')) then dodaj(pom^.nrl, 'op_arytmetyczny', pom^.wart, p1,k1); //operatory logiczne if (pom^.wart='=') then dodaj(pom^.nrl, 'op_logiczny', pom^.wart, p1,k1); if ((pom^.wart='>') or (pom^.wart='<')) then begin if(pom^.nast^.wart='=') then begin dodaj(pom^.nrl, 'op_logiczny', pom^.wart+pom^.nast^.wart, p1,k1); pom:=pom^.nast; end else dodaj(pom^.nrl, 'op_logiczny', pom^.wart, p1,k1); end; //operator przypisania if ((pom^.wart=':') and (pom^.nast^.wart='=')) then begin dodaj(pom^.nrl, 'op_przypisania', ':=', p1,k1); pom:=pom^.nast; end; //liczby if ((pom^.wart>='0') and (pom^.wart<='9')) then begin if ((pom^.pop^.wart=' ') or (pom^.pop^.wart=';') or (pom^.pop^.wart='+')or (pom^.pop^.wart='-')or (pom^.pop^.wart='/')or (pom^.pop^.wart='*') or (pom^.pop^.wart='.')or(pom^.pop^.wart='{')or(pom^.pop^.wart='}')or(pom^.pop^.wart='"')or(pom^.pop^.wart='=')or(pom^.pop^.wart='>')or(pom^.pop^.wart='<')) then czyliczba:=true; if (czyliczba=true) then liczba:=liczba + pom^.wart; if (czyslowo=true) then slowo:=slowo + pom^.wart; end; //slowa if ((pom^.wart>='A') and (pom^.wart<='z')) then begin if (czyliczba=true) then ShowMessage('Blad w linii '+ Inttostr(pom^.nrl)+'! Słowo nie może zaczynac sie cyfrą!'); if ((pom^.pop^.wart=' ') or (pom^.pop^.wart=';') or (pom^.pop^.wart='+')or (pom^.pop^.wart='-')or (pom^.pop^.wart='/')or (pom^.pop^.wart='*') or (pom^.pop^.wart='.')or(pom^.pop^.wart='{')or (pom^.pop^.wart='}')or(pom^.pop^.wart='"')or(pom^.pop^.wart='=')or(pom^.pop^.wart='>')or(pom^.pop^.wart='<')) then czyslowo:=true; if (czyslowo=true) then slowo:=slowo + pom^.wart; end; //niedozwolony znak if ((pom^.wart='~')or(pom^.wart='!')or(pom^.wart='@')or(pom^.wart='#')or(pom^.wart='$')or(pom^.wart='%') or(pom^.wart='%')) then begin ShowMessage('Blad w linii '+ Inttostr(pom^.nrl)+'! Niedozolony znak w kodzie programu!'); if (czyslowo=true) then dodaj(pom^.nrl, 'słowo', slowo, p1,k1); if (czyliczba=true) then dodaj(pom^.nrl, 'liczba', liczba, p1,k1); czyslowo:=false; slowo:=''; czyliczba:=false; liczba:=''; if pom^.nast<>nil then begin if ((pom^.nast^.wart>='A') and (pom^.nast^.wart<='z')) then czyslowo:=true; if ((pom^.nast^.wart>='0') and (pom^.nast^.wart<='9')) then czyliczba:=true; end; end; pom:=pom^.nast; end; if(p1<>nil) then wypiszp(p1); end; end;