net.ranides.assira.lexer
Class CharStreamer<UserArgument>

java.lang.Object
  extended by net.ranides.assira.lexer.CharStreamer<UserArgument>
Type Parameters:
UserArgument -

public class CharStreamer<UserArgument>
extends Object

Strumień przetwarzający kolejno elementy zbioru przydatny przy pisaniu lexerów ad hoc. Żadna funkcjonalność związana z obsługą gramatyki nie istnieje. Przydatny do przetwarzania sekwencji sterujących, kodów escape'ujących w stringach, wzorców podstawieniowych etc

Bardziej ściśle: do przetwarzania formatów, w których bezkontekstowe symbole nie są zagnieżdżane rekurencyjnie.

Author:
ranides

Constructor Summary
CharStreamer(CharConsumer<UserArgument> consumer)
          Tworzy nowy strumień, który przekazuje wyodrębnione fragmenty do podanego konsumenta.
 
Method Summary
 void close()
          Kończy przetwarzanie danych
 boolean end()
          Sprawdza, czy przetworzono wszystkie dostępne dane.
 void flush()
          Odrzuca bieżący fragment i rozpoczyna przetwarzanie nowego od aktualnej pozycji kursora.
 void flush(UserArgument extra)
          Wysyła bieżący fragment do odbiorcy.
 void flush(UserArgument extra, int left, int right)
          Wysyła bieżący fragment do odbiorcy, ignorując left pierwszych znaków oraz right ostatnich.
 char get()
          Odczytuje element ze strumienia i przesuwa kursor do przodu.
 void open(char[] input)
          Rozpoczyna przetwarzanie kolejnej porcji danych
 char peek()
          Odczytuje element ze strumienia nie przesuwając kursora
 boolean pending()
          Sprawdza,czy przetwarzanie wykorzystało wszystkie przekazane dane
 void send(UserArgument extra, char... data)
          Wysyła do odbiorcy fragment o wskazanej treści
 void skip()
          Pomija element
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CharStreamer

public CharStreamer(CharConsumer<UserArgument> consumer)
Tworzy nowy strumień, który przekazuje wyodrębnione fragmenty do podanego konsumenta.

Parameters:
consumer -
Method Detail

get

public char get()
Odczytuje element ze strumienia i przesuwa kursor do przodu.

Returns:

peek

public char peek()
Odczytuje element ze strumienia nie przesuwając kursora

Returns:

skip

public void skip()
Pomija element


end

public boolean end()
Sprawdza, czy przetworzono wszystkie dostępne dane.

Returns:

send

public void send(UserArgument extra,
                 char... data)
Wysyła do odbiorcy fragment o wskazanej treści

Parameters:
extra -
data -

flush

public void flush()
Odrzuca bieżący fragment i rozpoczyna przetwarzanie nowego od aktualnej pozycji kursora.


flush

public void flush(UserArgument extra,
                  int left,
                  int right)
Wysyła bieżący fragment do odbiorcy, ignorując left pierwszych znaków oraz right ostatnich. Następnie rozpoczyna przetwarzanie nowego fragmentu rozpoczynającego się od aktualnej pozycji kursora.

Parameters:
extra -
left -
right -

flush

public void flush(UserArgument extra)
Wysyła bieżący fragment do odbiorcy. Następnie rozpoczyna przetwarzanie nowego fragmentu od aktualnej pozycji kursora.

Parameters:
extra -

open

public void open(char[] input)
Rozpoczyna przetwarzanie kolejnej porcji danych

Parameters:
input -
Throws:
IllegalStateException - jeśli strumień jest w trakcie przetwarzania danych.

close

public void close()
Kończy przetwarzanie danych


pending

public boolean pending()
Sprawdza,czy przetwarzanie wykorzystało wszystkie przekazane dane

Returns:


Copyright © 2013. All Rights Reserved.