Skip to content

Commit 767a311

Browse files
committed
Usunięcie Scanner jako pośrednika w odczytywaniu
Delete ScannerFactory.java
1 parent 36ed9fd commit 767a311

File tree

4 files changed

+14
-49
lines changed

4 files changed

+14
-49
lines changed

src/main/java/pl/koder95/interpreter/Interpreter.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ public interface Interpreter<C extends Context, R> {
1818
*/
1919
Parser<C, R> getParser();
2020

21-
/**
22-
* @return fabryka {@link java.util.Scanner skanerów}, które standardowo pomagają w przetwarzaniu danych wejściowych
23-
*/
24-
ScannerFactory getScannerFactory();
25-
2621
/**
2722
* Dokonuje interpretacji danych wejściowych korzystając z {@link Context kontekstu}. Dane najpierw są tokenizowane
2823
* i zamieniane na {@link NonTerminalExpression wyrażenia nieterminalne}, aby zbudować z nich drzewo abstrakcyjnej
@@ -39,8 +34,7 @@ default R interpret(Readable readable) {
3934
Parser<C, R> parser = getParser();
4035
if (parser == null) throw new IllegalStateException("Cannot use readable when parser is null", new NullPointerException());
4136
Tokenizer tokenizer = parser.getTokenizer();
42-
ScannerFactory factory = getScannerFactory();
43-
if (tokenizer != null && factory != null) tokenizer.useScanner(factory.create(readable));
37+
if (tokenizer != null) tokenizer.setSource(readable);
4438
else throw new IllegalStateException("Cannot use readable when tokenizer or scanner factory are null", new NullPointerException());
4539
TerminalExpression<C, R> ast = parser.buildAbstractSyntaxTree();
4640
return ast.interpret(getContext());

src/main/java/pl/koder95/interpreter/ScannerFactory.java

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/main/java/pl/koder95/interpreter/Tokenizer.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,37 @@
11
package pl.koder95.interpreter;
22

33
import java.util.Queue;
4-
import java.util.Scanner;
54
import java.util.concurrent.LinkedBlockingQueue;
65

76
/**
87
* Definiuje sposób podziału danych wejściowych na tokeny.
9-
* Standardowo korzysta ze {@link Scanner skanera}, aby dzielić i analizować ciąg odczytywanych wartości.
10-
* Nic nie stoi na przeszkodzie, aby użyć innego sposobu. Wystarczy oprócz implementacji metody {@link #next()}
11-
* nadpisać metodę {@link #hasNext()}.
8+
* Korzysta ze {@link Readable źródła znaków}, aby dostarczać ciąg odczytywanych znaków.
129
*/
1310
public abstract class Tokenizer {
1411

15-
private Scanner scanner;
12+
private Readable source;
1613

1714
/**
18-
* Tworzy nową instancję tokenizera ustawiając skaner na wartość {@code null}.
19-
* Dla poprawnego funkcjonowania należy wywołać metodę {@link #useScanner(Scanner)}.
15+
* Tworzy nową instancję tokenizera ustawiając źródło znaków na wartość {@code null}.
16+
* Dla poprawnego funkcjonowania należy wywołać metodę {@link #setSource(Readable)}.
2017
*/
2118
public Tokenizer() {
22-
this.scanner = null;
19+
this.source = null;
2320
}
2421

2522
/**
26-
* @param scanner skaner używany podczas procesu tokenizacji danych wejściowych
23+
* @param source źródło znaków wczytywanych podczas procesu tokenizacji
2724
*/
28-
public void useScanner(Scanner scanner) {
29-
this.scanner = scanner;
25+
public void setSource(Readable source) {
26+
this.source = source;
3027
}
3128

3229
/**
3330
* Metoda używana podczas procesu tworzenia tokenów w metodzie {@link #next()}.
34-
* @return zwraca aktualnie ustawiony skaner
31+
* @return zwraca aktualnie ustawione źródło
3532
*/
36-
protected final Scanner getScanner() {
37-
return scanner;
33+
protected final Readable getSource() {
34+
return source;
3835
}
3936

4037
/**
@@ -61,9 +58,7 @@ public Queue<NonTerminalExpression<?>> enqueue() {
6158
* Sprawdza, czy istnieje możliwość pobrania następnego tokenu.
6259
* @return {@code true} – jeśli istnieje następny token, {@code false} w przeciwnym razie
6360
*/
64-
public boolean hasNext() {
65-
return scanner != null && scanner.hasNext();
66-
}
61+
public abstract boolean hasNext();
6762

6863
/**
6964
* Przetwarza dane wejściowe i zwraca je w postaci {@link NonTerminalExpression wyrażenia nieterminalnego},

src/main/java/pl/koder95/interpreter/package-info.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@
1414
* Interfejs {@link pl.koder95.interpreter.Interpreter} dostarcza nie tylko
1515
* {@link pl.koder95.interpreter.Interpreter#interpret(java.lang.Readable) metodę interpretującą odczytywane wartości},
1616
* ale również implementacje interfejsów {@link pl.koder95.interpreter.Parser parsera},
17-
* {@link pl.koder95.interpreter.Tokenizer tokenizera} oraz {@link pl.koder95.interpreter.ScannerFactory fabryki skanerów},
17+
* oraz {@link pl.koder95.interpreter.Tokenizer tokenizera},
1818
* które wykorzystywane są podczas budowania drzewa abstrakcyjnej syntaktyki za pomocą metod
19-
* {@link pl.koder95.interpreter.ScannerFactory#create(java.lang.Readable) create(java.lang.Readable)},
2019
* {@link pl.koder95.interpreter.Parser#buildAbstractSyntaxTree(java.util.Queue) buildAbstractSyntaxTree(java.util.Queue)}
2120
* oraz {@link pl.koder95.interpreter.Tokenizer#enqueue() enqueue()}.
2221
* </p>
@@ -25,7 +24,6 @@
2524
* @see pl.koder95.interpreter.Expression
2625
* @see pl.koder95.interpreter.Interpreter
2726
* @see pl.koder95.interpreter.Parser
28-
* @see pl.koder95.interpreter.ScannerFactory
2927
* @see pl.koder95.interpreter.Tokenizer
3028
*/
3129
package pl.koder95.interpreter;

0 commit comments

Comments
 (0)