Skip to content

Commit 6ab1df6

Browse files
Add parseParens, use computed MAX_PRECEDENCE
1 parent b86880b commit 6ab1df6

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

src/main/java/net/marcellperger/mathexpr/SymbolInfo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public enum SymbolInfo {
2929
public static final Map<Class<? extends MathSymbol>, SymbolInfo> CLS_TO_INFO_MAP;
3030
public static final Map<Integer, Set<SymbolInfo>> PREC_TO_INFO_MAP;
3131
public static final List<Entry<Integer, Set<SymbolInfo>>> PREC_SORTED_INFO;
32+
public static final int MAX_PRECEDENCE;
3233

3334
public final int precedence; // TODO make this Integer
3435
public final Class<? extends MathSymbol> cls;
@@ -103,5 +104,6 @@ public enum SymbolInfo {
103104
CLS_TO_INFO_MAP = Arrays.stream(values()).collect(Collectors.toUnmodifiableMap(p -> p.cls, p -> p));
104105
PREC_TO_INFO_MAP = Arrays.stream(values()).collect(Collectors.groupingBy(s -> s.precedence, Collectors.toUnmodifiableSet()));
105106
PREC_SORTED_INFO = PREC_TO_INFO_MAP.entrySet().stream().sorted(Comparator.comparingInt(Entry::getKey)).toList();
107+
MAX_PRECEDENCE = PREC_SORTED_INFO.getLast().getKey();
106108
}
107109
}

src/main/java/net/marcellperger/mathexpr/parser/Parser.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,16 @@ public Parser(String src_) {
2727
}
2828

2929
public MathSymbol parse() throws ExprParseException {
30-
MathSymbol sym = parseInfixPrecedenceLevel(3); // TODO compute max prec level
30+
MathSymbol sym = parseExpr();
3131
discardWhitespace();
3232
if(notEof()) throw new ExprParseException("Syntax error: didn't reach end of input");
3333
return sym;
3434
}
3535

36+
public MathSymbol parseExpr() throws ExprParseException {
37+
return parseInfixPrecedenceLevel(SymbolInfo.MAX_PRECEDENCE);
38+
}
39+
3640
// https://regex101.com/r/2EogTA/1
3741
protected static final Pattern DOUBLE_RE = Pattern.compile("^([+-]?)(\\d*\\.\\d+|\\d+\\.?)(?:[eE]([+-]?\\d+))?");
3842
public @NotNull MathSymbol parseDoubleLiteral_exc() throws ExprParseException {
@@ -66,10 +70,9 @@ public MathSymbol parse() throws ExprParseException {
6670
return parseDoubleLiteral_null();
6771
}
6872

69-
private static final int PREC_IN_PARENS = 3; // TODO compute max prec level
7073
public @Nullable MathSymbol parseParens() throws ExprParseException {
7174
advanceExpectNext('(');
72-
MathSymbol sym = parseInfixPrecedenceLevel(PREC_IN_PARENS); // TODO use .parse() when it is completed
75+
MathSymbol sym = parseExpr();
7376
advanceExpectNext(')');
7477
return sym;
7578
}

0 commit comments

Comments
 (0)