Narzędzia użytkownika

Narzędzia witryny


tokenizer

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Next revision Both sides next revision
tokenizer [2008/04/12 13:45]
mplacht1 utworzono
tokenizer [2008/04/12 15:27]
mplacht1
Linia 1: Linia 1:
 ====== Biblioteka boost Tokenizer ====== ====== Biblioteka boost Tokenizer ======
-Biblioteka boost Tokenizer zapewnia elastyczny i łatwy w użyciu mechanizm dzielenia dowolnych łańcuchów znakowych na serię ​tokenów, grup znaków o podanych cechach. Biblioteka umożliwia wybór metody podziału łańcucha poprzez parametryzowane funktory TokenizerFunction. ​+Biblioteka boost Tokenizer zapewnia elastyczny i łatwy w użyciu mechanizm dzielenia dowolnych łańcuchów znakowych na serię ​podciągów (tokens), grup znaków o podanych cechach. Biblioteka umożliwia wybór metody podziału łańcucha poprzez parametryzowane funktory TokenizerFunction. ​
  
 ===== Klasa Tokenizer ===== ===== Klasa Tokenizer =====
-Powyższa klasa umożliwia widok na sekwencję znaków jak na kontener zawierający ​tokeny. Dostęp do tokenów ​zawartych w takim kontenerze zapewniony jest za pomocą iteratorów zdefiniowanych w bibliotece. Klasa tokenizer jest klasą szablonową pozwalającą tworzyć obiekty dzielące sekwencje znakowe określonego typu według ​okrślonego sposobu podziału. Warto zauważyć,​że podany łańcuch znakowy nie jest dzielony w czasie inicjalizacj obiektu, lecz na żądanie.+Powyższa klasa umożliwia widok na sekwencję znaków jak na kontener zawierający ​podciągi. Dostęp do podciągów ​zawartych w takim kontenerze zapewniony jest za pomocą iteratorów zdefiniowanych w bibliotece. Klasa tokenizer jest klasą szablonową pozwalającą tworzyć obiekty dzielące sekwencje znakowe określonego typu według ​określonego sposobu podziału. Warto zauważyć,​że podany łańcuch znakowy nie jest dzielony w czasie inicjalizacj obiektu, lecz na żądanie.
  
 <code cpp> <code cpp>
Linia 13: Linia 13:
   class tokenizer   class tokenizer
 </​code>​ </​code>​
-Parametrami ​szablonu ​:+Parametry ​szablonu:
   * TokenizerFunc - funktor używany do dzielenia sekwencji   * TokenizerFunc - funktor używany do dzielenia sekwencji
   * Iterator - typ iteratora specyfikującego sekwencję   * Iterator - typ iteratora specyfikującego sekwencję
-  * Type - typ sekwencji +  * Type - typ sekwencji\\ 
----- +\\
 Prosty przykład użycia biblioteki: Prosty przykład użycia biblioteki:
 <code cpp> <code cpp>
Linia 49: Linia 48:
 </​code>​ </​code>​
  
 +Lista konstruktorów oraz funkcji składowych
 +<code cpp>
 +//​konstuktory
 +tokenizer(Iterator first, Iterator last,const TokenizerFunc&​ f = TokenizerFunc()) ​
  
-===== Iteratory Token Iterator =====+template<​class Container>​ 
 +tokenizer(const Container&​ c,const TokenizerFunc&​ f TokenizerFunc())
  
 +//fukcja zmieniająca iteratory wskazujące na początek i za koniec sekwencji na nowe
 +void assign(Iterator first, Iterator last)
  
-===== Funktory TokenizerFunction =====+//fukcja zmieniająca iteratory wskazujące na początek i za koniec sekwencji oraz funkce podziału na nowe 
 +void assign(Iterator first, Iterator last, const TokenizerFunc&​ f)
  
 +//fukcja zmieniająca kontener przechowujący sekwencję na nowy
 +template<​class Container>​
 +void assign(const Container&​ c)
 +
 +//fukcja zmieniająca kontener przechowujący sekwencję oraz funkcję podziału na nowe
 +template<​class Container>​
 +void assign(const Container&​ c, const TokenizerFunc&​ f)
 +
 +//iterator wskazujący na pierwszy podciąg
 +iterator begin() const
 +
 +//iterator wskazujący za ostatni podciąg
 +iterator end() const 
 +
 +/* c - kontener zawierający sekwencję do podziału
 +*  f - funktor służący do podziału sekwencji
 +*  first - iteraor wskazujący na początek dzielonej sekwencji
 +*  last - iteraor wskazujący za dzieloną sekwencję
 +*/
 +</​code>​
 +
 +===== Klasa Token Iterator =====
 +Klasa zapewnia dostęp do podciągów dzielonej sekwencji jak przzy użyciu zeykłego iteratora.
 +<code cpp>
 +template <
 +        class TokenizerFunc = char_delimiters_separator<​char>, ​
 +        class Iterator = std::​string::​const_iterator,​
 +        class Type = std::string
 +>
 +class token_iterator_generator ​
 +</​code>​
 +Parametry szablonu:
 +  * TokenizerFunc - funktor używany do dzielenia sekwencji
 +  * Iterator - typ iteratora specyfikującego sekwencję
 +  * Type - typ sekwencji\\
 +\\
 +W celu utorzenia iteratora musimy podać iterator wskazujący na początek dzielonej sekwencji ''​begin'',​ interator wskazujący dokładnie za dzieloną sekwencję ''​end''​ oraz funkcję podziału sekwencji ''​fun''​.
 +<code cpp>
 +template<​class Type, class Iterator, class TokenizerFunc>​
 +typename token_iterator_generator<​TokenizerFunc,​Iterator,​Type>::​type ​
 +make_token_iterator(Iterator begin, Iterator end,const TokenizerFunc&​ fun)
 +</​code>​
 +\\
 +Przykład użycia orzy wykorzystaniu funktora offset_separator dzielącego łańcuch znakowy na podciągi o określonej długości.
 +<code cpp>
 +#​include<​iostream>​
 +#​include<​boost/​token_iterator.hpp>​
 +#​include<​string>​
 +
 +int main(){
 +   using namespace std;
 +   using namespace boost;
 +   ​string s = "​12252001";​
 +   int offsets[] = {2,2,4};
 +   ​offset_separator f(offsets, offsets+3);
 +   ​typedef token_iterator_generator<​offset_separator>::​type Iter;
 +   Iter beg = make_token_iterator<​string>​(s.begin(),​s.end(),​f);​
 +   Iter end = make_token_iterator<​string>​(s.end(),​s.end(),​f); ​
 +   ​for(;​beg!=end;​++beg){
 +     cout << *beg << "​\n";​
 +   }
 +}
 +</​code>​
 +
 +===== Funktory TokenizerFunction =====
 +TokenizerFunction ​ jest funktorem, którego zadaniem jest dzielenie podanej sekwencji znaków dopóki zostanie znaleziony dokładnie jeden podciąg lub osiągnięty koniec sekwencji. Następnie uaktualnia podciąg i informuje o położeniu w sekwencji elementu znajdującgo się dokładnie za za znalezionym podciągiem.\\
  
 +Biblioteka zawiera trzy klasy funktorów TokenizerFunction:​
 +  * char_separator
 +  * escaped_list_separator
 +  * offset_separator\\
 +\\
 ==== Klasa char_separator ==== ==== Klasa char_separator ====
  
tokenizer.txt · ostatnio zmienione: 2008/04/14 08:45 przez mplacht1