-
Notifications
You must be signed in to change notification settings - Fork 24.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Move common ANTLR utility methods, such as extracting code or case insensitive streams into QL. Replace CaseInsensitiveStream (which relies on ANTLRInputStream which has been deprecated) with a CharStream variant.
- Loading branch information
Showing
13 changed files
with
252 additions
and
227 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
92 changes: 92 additions & 0 deletions
92
x-pack/plugin/ql/src/main/java/org/elasticsearch/xpack/ql/parser/CaseChangingCharStream.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
package org.elasticsearch.xpack.ql.parser; | ||
|
||
import org.antlr.v4.runtime.CharStream; | ||
import org.antlr.v4.runtime.misc.Interval; | ||
|
||
// Wrapping stream for handling case-insensitive grammars | ||
|
||
// This approach is taken from the ANTLR documentation | ||
// https://github.com/antlr/antlr4/blob/master/doc/resources/CaseChangingCharStream.java | ||
// https://github.com/antlr/antlr4/blob/master/doc/case-insensitive-lexing.md | ||
|
||
/** | ||
* This class supports case-insensitive lexing by wrapping an existing | ||
* {@link CharStream} and forcing the lexer to see either upper or | ||
* lowercase characters. Grammar literals should then be either upper or | ||
* lower case such as 'BEGIN' or 'begin'. The text of the character | ||
* stream is unaffected. Example: input 'BeGiN' would match lexer rule | ||
* 'BEGIN' if constructor parameter upper=true but getText() would return | ||
* 'BeGiN'. | ||
*/ | ||
public class CaseChangingCharStream implements CharStream { | ||
|
||
private final CharStream stream; | ||
private final boolean upper; | ||
|
||
/** | ||
* Constructs a new CaseChangingCharStream wrapping the given {@link CharStream} forcing | ||
* all characters to upper case or lower case. | ||
* @param stream The stream to wrap. | ||
* @param upper If true force each symbol to upper case, otherwise force to lower. | ||
*/ | ||
public CaseChangingCharStream(CharStream stream, boolean upper) { | ||
this.stream = stream; | ||
this.upper = upper; | ||
} | ||
|
||
@Override | ||
public String getText(Interval interval) { | ||
return stream.getText(interval); | ||
} | ||
|
||
@Override | ||
public void consume() { | ||
stream.consume(); | ||
} | ||
|
||
@Override | ||
public int LA(int i) { | ||
int c = stream.LA(i); | ||
if (c <= 0) { | ||
return c; | ||
} | ||
return upper ? Character.toUpperCase(c) : Character.toLowerCase(c); | ||
} | ||
|
||
@Override | ||
public int mark() { | ||
return stream.mark(); | ||
} | ||
|
||
@Override | ||
public void release(int marker) { | ||
stream.release(marker); | ||
} | ||
|
||
@Override | ||
public int index() { | ||
return stream.index(); | ||
} | ||
|
||
@Override | ||
public void seek(int index) { | ||
stream.seek(index); | ||
} | ||
|
||
@Override | ||
public int size() { | ||
return stream.size(); | ||
} | ||
|
||
@Override | ||
public String getSourceName() { | ||
return stream.getSourceName(); | ||
} | ||
} |
Oops, something went wrong.