Skip to content

Commit a2659c5

Browse files
dmitriplotnikovcopybara-github
authored andcommitted
Add enablePrattParser option and split Parser into AntlrParser and dispatcher
Split Parser.java into AntlrParser.java (containing all ANTLR dependencies) and Parser.java (acting as a simple dispatcher between AntlrParser and PrattParser). Refactor CelParserParameterizedTest and CelParserImplTest to run tests against both ANTLR and Pratt parsers to ensure exact AST equivalence. PiperOrigin-RevId: 978827922
1 parent 226484d commit a2659c5

20 files changed

Lines changed: 6110 additions & 3382 deletions

‎common/src/main/java/dev/cel/common/CelOptions.java‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ public enum ProtoUnsetFieldOptions {
7272

7373
public abstract boolean enableQuotedIdentifierSyntax();
7474

75+
public abstract boolean enablePrattParser();
76+
7577
// Type-Checker related options
7678

7779
public abstract boolean enableCompileTimeOverloadResolution();
@@ -144,6 +146,7 @@ public static Builder newBuilder() {
144146
.retainUnbalancedLogicalExpressions(false)
145147
.enableHiddenAccumulatorVar(true)
146148
.enableQuotedIdentifierSyntax(true)
149+
.enablePrattParser(false)
147150
// Type-Checker options
148151
.enableCompileTimeOverloadResolution(false)
149152
.enableHomogeneousLiterals(false)
@@ -279,6 +282,14 @@ public abstract static class Builder {
279282
*/
280283
public abstract Builder enableQuotedIdentifierSyntax(boolean value);
281284

285+
/**
286+
* Enables Pratt parser implementation over ANTLR parser.
287+
*
288+
* <p>The Pratt parser provides improved parsing performance (typically 4x–11x speedup over
289+
* ANTLR) and lower memory overhead while producing an equivalent abstract syntax tree.
290+
*/
291+
public abstract Builder enablePrattParser(boolean value);
292+
282293
// Type-Checker related options
283294

284295
/**

‎common/src/test/java/dev/cel/common/CelOptionsTest.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ public void current_defaults() {
3535
// Defaults that aren't represented in deprecated CelOptions
3636
assertThat(CelOptions.current().build().enableUnknownTracking()).isFalse();
3737
assertThat(CelOptions.current().build().resolveTypeDependencies()).isTrue();
38+
assertThat(CelOptions.current().build().enablePrattParser()).isFalse();
3839
}
3940
}

‎extensions/src/test/java/dev/cel/extensions/CelMathExtensionsTest.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,7 @@ public void abs_overflow_throwsException() {
827827

828828
assertThat(e)
829829
.hasMessageThat()
830-
.contains("ERROR: <input>:1:10: For input string: \"-9223372036854775809\"");
830+
.contains("ERROR: <input>:1:10: invalid int literal: -9223372036854775809");
831831
}
832832

833833
@Test
@@ -917,7 +917,7 @@ public void bitAnd_maxValArg_throwsException() {
917917

918918
assertThat(e)
919919
.hasMessageThat()
920-
.contains("ERROR: <input>:1:33: For input string: \"9223372036854775809\"");
920+
.contains("ERROR: <input>:1:33: invalid int literal: 9223372036854775809");
921921
}
922922

923923
@Test

0 commit comments

Comments
 (0)