################################################################################
  Kodowanie Windows-1250, koniec wiersza CR+LF, test: Za gl ja
  Tokenizer - Parser skadni jzyka podobnego do C/C++
  Copyleft (C) 2007 Adam Sawicki
  Licencja: GNU LGPL
  Kontakt: mailto:sawickiap@poczta.onet.pl , http://regedit.gamedev.pl/
################################################################################


Wstp
================================================================================

To prosty tokenizer, ktry przetwarza cig znakw na tokeny takie jak liczby,
identifikatory, acuchy, symbole itp. Obsugiwana skadnia jest wzorowana na
C/C++. Jego zaoeniem jest zastpi mj stary jzyk opisu XNL2.

Na jego bazie mona budowa parsery rnych plikw np. konfiguracyjnych albo
opisujcych i przechowujcych rne informacje - tekstowe, numeryczne i inne,
dowolnie zorganizowane. Polecam go zamiast XML, bo XML jest bardzo rozwleky.
Tokenizer raczej nie nadaje si do budowy jzykw programowania, a jedynie
formatw opisu.


Oglne
================================================================================

- Tokenizer w przypadku bdw rzuca wyjtki klasy err::TokenizerError, ktra
oprcz tego co kady bd moduu Error niesie te (zarwno w treci komunikatu,
jak i w osobnych polach) informacje na temat miejsca wystpienia bdu w
dokumencie (nr wiersza, kolumny i znaku). Jest to zawsze miejsce, od ktrego
rozpoczyna si token, ktry sprawi problem.

- Wiersze, kolumny i znaki s numerowane od 1, tak jak w edytorach tekstu.


Obsuga
================================================================================

1. Wczyta dokument lub uzyska strumie pozwalajcy na jego wczytywanie.
2. Utworzy obiekt klasy Tokenizer korzystajc z jednego z jego konstruktorw.
3. Opcjonalnie skonfigurowa tokenizer rejestrujc swoje sowa kluczowe.
4. Pobiera w ptli kolejne tokeny metod Next, po ktrej mona odczytywa:
   - Typ tokena - metoda GetToken
   - Informacje na temat tokena - metoda GetString i inne zalenie od typu
   Przerwa ptl po napotkaniu TOKEN_EOF.


Skadnia
================================================================================

Skadnia jest wzorowana na C/C++.

Znak \ po ktrym od razu nastpuje koniec linii przeamuje lini tak, e koniec
linii jest ignorowany i dalej rozciga si ta sama linia, np.:

  abc\
  def

Komentarze mog by:

- jednowierszowe: // komentarz
  Rociga si do koca wiersza
- wielowierszowe: /* komentarz */
  Rozciga si do napotkania pierwszego */
  Nie mona zagnieda komentarzy.

Symbolami s znaki:

  ` ~ ! @ # $ % ^ & * ( ) = [ ] { } ; : , . < > ? \ | /

Identyfikatorem jest cig liter (tylko ASCII, bez polskich) i cyfr
rozpoczynajcy si od litery. Znak _ jest uwaany za liter. Przykady:

  abc   a123   _G

Sowo kluczowe jest jak identyfikator. Jedyna rnica polega na tym, e jego
specjalne znaczenie jako sowa kluczowego zostao zarejestrowane.

Liczba cakowita to na przykad:
Jeli rozpoczyna si od 0, jest semkowa.
Jeli rozpoczyna si od 0x lub 0X, jest szesnastkowa.

  10   +2   -7   0777   0xFFFFFFFF

Liczba zmiennoprzecinkowa to na przykad:

  10.5   -.2   3.1e-2

Staa znakowa to pojedynczy znak objty w apostrofy:

  'A'   '\n'

Staa acuchowa to dowolna liczba znakw objta w cudzysowy.
O tym czy wewntrz acucha moe si znajdowa koniec wiersza (czy acuch moe
si rozciga na wiele wierszy) decyduje flaga w konstruktorze tokena. Domylnie
nie moe.

  "abc"   ""   "a b \"c\"\n"

Sekwencje ucieczki, czyli sposb zapisywania znakw specjalnych wewntrz staych
znakowych i acuchowych jest podobny do C/C++.

- Znaki interpretowane dosownie: \\ \? \" \'
- Znaki specjalne: \0 \r \n \t \v \b \f \a
- Dowolny znak zapisany jako dwucyfrowa liczba szesnastkowa: \xFF \x41 \xA0


Czego nie ma
================================================================================

- Wczania i wyczania poszczeglnych znakw jako symboli.
Byo, ale ostatecznie zdecydowaem si zrezygnowa z tej funkcji.

- Symboli wieloznakowych, np.: ==
Byo w planach, ale ostatecznie zrezygnowaem bo uznaem, e si nie przyda.

- Przyrostkw do liczb sygnalizujcych ich typ, np.: 1.0f
Uznaem, e obejdzie si bez tego.

- Wracania do wczeniejszych miejsc w dokumencie, podgldania nastpnych
tokenw, odkadania tokenw z powrotem

- Parsera DOM, ktry rozkadaby dokument na list tokenw
Lepiej od razu parsowa strumie tokenw na docelowe dane.

