Skip to content

Commit 4d46739

Browse files
committed
Druga wersja interpretatora
1 parent def321a commit 4d46739

File tree

5 files changed

+36
-10
lines changed

5 files changed

+36
-10
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
/**
44
* Interfejs klienta, który rozpoczyna tworzenie instancji {@link Interpreter interpretera} zależnego od podanego kontekstu.
5-
* @param <I> typ {@link Interpreter interpretera} zwracanego przez klienta
65
* @param <C> typ {@link Context kontekstu}, jaki obsługiwany jest przez interpreter
76
* @param <R> typ obiektu zwracanego przez interpreter
7+
* @param <I> typ {@link Interpreter interpretera} zwracanego przez klienta
88
*/
9-
public interface Client<I extends Interpreter<C, R>, C extends Context, R> {
9+
public interface Client<C extends Context, R, I extends Interpreter<C, R>> {
1010

1111
/**
1212
* Tworzy nową instancję {@link Interpreter interpretera}.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package pl.koder95.interpreter;
22

3-
public sealed interface Expression<C extends Context, R> permits TerminalExpression, NonTerminalExpression {
3+
public sealed interface Expression permits TerminalExpression, NonTerminalExpression {
44

5-
R interpret(C context);
5+
String asString();
66
}
Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,34 @@
11
package pl.koder95.interpreter;
22

3+
/**
4+
* Interfejs dostarcza metody do zbudowania drzewa abstrakcyjnej syntaktyki (AST) i interpretowania tej syntaktyki.
5+
*
6+
* @param <C> typ {@link Context kontekstu}
7+
* @param <R> typ obiektu zwracanego przez interpreter
8+
*/
39
public interface Interpreter<C extends Context, R> {
410

11+
/**
12+
* @return kontekst używany podczas interpretacji wyrażeń terminalnych
13+
*/
514
C getContext();
615

7-
Expression<C,R> buildAbstractSyntaxTree(String expression);
16+
/**
17+
* Buduje drzewo abstrakcyjnej syntaktyki.
18+
* @param expression wyrażenie
19+
* @return wyrażenie terminalne najwyższego poziomu
20+
*/
21+
TerminalExpression<C,R> buildAbstractSyntaxTree(String expression);
822

23+
/**
24+
* Dokonuje interpretacji danych wejściowych korzystając z {@link Context kontekstu}. Dane najpierw są tokenizowane
25+
* i zamieniane na {@link NonTerminalExpression wyrażenia nieterminalne}, aby zbudować z nich drzewo abstrakcyjnej
26+
* syntaktyki (AST).
27+
*
28+
* @return wynik interpretacji
29+
*/
930
default R interpret(String expression) {
10-
Expression<C, R> ast = buildAbstractSyntaxTree(expression);
31+
TerminalExpression<C, R> ast = buildAbstractSyntaxTree(expression);
1132
return ast.interpret(getContext());
1233
}
1334
}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package pl.koder95.interpreter;
22

3-
public non-sealed interface NonTerminalExpression<C extends Context, R> extends Expression<C, R> {
3+
import java.util.Objects;
4+
5+
public non-sealed interface NonTerminalExpression<T> extends Expression {
6+
T getObject();
7+
48
@Override
5-
default R interpret(C context) {
6-
throw new UnsupportedOperationException();
9+
default String asString() {
10+
return Objects.toString(getObject());
711
}
812
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
package pl.koder95.interpreter;
22

3-
public non-sealed interface TerminalExpression<C extends Context, R> extends Expression<C, R> {
3+
public non-sealed interface TerminalExpression<C extends Context, R> extends Expression {
4+
R interpret(C context);
45
}

0 commit comments

Comments
 (0)