Skip to content

Commit 28164cc

Browse files
committed
Decouple the ANTLR AST from Painless.
Closes elastic#18286
1 parent 9fbbd73 commit 28164cc

File tree

94 files changed

+8960
-8285
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+8960
-8285
lines changed

buildSrc/src/main/resources/checkstyle_suppressions.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<!-- On Windows, Checkstyle matches files using \ path separator -->
88

99
<!-- These files are generated by ANTLR so its silly to hold them to our rules. -->
10-
<suppress files="org[/\\]elasticsearch[/\\]painless[/\\]PainlessLexer\.java" checks="." />
11-
<suppress files="org[/\\]elasticsearch[/\\]painless[/\\]PainlessParser(|BaseVisitor|Visitor)\.java" checks="." />
10+
<suppress files="org[/\\]elasticsearch[/\\]painless[/\\]antlr[/\\]PainlessLexer\.java" checks="." />
11+
<suppress files="org[/\\]elasticsearch[/\\]painless[/\\]antlr[/\\]PainlessParser(|BaseVisitor|Visitor)\.java" checks="." />
1212

1313
<!-- Hopefully temporary suppression of LineLength on files that don't pass it. We should remove these when we the
1414
files start to pass. -->

modules/lang-painless/ant.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<include name="@{grammar}ParserVisitor.java" />
5050
<include name="@{grammar}ParserBaseVisitor.java" />
5151
</patternset>
52-
<property name="output.path" location="src/main/java/org/elasticsearch/painless"/>
52+
<property name="output.path" location="src/main/java/org/elasticsearch/painless/antlr"/>
5353
<!-- delete parser and lexer so files will be generated -->
5454
<delete dir="${output.path}">
5555
<patternset refid="grammar.@{grammar}.patternset"/>
@@ -63,15 +63,15 @@
6363
<local name="grammar.path"/>
6464
<local name="output.path"/>
6565
<property name="grammar.path" location="src/main/antlr"/>
66-
<property name="output.path" location="src/main/java/org/elasticsearch/painless"/>
66+
<property name="output.path" location="src/main/java/org/elasticsearch/painless/antlr"/>
6767
<!-- invoke ANTLR4 -->
6868
<java classname="org.antlr.v4.Tool" fork="true" failonerror="true" classpathref="regenerate.classpath" taskname="antlr">
6969
<sysproperty key="file.encoding" value="UTF-8"/>
7070
<sysproperty key="user.language" value="en"/>
7171
<sysproperty key="user.country" value="US"/>
7272
<sysproperty key="user.variant" value=""/>
7373
<arg value="-package"/>
74-
<arg value="org.elasticsearch.painless"/>
74+
<arg value="org.elasticsearch.painless.antlr"/>
7575
<arg value="-o"/>
7676
<arg path="${output.path}"/>
7777
<arg path="${grammar.path}/@{grammar}Lexer.g4"/>
@@ -85,15 +85,15 @@
8585
<local name="grammar.path"/>
8686
<local name="output.path"/>
8787
<property name="grammar.path" location="src/main/antlr"/>
88-
<property name="output.path" location="src/main/java/org/elasticsearch/painless"/>
88+
<property name="output.path" location="src/main/java/org/elasticsearch/painless/antlr"/>
8989
<!-- invoke ANTLR4 -->
9090
<java classname="org.antlr.v4.Tool" fork="true" failonerror="true" classpathref="regenerate.classpath" taskname="antlr">
9191
<sysproperty key="file.encoding" value="UTF-8"/>
9292
<sysproperty key="user.language" value="en"/>
9393
<sysproperty key="user.country" value="US"/>
9494
<sysproperty key="user.variant" value=""/>
9595
<arg value="-package"/>
96-
<arg value="org.elasticsearch.painless"/>
96+
<arg value="org.elasticsearch.painless.antlr"/>
9797
<arg value="-no-listener"/>
9898
<arg value="-visitor"/>
9999
<!-- <arg value="-Xlog"/> -->
@@ -110,7 +110,7 @@
110110
<local name="grammar.path"/>
111111
<local name="output.path"/>
112112
<property name="grammar.path" location="src/main/antlr"/>
113-
<property name="output.path" location="src/main/java/org/elasticsearch/painless"/>
113+
<property name="output.path" location="src/main/java/org/elasticsearch/painless/antlr"/>
114114
<patternset id="grammar.@{grammar}.patternset">
115115
<include name="@{grammar}Lexer.java" />
116116
<include name="@{grammar}Parser.java" />

