File tree Expand file tree Collapse file tree
src/main/java/net/marcellperger/mathexpr Expand file tree Collapse file tree Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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 }
You can’t perform that action at this time.
0 commit comments