modules/lang-painless/src/main/antlr/PainlessLexer.g4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ EQR: '===';
6363
NE: '!=';
6464
NER: '!==';
6565
BWAND: '&';
66-
BWXOR: '^';
66+
XOR: '^';
6767
BWOR: '|';
6868
BOOLAND: '&&';
6969
BOOLOR: '||';

modules/lang-painless/src/main/antlr/PainlessParser.g4

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ expression
9292
| TRUE # true
9393
| FALSE # false
9494
| NULL # null
95-
| <assoc=right> extstart increment # postinc
96-
| <assoc=right> increment extstart # preinc
97-
| extstart # external
95+
| <assoc=right> chain ( INCR | DECR ) # postinc
96+
| <assoc=right> ( INCR | DECR ) chain # preinc
97+
| chain # read
9898
| <assoc=right> ( BOOLNOT | BWNOT | ADD | SUB ) expression # unary
9999
| <assoc=right> LP decltype RP expression # cast
100100
| expression ( MUL | DIV | REM ) expression # binary
@@ -103,39 +103,35 @@ expression
103103
| expression ( LT | LTE | GT | GTE ) expression # comp
104104
| expression ( EQ | EQR | NE | NER ) expression # comp
105105
| expression BWAND expression # binary
106-
| expression BWXOR expression # binary
106+
| expression XOR expression # binary
107107
| expression BWOR expression # binary
108108
| expression BOOLAND expression # bool
109109
| expression BOOLOR expression # bool
110110
| <assoc=right> expression COND expression COLON expression # conditional
111-
| <assoc=right> extstart ( ASSIGN | AADD | ASUB | AMUL | ADIV
111+
| <assoc=right> chain ( ASSIGN | AADD | ASUB | AMUL | ADIV
112112
| AREM | AAND | AXOR | AOR
113113
| ALSH | ARSH | AUSH ) expression # assignment
114114
;
115115

116-
extstart
117-
: extprec
118-
| extcast
119-
| extvar
120-
| extnew
121-
| extstring
116+
chain
117+
: linkprec
118+
| linkcast
119+
| linkvar
120+
| linknew
121+
| linkstring
122122
;
123123

124-
extprec: LP ( extprec | extcast | extvar | extnew | extstring ) RP ( extdot | extbrace )?;
125-
extcast: LP decltype RP ( extprec | extcast | extvar | extnew | extstring );
126-
extbrace: LBRACE expression RBRACE ( extdot | extbrace )?;
127-
extdot: DOT ( extcall | extfield );
128-
extcall: EXTID arguments ( extdot | extbrace )?;
129-
extvar: identifier ( extdot | extbrace )?;
130-
extfield: ( EXTID | EXTINTEGER ) ( extdot | extbrace )?;
131-
extnew: NEW identifier ( ( arguments extdot? ) | ( ( LBRACE expression RBRACE )+ extdot? ) );
132-
extstring: STRING (extdot | extbrace )?;
124+
linkprec: LP ( linkprec | linkcast | linkvar | linknew | linkstring ) RP ( linkdot | linkbrace )?;
125+
linkcast: LP decltype RP ( linkprec | linkcast | linkvar | linknew | linkstring );
126+
linkbrace: LBRACE expression RBRACE ( linkdot | linkbrace )?;
127+
linkdot: DOT ( linkcall | linkfield );
128+
linkcall: EXTID arguments ( linkdot | linkbrace )?;
129+
linkvar: identifier ( linkdot | linkbrace )?;
130+
linkfield: ( EXTID | EXTINTEGER ) ( linkdot | linkbrace )?;
131+
linknew: NEW identifier ( ( arguments linkdot? ) | ( ( LBRACE expression RBRACE )+ linkdot? ) );
132+
linkstring: STRING (linkdot | linkbrace )?;
133133

134134
arguments
135135
: ( LP ( expression ( COMMA expression )* )? RP )
136136
;
137137

138-
increment
139-
: INCR
140-
| DECR
141-
;

0 commit comments

Comments
 (0)