Merged branch 'incremental-analysis' into 'main'

This commit is contained in:
Akash Yadav
2022-06-21 17:02:22 +05:30
62 changed files with 96267 additions and 50147 deletions
+3
View File
@@ -641,6 +641,9 @@
<option name="METHOD_CALL_CHAIN_WRAP" value="0" />
<option name="ASSIGNMENT_WRAP" value="0" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
<option name="KEEP_INDENTS_ON_EMPTY_LINES" value="true" />
</indentOptions>
</codeStyleSettings>
+1 -1
View File
@@ -2,6 +2,6 @@
<project version="4">
<component name="KtfmtSettings">
<option name="enabled" value="true" />
<option name="uiFormatterStyle" value="Dropbox" />
<option name="uiFormatterStyle" value="Google (internal)" />
</component>
</project>
+10
View File
@@ -13,6 +13,16 @@
<option name="language" value="Java" />
<option name="generateVisitor" value="true" />
</PerGrammarGenerationSettings>
<PerGrammarGenerationSettings>
<option name="fileName" value="$PROJECT_DIR$/lexers/src/main/java/com/itsaky/androidide/lexers/java/JavaLexer.g4" />
<option name="autoGen" value="true" />
<option name="outputDir" value="" />
<option name="libDir" value="" />
<option name="encoding" value="" />
<option name="pkg" value="" />
<option name="language" value="Java" />
<option name="generateVisitor" value="true" />
</PerGrammarGenerationSettings>
</list>
</option>
</component>
+8
View File
@@ -138,4 +138,12 @@ dependencies {
// This is to build the tooling-api-impl project before the app is built
// So we always copy the latest JAR file to assets
compileOnly project (path: ':build-tools:tooling-api-impl')
testImplementation common.editor
testImplementation tests.junit
testImplementation tests.google_truth
testImplementation tests.robolectric
androidTestImplementation tests.androidx_junit
androidTestImplementation tests.androidx_espresso
androidTestImplementation tests.google_truth
}
@@ -0,0 +1,641 @@
/*
* This file is part of AndroidIDE.
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.language.incremental;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import io.github.rosemoe.sora.lang.analysis.IncrementalAnalyzeManager;
import io.github.rosemoe.sora.lang.analysis.StyleReceiver;
import io.github.rosemoe.sora.lang.styling.CodeBlock;
import io.github.rosemoe.sora.lang.styling.Span;
import io.github.rosemoe.sora.lang.styling.Spans;
import io.github.rosemoe.sora.lang.styling.Styles;
import io.github.rosemoe.sora.text.CharPosition;
import io.github.rosemoe.sora.text.Content;
import io.github.rosemoe.sora.text.ContentReference;
import io.github.rosemoe.sora.util.IntPair;
import io.github.rosemoe.sora.widget.schemes.EditorColorScheme;
/**
* TODO: Remove this class as soon as our needs are implemented in sora-editor's
* AsyncIncrementalAnalyzeManager.
*
* @author Rose
* @author Akash Yadav
* @see <a
* href="https://github.com/Rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/analysis/AsyncIncrementalAnalyzeManager.java">AsyncIncrementalAnalyzeManager</a>
* in <b>sora-editor.</b>
*/
public abstract class AsyncIncrementalAnalyzeManager<S, T>
implements IncrementalAnalyzeManager<S, T> {
private StyleReceiver receiver;
private ContentReference ref;
private Bundle extraArguments;
private LooperThread thread;
private volatile long runCount;
private static int sThreadId = 0;
private static final int MSG_BASE = 11451400;
private static final int MSG_INIT = MSG_BASE + 1;
private static final int MSG_MOD = MSG_BASE + 2;
private static final int MSG_EXIT = MSG_BASE + 3;
@NonNull private static final Method clearSpansMethod;
static {
try {
final var klass = IncrementalAnalyzeManager.LineTokenizeResult.class;
clearSpansMethod = klass.getDeclaredMethod("clearSpans");
if (!clearSpansMethod.isAccessible()) {
clearSpansMethod.setAccessible(true);
}
} catch (Throwable err) {
throw new RuntimeException(
"Cannot access clearSpans() method of LineTokenizeResult. Maybe implementation changed?",
err);
}
}
private static <S_, T_> LineTokenizeResult<S_, T_> clearSpans(LineTokenizeResult<S_, T_> result) {
try {
return (LineTokenizeResult<S_, T_>) clearSpansMethod.invoke(result);
} catch (Throwable error) {
throw new RuntimeException("Cannot invoke clearSpans() method", error);
}
}
@Override
public void setReceiver(StyleReceiver receiver) {
this.receiver = receiver;
}
@Override
public void reset(@NonNull ContentReference content, @NonNull Bundle extraArguments) {
this.ref = content;
this.extraArguments = extraArguments;
rerun();
}
@Override
public void insert(CharPosition start, CharPosition end, CharSequence insertedText) {
if (thread != null) {
increaseRunCount();
thread.handler.sendMessage(
thread.handler.obtainMessage(
MSG_MOD,
new TextModification(
IntPair.pack(start.line, start.column),
IntPair.pack(end.line, end.column),
insertedText)));
sendUpdate(thread.styles);
}
}
@Override
public void delete(CharPosition start, CharPosition end, CharSequence deletedText) {
if (thread != null) {
increaseRunCount();
thread.handler.sendMessage(
thread.handler.obtainMessage(
MSG_MOD,
new TextModification(
IntPair.pack(start.line, start.column),
IntPair.pack(end.line, end.column),
null)));
sendUpdate(thread.styles);
}
}
@Override
public void rerun() {
if (thread != null) {
thread.callback =
() -> {
throw new CancelledException();
};
if (thread.isAlive()) {
final var handler = thread.handler;
if (handler != null) {
handler.sendMessage(Message.obtain(thread.handler, MSG_EXIT));
}
thread.abort = true;
}
}
final var text = ref.getReference().copyText(false);
text.setUndoEnabled(false);
thread =
new LooperThread(
() -> thread.handler.sendMessage(thread.handler.obtainMessage(MSG_INIT, text)));
thread.setName("AsyncAnalyzer-" + nextThreadId());
increaseRunCount();
thread.start();
sendUpdate(null);
}
@Override
public LineTokenizeResult<S, T> getState(int line) {
final var thread = this.thread;
if (thread == Thread.currentThread()) {
return thread.states.get(line);
}
throw new SecurityException("Can not get state from non-analytical or abandoned thread");
}
@Override
public AsyncLineTokenizeResult<S, T> tokenizeLine(final CharSequence line, final S state) {
throw new UnsupportedOperationException("Use tokenizeLine(CharSequence, int, S) instead.");
}
@Override
public List<Span> generateSpansForLine(final LineTokenizeResult<S, T> tokens) {
throw new UnsupportedOperationException(
"Use generateSpansForLine(AsyncLineTokenizeResult) instead.");
}
/**
* Generate spans for the given tokenization result.
*
* @param tokens The tokenization result.
* @return The spans for the tokens.
*/
public abstract List<Span> generateSpansForLine(final AsyncLineTokenizeResult<S, T> tokens);
private synchronized void increaseRunCount() {
runCount++;
}
private static synchronized int nextThreadId() {
sThreadId++;
return sThreadId;
}
@Override
public void destroy() {
if (thread != null) {
thread.callback =
() -> {
throw new CancelledException();
};
if (thread.isAlive()) {
thread.handler.sendMessage(Message.obtain(thread.handler, MSG_EXIT));
thread.abort = true;
}
}
receiver = null;
ref = null;
extraArguments = null;
thread = null;
}
private void sendUpdate(Styles styles) {
final var r = receiver;
if (r != null) {
r.setStyles(this, styles);
}
}
/**
* Compute code blocks
*
* @param text The text. can be safely accessed.
*/
public abstract List<CodeBlock> computeBlocks(Content text, CodeBlockAnalyzeDelegate delegate);
public Bundle getExtraArguments() {
return extraArguments;
}
/** Helper class for analyzing code block */
public class CodeBlockAnalyzeDelegate {
private final LooperThread thread;
int suppressSwitch;
CodeBlockAnalyzeDelegate(@NonNull LooperThread lp) {
thread = lp;
}
public void setSuppressSwitch(int suppressSwitch) {
this.suppressSwitch = suppressSwitch;
}
void reset() {
suppressSwitch = Integer.MAX_VALUE;
}
public boolean isCancelled() {
return thread.myRunCount != runCount;
}
public boolean isNotCancelled() {
return thread.myRunCount == runCount;
}
}
private class LooperThread extends Thread {
volatile boolean abort;
Looper looper;
Handler handler;
Content shadowed;
long myRunCount;
List<LineTokenizeResult<S, T>> states = new ArrayList<>();
Styles styles;
LockedSpans spans;
Runnable callback;
CodeBlockAnalyzeDelegate delegate = new CodeBlockAnalyzeDelegate(this);
public LooperThread(Runnable callback) {
this.callback = callback;
}
private void tryUpdate() {
if (!abort) sendUpdate(styles);
}
private void initialize() {
styles = new Styles(spans = new LockedSpans());
S state = getInitialState();
var mdf = spans.modify();
for (int i = 0; i < shadowed.getLineCount(); i++) {
var line = shadowed.getLine(i);
var result = tokenizeLine(line, state);
result.line = i;
state = result.state;
var spans = result.spans != null ? result.spans : generateSpansForLine(result);
states.add(clearSpans(result));
mdf.addLineAt(i, spans);
}
styles.blocks = computeBlocks(shadowed, delegate);
styles.setSuppressSwitch(delegate.suppressSwitch);
tryUpdate();
}
@Override
public void run() {
Looper.prepare();
looper = Looper.myLooper();
handler =
new Handler(looper) {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
try {
myRunCount = runCount;
delegate.reset();
switch (msg.what) {
case MSG_INIT:
shadowed = (Content) msg.obj;
if (!abort) {
initialize();
}
break;
case MSG_MOD:
if (!abort) {
var mod = (TextModification) msg.obj;
int startLine = IntPair.getFirst(mod.start);
int endLine = IntPair.getFirst(mod.end);
if (mod.changedText == null) {
shadowed.delete(
IntPair.getFirst(mod.start),
IntPair.getSecond(mod.start),
IntPair.getFirst(mod.end),
IntPair.getSecond(mod.end));
S state =
startLine == 0 ? getInitialState() : states.get(startLine - 1).state;
// Remove states
if (endLine >= startLine + 1) {
states.subList(startLine + 1, endLine + 1).clear();
}
var mdf = spans.modify();
for (int i = startLine + 1; i <= endLine; i++) {
mdf.deleteLineAt(startLine + 1);
}
int line = startLine;
while (line < shadowed.getLineCount()) {
var res = tokenizeLine(shadowed.getLine(line), state);
res.line = line;
mdf.setSpansOnLine(
line, res.spans != null ? res.spans : generateSpansForLine(res));
var old = states.set(line, clearSpans(res));
if (stateEquals(old.state, res.state)) {
break;
}
state = res.state;
line++;
}
} else {
shadowed.insert(
IntPair.getFirst(mod.start),
IntPair.getSecond(mod.start),
mod.changedText);
S state =
startLine == 0 ? getInitialState() : states.get(startLine - 1).state;
int line = startLine;
var spans = styles.spans.modify();
// Add Lines
while (line <= endLine) {
var res = tokenizeLine(shadowed.getLine(line), state);
res.line = line;
if (line == startLine) {
spans.setSpansOnLine(
line, res.spans != null ? res.spans : generateSpansForLine(res));
states.set(line, clearSpans(res));
} else {
spans.addLineAt(
line, res.spans != null ? res.spans : generateSpansForLine(res));
states.add(line, clearSpans(res));
}
state = res.state;
line++;
}
// line = end.line + 1, check whether the state equals
while (line < shadowed.getLineCount()) {
var res = tokenizeLine(shadowed.getLine(line), state);
res.line = line;
if (stateEquals(res.state, states.get(line).state)) {
break;
} else {
spans.setSpansOnLine(
line, res.spans != null ? res.spans : generateSpansForLine(res));
states.set(line, clearSpans(res));
}
line++;
}
}
}
styles.blocks = computeBlocks(shadowed, delegate);
styles.setSuppressSwitch(delegate.suppressSwitch);
tryUpdate();
break;
case MSG_EXIT:
looper.quit();
break;
}
} catch (Exception e) {
Log.w("AsyncAnalysis", "Thread " + Thread.currentThread().getName() + " failed", e);
}
}
};
try {
callback.run();
Looper.loop();
} catch (CancelledException e) {
// ignored
}
}
}
private static class LockedSpans implements Spans {
private final Lock lock;
private final List<Line> lines;
public LockedSpans() {
lines = new ArrayList<>(128);
lock = new ReentrantLock();
}
@Override
public void adjustOnDelete(CharPosition start, CharPosition end) {}
@Override
public void adjustOnInsert(CharPosition start, CharPosition end) {}
@Override
public int getLineCount() {
return lines.size();
}
@Override
public Reader read() {
return new ReaderImpl();
}
@Override
public Modifier modify() {
return new ModifierImpl();
}
@Override
public boolean supportsModify() {
return true;
}
private static class Line {
public Lock lock = new ReentrantLock();
public List<Span> spans;
public Line() {
this(null);
}
public Line(List<Span> s) {
spans = s;
}
}
private class ReaderImpl implements Spans.Reader {
private Line line;
public void moveToLine(int line) {
if (line < 0) {
if (this.line != null) {
this.line.lock.unlock();
}
this.line = null;
} else if (line >= lines.size()) {
if (this.line != null) {
this.line.lock.unlock();
}
this.line = null;
} else {
if (this.line != null) {
this.line.lock.unlock();
}
var locked = false;
try {
locked = lock.tryLock(100, TimeUnit.MICROSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (locked) {
try {
var obj = lines.get(line);
if (obj.lock.tryLock()) {
this.line = obj;
} else {
this.line = null;
}
} finally {
lock.unlock();
}
} else {
this.line = null;
}
}
}
@Override
public int getSpanCount() {
return line == null ? 1 : line.spans.size();
}
@Override
public Span getSpanAt(int index) {
return line == null ? Span.obtain(0, EditorColorScheme.TEXT_NORMAL) : line.spans.get(index);
}
@Override
public List<Span> getSpansOnLine(int line) {
var spans = new ArrayList<Span>();
var locked = false;
try {
locked = lock.tryLock(1, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (locked) {
Line obj = null;
try {
if (line < lines.size()) {
obj = lines.get(line);
}
} finally {
lock.unlock();
}
if (obj != null && obj.lock.tryLock()) {
try {
return Collections.unmodifiableList(obj.spans);
} finally {
obj.lock.unlock();
}
} else {
spans.add(getSpanAt(0));
}
} else {
spans.add(getSpanAt(0));
}
return spans;
}
}
private class ModifierImpl implements Modifier {
@Override
public void setSpansOnLine(int line, List<Span> spans) {
lock.lock();
try {
while (lines.size() <= line) {
var list = new ArrayList<Span>();
list.add(Span.obtain(0, EditorColorScheme.TEXT_NORMAL));
lines.add(new Line(list));
}
var obj = lines.get(line);
obj.lock.lock();
try {
obj.spans = spans;
} finally {
obj.lock.unlock();
}
} finally {
lock.unlock();
}
}
@Override
public void addLineAt(int line, List<Span> spans) {
lock.lock();
try {
lines.add(line, new Line(spans));
} finally {
lock.unlock();
}
}
@Override
public void deleteLineAt(int line) {
lock.lock();
try {
var obj = lines.get(line);
obj.lock.lock();
try {
lines.remove(line);
} finally {
obj.lock.unlock();
}
} finally {
lock.unlock();
}
}
}
}
public static class AsyncLineTokenizeResult<S_, T_> extends LineTokenizeResult<S_, T_> {
public int line = -1;
public AsyncLineTokenizeResult(@NonNull final S_ state, @Nullable final List<T_> tokens) {
super(state, tokens);
}
public AsyncLineTokenizeResult(
@NonNull final S_ state,
@Nullable final List<T_> tokens,
@Nullable final List<Span> spans) {
super(state, tokens, spans);
}
}
private static class TextModification {
private final long start;
private final long end;
/** null for deletion */
private final CharSequence changedText;
TextModification(long start, long end, CharSequence text) {
this.start = start;
this.end = end;
changedText = text;
}
}
private static class CancelledException extends RuntimeException {}
}
@@ -0,0 +1,393 @@
/*
* This file is part of AndroidIDE.
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.language.incremental;
import static com.itsaky.androidide.language.incremental.LineState.INCOMPLETE;
import static com.itsaky.androidide.language.incremental.LineState.NORMAL;
import androidx.annotation.NonNull;
import com.google.common.base.Preconditions;
import com.google.common.collect.EvictingQueue;
import com.itsaky.androidide.language.IAnalyzeManager;
import com.itsaky.androidide.language.java.JavaIncrementalAnalyzeManager;
import com.itsaky.androidide.lexers.java.JavaLexer;
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE;
import com.itsaky.androidide.utils.CharSequenceReader;
import com.itsaky.androidide.utils.ILogger;
import com.itsaky.lsp.models.DiagnosticItem;
import com.itsaky.lsp.models.DiagnosticSeverity;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.Token;
import org.jetbrains.annotations.Contract;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import io.github.rosemoe.sora.lang.styling.MappedSpans;
import io.github.rosemoe.sora.lang.styling.Span;
import io.github.rosemoe.sora.lang.styling.TextStyle;
import io.github.rosemoe.sora.util.IntPair;
import kotlin.Pair;
/**
* Base class for implementing an {@link AsyncIncrementalAnalyzeManager} in AndroidIDE.
*
* @author Akash Yadav
*/
public abstract class BaseIncrementalAnalyzeManager
extends AsyncIncrementalAnalyzeManager<LineState, IncrementalToken> implements IAnalyzeManager {
protected final Lexer lexer;
protected final List<DiagnosticItem> ideDiagnostics = new ArrayList<>();
protected List<DiagnosticItem> diagnostics = new ArrayList<>();
private final int[] multilineStartTypes;
private final int[] multilineEndTypes;
private static final ILogger LOG = ILogger.newInstance("BaseIncrementalAnalyzeManager");
public BaseIncrementalAnalyzeManager(final Lexer lexer) {
Objects.requireNonNull(lexer, "Cannot create analyzer manager for null lexer");
this.lexer = lexer;
var multilineTokenTypes = getMultilineTokenStartEndTypes();
verifyMultilineTypes(multilineTokenTypes);
this.multilineStartTypes = multilineTokenTypes[0];
this.multilineEndTypes = multilineTokenTypes[1];
}
private void verifyMultilineTypes(@NonNull final int[][] types) {
Preconditions.checkState(
types.length == 2, "There must be exact two inner int[] in multiline token types");
final var start = types[0];
final var end = types[1];
Preconditions.checkState(start.length > 0, "Invalid start token types");
Preconditions.checkState(end.length > 0, "Invalid end token types");
}
@SuppressWarnings("UnstableApiUsage")
@NonNull
private Pair<EvictingQueue<IncrementalToken>, EvictingQueue<IncrementalToken>>
createEvictingQueueForTokens() {
return new Pair<>(
EvictingQueue.create(multilineStartTypes.length),
EvictingQueue.create(multilineEndTypes.length));
}
@SuppressWarnings("UnstableApiUsage")
private boolean isIncompleteTokenStart(EvictingQueue<IncrementalToken> q) {
return matchTokenTypes(this.multilineStartTypes, q);
}
@SuppressWarnings("UnstableApiUsage")
private boolean isIncompleteTokenEnd(EvictingQueue<IncrementalToken> q) {
return matchTokenTypes(this.multilineEndTypes, q);
}
@SuppressWarnings("UnstableApiUsage")
private boolean matchTokenTypes(
@NonNull int[] types, @NonNull EvictingQueue<IncrementalToken> tokens) {
final var arr = tokens.toArray(new IncrementalToken[0]);
for (int i = 0; i < types.length; i++) {
if (types[i] != arr[i].getType()) {
return false;
}
}
return true;
}
/**
* Returns the token types which start and end a multiline token.
*
* @return A <b>2xn</b> matrix where int[] at index 0 specifies token types which start a
* multiline token and int[] 1 specifies tokens which end the multiline token. For example,
* <p>[['/', '*'], ['*', '/']].
* <p>But instead of characters, there must be token types.
* @see JavaIncrementalAnalyzeManager
*/
protected abstract int[][] getMultilineTokenStartEndTypes();
/**
* Generate spans for the given {@link LineTokenizeResult}.
*
* @param tokens The tokenization result.
* @return The spans for the tokens.
*/
protected abstract MappedSpans.Builder generateSpans(
final AsyncLineTokenizeResult<LineState, IncrementalToken> tokens);
/**
* Called when the analyzer finds an incomplete token in a lne.
*
* @param token The incomplete token.
*/
protected abstract void handleIncompleteToken(IncrementalToken token);
/**
* Gets the next token from lexer and return an {@link IncrementalToken}.
*
* @return The next {@link IncrementalToken}.
*/
protected IncrementalToken nextToken() {
return new IncrementalToken(lexer.nextToken());
}
@NonNull
protected CharStream createStream(@NonNull CharSequence source) {
Objects.requireNonNull(source);
try {
return CharStreams.fromReader(new CharSequenceReader(source));
} catch (IOException e) {
throw new RuntimeException("Cannot create CharStream for source", e);
}
}
protected void markDiagnostics(MappedSpans.Builder spans, List<DiagnosticItem> diagnostics) {
diagnostics.sort(DiagnosticItem.START_COMPARATOR);
for (var d : diagnostics) {
if (d == null) {
continue;
}
var start = d.getRange().getStart();
var end = d.getRange().getEnd();
try {
spans.markProblemRegion(
convertToSpanFlag(d.getSeverity()),
start.getLine(),
start.getColumn(),
end.getLine(),
end.getColumn());
} catch (Throwable e) {
// Might happen frequently if user types faster
}
}
}
@Contract(pure = true)
private int convertToSpanFlag(@NonNull DiagnosticSeverity severity) {
switch (severity) {
case WARNING:
return Span.FLAG_WARNING;
case ERROR:
return Span.FLAG_ERROR;
case HINT:
case INFO:
default:
return Span.FLAG_TYPO;
}
}
@Override
public void updateDiagnostics(@NonNull final List<DiagnosticItem> diagnostics) {
this.diagnostics = diagnostics;
}
@NonNull
@Override
public List<DiagnosticItem> getDiagnostics() {
final var result = new ArrayList<>(ideDiagnostics);
if (diagnostics != null && !diagnostics.isEmpty()) {
result.addAll(diagnostics);
}
result.sort(DiagnosticItem.START_COMPARATOR);
return result;
}
@Override
public LineState getInitialState() {
return new LineState();
}
@Override
public boolean stateEquals(final LineState state, final LineState another) {
return state.equals(another);
}
@Override
public AsyncLineTokenizeResult<LineState, IncrementalToken> tokenizeLine(
final CharSequence line, final LineState state) {
LOG.debug("Tokenize lines:", line);
final var tokens = new ArrayList<IncrementalToken>();
var newState = 0;
var stateObj = new LineState();
if (state.state == NORMAL) {
newState = tokenizeNormal(line, 0, tokens, stateObj);
} else if (state.state == INCOMPLETE) {
final var result = fillIncomplete(line, tokens);
newState = IntPair.getFirst(result);
if (newState == NORMAL) {
newState = tokenizeNormal(line, IntPair.getSecond(result), tokens, stateObj);
} else {
newState = INCOMPLETE;
}
}
stateObj.state = newState;
return new AsyncLineTokenizeResult<>(stateObj, tokens);
}
/**
* Called when the <code>state</code> in {@link #tokenizeLine(CharSequence, LineState)} is {@link
* LineState#NORMAL}.
*
* @param line The line source.
* @param column The column in <code>line</code>.
* @param tokens The list of tokens that must be updated as the <code>line</code> is scanned.
* @param st The state object whose state must be after after the <code>line</code> has been
* scanned.
* @return The new state.
*/
@SuppressWarnings("UnstableApiUsage")
protected int tokenizeNormal(
final CharSequence line,
final int column,
final List<IncrementalToken> tokens,
final LineState st) {
lexer.setInputStream(createStream(line));
final var queues = createEvictingQueueForTokens();
final var start = queues.getFirst();
final var end = queues.getSecond();
var isInIncompleteToken = false;
var state = NORMAL;
IncrementalToken token;
IncrementalToken incompleteToken = null;
while ((token = nextToken()) != null) {
if (token.getType() == IncrementalToken.EOF) {
break;
}
// Skip to the token just after 'column'
if (token.getStartIndex() < column) {
continue;
}
if (!isInIncompleteToken) {
if (token.getStartIndex() == column && !tokens.isEmpty()) {
token.type = tokens.get(tokens.size() - 1).getType();
}
tokens.add(token);
}
start.add(token);
end.add(token);
final var type = token.getType();
if (type == JavaLexer.LBRACE || type == JavaLexer.RBRACE) {
st.hasBraces = true;
}
if (start.remainingCapacity() == 0 && isIncompleteTokenStart(start)) {
isInIncompleteToken = true;
incompleteToken = start.poll();
// Comment starts from the '/' token
// So we have to remove the '*' token after '/'
tokens.remove(tokens.size() - 1);
} else if (end.remainingCapacity() == 0 && isIncompleteTokenEnd(end)) {
// This should most probably not happen because, if a comment starts and ends on the same
// line, the lexer will create a token for the whole comment
// But still we handle this case...
isInIncompleteToken = false;
incompleteToken = null;
}
if (isInIncompleteToken) {
state = INCOMPLETE;
}
}
if (incompleteToken != null) {
incompleteToken.incomplete = true;
handleIncompleteToken(incompleteToken);
}
return state;
}
/**
* Called when the <code>state</code> in {@link #tokenizeLine(CharSequence, LineState)} is {@link
* LineState#INCOMPLETE}.
*
* @param line The line source.
* @param tokens The list of tokens that must be updated as the <code>line</code> is scanned.
* @return The state and offset.
*/
@SuppressWarnings("UnstableApiUsage")
protected long fillIncomplete(CharSequence line, final List<IncrementalToken> tokens) {
lexer.setInputStream(createStream(line));
final var queue = createEvictingQueueForTokens();
final var end = queue.getSecond();
final var allTokens =
lexer.getAllTokens().stream().map(IncrementalToken::new).collect(Collectors.toList());
var completed = false;
var index = 0;
for (index = 0; index < allTokens.size(); index++) {
final IncrementalToken token = allTokens.get(index);
if (token.getType() == Token.EOF) {
break;
}
end.add(token);
if (end.remainingCapacity() == 0 && isIncompleteTokenEnd(end)) {
completed = true;
break;
}
}
final var first = allTokens.get(0);
final int offset = allTokens.get(completed ? index : index - 1).getStartIndex();
first.startIndex = 0;
handleIncompleteToken(first);
tokens.add(first);
if (completed) {
return IntPair.pack(NORMAL, offset);
} else {
return IntPair.pack(INCOMPLETE, offset);
}
}
@Override
public List<Span> generateSpansForLine(
final AsyncLineTokenizeResult<LineState, IncrementalToken> tokens) {
var spans = generateSpans(tokens);
spans.determine(tokens.line);
List<Span> result;
try {
result = new ArrayList<>(spans.build().read().getSpansOnLine(tokens.line));
} catch (Throwable err) {
result = new ArrayList<>();
}
if (result.isEmpty()) {
result.add(Span.obtain(0, TextStyle.makeStyle(SchemeAndroidIDE.TEXT_NORMAL)));
}
// TODO Mark diagnostics in spans.
return result;
}
}
@@ -0,0 +1,48 @@
/*
* This file is part of AndroidIDE.
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.language.incremental
import org.antlr.v4.runtime.CharStream
import org.antlr.v4.runtime.Token
import org.antlr.v4.runtime.TokenSource
/**
* Token used for incremental lexing tasks. Allows us to store other information to tokens.
*
* @author Akash Yadav
*/
class IncrementalToken(val token: Token) : Token {
@JvmField var type = token.type
@JvmField var startIndex = token.startIndex
@JvmField var incomplete = false
override fun getText(): String = token.text
override fun getType() = type
override fun getLine() = token.line
override fun getCharPositionInLine() = token.charPositionInLine
override fun getChannel() = token.channel
override fun getTokenIndex() = token.tokenIndex
override fun getStartIndex() = startIndex
override fun getStopIndex() = token.stopIndex
override fun getTokenSource(): TokenSource = token.tokenSource
override fun getInputStream(): CharStream = token.inputStream
override fun equals(other: Any?) = token == other
override fun hashCode() = token.hashCode()
override fun toString() = token.toString()
}
@@ -0,0 +1,66 @@
/*
* This file is part of AndroidIDE.
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.language.incremental
import com.itsaky.lsp.models.DiagnosticItem
/**
* Tokenization state of a line.
*
* @author Akash Yadav
*/
class LineState {
companion object {
const val NORMAL = 0
const val INCOMPLETE = 1
}
@JvmField var state = NORMAL
@JvmField var hasBraces = false
@JvmField var diagnostics: DiagnosticsState? = null
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as LineState
if (state != other.state) return false
if (hasBraces != other.hasBraces) return false
if (diagnostics != other.diagnostics) return false
return true
}
override fun hashCode(): Int {
var result = state
result = 31 * result + hasBraces.hashCode()
result = 31 * result + (diagnostics?.hashCode() ?: 0)
return result
}
override fun toString(): String {
return "LineState(state=$state, hasBraces=$hasBraces, diagnostics=$diagnostics)"
}
}
data class DiagnosticsState(
val continueDiagnostic: Boolean = false,
val diagnostic: DiagnosticItem? = null
)
@@ -0,0 +1,239 @@
/*
* This file is part of AndroidIDE.
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.language.java
import com.itsaky.androidide.language.incremental.BaseIncrementalAnalyzeManager
import com.itsaky.androidide.language.incremental.IncrementalToken
import com.itsaky.androidide.language.incremental.LineState
import com.itsaky.androidide.lexers.java.JavaLexer
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.ANNOTATION
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.COMMENT
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.FIXME_COMMENT
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.LITERAL
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.OPERATOR
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TEXT_NORMAL
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TODO_COMMENT
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TYPE_NAME
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forComment
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forKeyword
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forString
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.withoutCompletion
import com.itsaky.androidide.utils.ILogger
import com.itsaky.lsp.models.DiagnosticItem
import com.itsaky.lsp.models.DiagnosticSeverity.WARNING
import com.itsaky.lsp.models.Position
import com.itsaky.lsp.models.Range
import io.github.rosemoe.sora.lang.styling.CodeBlock
import io.github.rosemoe.sora.lang.styling.MappedSpans
import io.github.rosemoe.sora.lang.styling.Span
import io.github.rosemoe.sora.lang.styling.TextStyle.makeStyle
import io.github.rosemoe.sora.text.Content
import org.antlr.v4.runtime.CharStreams
/** @author Akash Yadav */
class JavaIncrementalAnalyzeManager :
BaseIncrementalAnalyzeManager(JavaLexer(CharStreams.fromString(""))) {
private val log = ILogger.newInstance(javaClass.simpleName)
override fun computeBlocks(text: Content, delegate: CodeBlockAnalyzeDelegate): List<CodeBlock> {
return emptyList()
}
override fun generateSpans(
tokens: AsyncLineTokenizeResult<LineState, IncrementalToken>,
): MappedSpans.Builder {
val line = tokens.line
val spans = MappedSpans.Builder(1)
var previous = JavaLexer.WS
var first = true
for (token in tokens.tokens) {
val type = token.type
val offset = token.startIndex
val tokenLength = token.text.length
when (type) {
JavaLexer.WS -> {
if (first) {
spans.addIfNeeded(line, offset, makeStyle(TEXT_NORMAL))
first = false
}
}
JavaLexer.ABSTRACT,
JavaLexer.ASSERT,
JavaLexer.BREAK,
JavaLexer.CASE,
JavaLexer.CATCH,
JavaLexer.CLASS,
JavaLexer.CONST,
JavaLexer.CONTINUE,
JavaLexer.DEFAULT,
JavaLexer.DO,
JavaLexer.ELSE,
JavaLexer.EXTENDS,
JavaLexer.FINAL,
JavaLexer.FINALLY,
JavaLexer.FOR,
JavaLexer.IF,
JavaLexer.GOTO,
JavaLexer.IMPLEMENTS,
JavaLexer.IMPORT,
JavaLexer.INSTANCEOF,
JavaLexer.INTERFACE,
JavaLexer.NATIVE,
JavaLexer.NEW,
JavaLexer.PACKAGE,
JavaLexer.PRIVATE,
JavaLexer.PROTECTED,
JavaLexer.PUBLIC,
JavaLexer.RETURN,
JavaLexer.STATIC,
JavaLexer.STRICTFP,
JavaLexer.SUPER,
JavaLexer.SWITCH,
JavaLexer.SYNCHRONIZED,
JavaLexer.THIS,
JavaLexer.THROW,
JavaLexer.THROWS,
JavaLexer.TRANSIENT,
JavaLexer.TRY,
JavaLexer.VOID,
JavaLexer.VOLATILE,
JavaLexer.WHILE,
JavaLexer.VAR, -> spans.addIfNeeded(line, offset, forKeyword())
JavaLexer.DECIMAL_LITERAL,
JavaLexer.HEX_LITERAL,
JavaLexer.OCT_LITERAL,
JavaLexer.BINARY_LITERAL,
JavaLexer.FLOAT_LITERAL,
JavaLexer.HEX_FLOAT_LITERAL,
JavaLexer.BOOL_LITERAL,
JavaLexer.CHAR_LITERAL,
JavaLexer.NULL_LITERAL, -> spans.addIfNeeded(line, offset, makeStyle(LITERAL))
JavaLexer.STRING_LITERAL -> spans.addIfNeeded(line, offset, forString())
JavaLexer.LPAREN,
JavaLexer.RPAREN,
JavaLexer.LBRACK,
JavaLexer.RBRACK,
JavaLexer.SEMI,
JavaLexer.COMMA,
JavaLexer.ASSIGN,
JavaLexer.GT,
JavaLexer.LT,
JavaLexer.BANG,
JavaLexer.TILDE,
JavaLexer.QUESTION,
JavaLexer.COLON,
JavaLexer.EQUAL,
JavaLexer.GE,
JavaLexer.LE,
JavaLexer.NOTEQUAL,
JavaLexer.AND,
JavaLexer.OR,
JavaLexer.INC,
JavaLexer.DEC,
JavaLexer.ADD,
JavaLexer.SUB,
JavaLexer.MUL,
JavaLexer.DIV,
JavaLexer.BITAND,
JavaLexer.BITOR,
JavaLexer.CARET,
JavaLexer.MOD,
JavaLexer.ADD_ASSIGN,
JavaLexer.SUB_ASSIGN,
JavaLexer.MUL_ASSIGN,
JavaLexer.DIV_ASSIGN,
JavaLexer.AND_ASSIGN,
JavaLexer.OR_ASSIGN,
JavaLexer.XOR_ASSIGN,
JavaLexer.MOD_ASSIGN,
JavaLexer.LSHIFT_ASSIGN,
JavaLexer.RSHIFT_ASSIGN,
JavaLexer.URSHIFT_ASSIGN,
JavaLexer.ARROW,
JavaLexer.COLONCOLON,
JavaLexer.ELLIPSIS,
JavaLexer.LBRACE,
JavaLexer.RBRACE,
JavaLexer.DOT, -> spans.addIfNeeded(line, offset, makeStyle(OPERATOR))
JavaLexer.BOOLEAN,
JavaLexer.BYTE,
JavaLexer.CHAR,
JavaLexer.DOUBLE,
JavaLexer.ENUM,
JavaLexer.FLOAT,
JavaLexer.INT,
JavaLexer.LONG,
JavaLexer.SHORT, -> spans.addIfNeeded(line, offset, makeStyle(TYPE_NAME))
JavaLexer.BLOCK_COMMENT -> spans.addIfNeeded(line, offset, forComment())
JavaLexer.LINE_COMMENT -> {
var commentType = COMMENT
// highlight special line comments
var commentText = token.text
if (commentText.length > 2) {
commentText = commentText.substring(2)
commentText = commentText.trim { it <= ' ' }
var mark = true
if ("todo".equals(commentText.substring(0, 4), ignoreCase = true)) {
commentType = TODO_COMMENT
} else if ("fixme".equals(commentText.substring(0, 5), ignoreCase = true)) {
commentType = FIXME_COMMENT
} else {
mark = false
}
if (mark) {
if (diagnostics == null) {
diagnostics = ArrayList<DiagnosticItem>()
}
val diagnostic = DiagnosticItem()
diagnostic.severity = WARNING
diagnostic.message = commentText
diagnostic.code = "special.comment"
diagnostic.range = Range(Position(0, offset), Position(0, offset + tokenLength))
diagnostic.source = commentText
ideDiagnostics.add(diagnostic)
}
}
spans.addIfNeeded(line, offset, withoutCompletion(commentType))
}
JavaLexer.AT -> spans.addIfNeeded(line, offset, makeStyle(ANNOTATION))
JavaLexer.IDENTIFIER -> {
var colorId = TEXT_NORMAL
if (previous == JavaLexer.AT) {
colorId = ANNOTATION
}
spans.addIfNeeded(line, offset, makeStyle(colorId))
}
else -> spans.addIfNeeded(line, offset, makeStyle(TEXT_NORMAL))
}
previous = type
}
return spans;
}
override fun getMultilineTokenStartEndTypes(): Array<IntArray> {
val start = intArrayOf(JavaLexer.DIV, JavaLexer.MUL)
val end = intArrayOf(JavaLexer.MUL, JavaLexer.DIV)
return arrayOf(start, end)
}
override fun handleIncompleteToken(token: IncrementalToken) {
token.type = JavaLexer.BLOCK_COMMENT
}
}
@@ -54,12 +54,12 @@ public class JavaLanguage extends IDELanguage {
private static final ILogger LOG = ILogger.newInstance("JavaLanguage");
private final NewlineHandler[] newlineHandlers;
private JavaAnalyzer analyzer;
private JavaIncrementalAnalyzeManager analyzer;
private CommonCompletionProvider completer;
public JavaLanguage() {
final var server = getLanguageServer();
this.analyzer = new JavaAnalyzer();
this.analyzer = new JavaIncrementalAnalyzeManager();
this.completer = new CommonCompletionProvider(server);
this.newlineHandlers = new NewlineHandler[1];
@@ -0,0 +1,137 @@
/*
* This file is part of AndroidIDE.
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.language.incremental
import com.google.common.truth.Truth.assertThat
import com.itsaky.androidide.language.java.JavaIncrementalAnalyzeManager
import com.itsaky.androidide.lexers.java.JavaLexer
import io.github.rosemoe.sora.lang.analysis.IncrementalAnalyzeManager.LineTokenizeResult
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
@RunWith(RobolectricTestRunner::class)
@Config(manifest = Config.NONE)
internal class BaseIncrementalAnalyzeManagerTest {
@Test
fun testSimpleTokenization() {
val analyzer = JavaIncrementalAnalyzeManager()
val result =
analyzer.tokenizeLine(
"public static final String THIS_IS_A_STRING = \"This is a string...!\";",
analyzer.initialState
)
println("New state: ${result.state}")
ensureTokenSequence(
result,
listOf(
JavaLexer.PUBLIC,
JavaLexer.WS,
JavaLexer.STATIC,
JavaLexer.WS,
JavaLexer.FINAL,
JavaLexer.WS,
JavaLexer.IDENTIFIER,
JavaLexer.WS,
JavaLexer.IDENTIFIER,
JavaLexer.WS,
JavaLexer.ASSIGN,
JavaLexer.WS,
JavaLexer.STRING_LITERAL,
JavaLexer.SEMI
)
)
}
@Test
fun testCompleteCommentTokenization() {
val analyzer = JavaIncrementalAnalyzeManager()
val result =
analyzer.tokenizeLine("/*This is a */complete multiline comment", analyzer.initialState)
assertThat(result.state.state).isEqualTo(LineState.NORMAL)
ensureTokenSequence(
result,
listOf(
JavaLexer.BLOCK_COMMENT,
JavaLexer.IDENTIFIER,
JavaLexer.WS,
JavaLexer.IDENTIFIER,
JavaLexer.WS,
JavaLexer.IDENTIFIER
)
)
}
@Test
fun testIncompleteCommentTokenization() {
val analyzer = JavaIncrementalAnalyzeManager()
var result =
analyzer.tokenizeLine("/*This is an incomplete multiline comment", analyzer.initialState)
println(result.state)
assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
result =
analyzer.tokenizeLine("/*This is an incomplete*//* multiline comment", analyzer.initialState)
println(result.state)
assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
result =
analyzer.tokenizeLine("This is an incomplete multiline comment/*", analyzer.initialState)
println(result.state)
assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
}
@Test
fun testMultilineCommentTokenization() {
val analyzer = JavaIncrementalAnalyzeManager()
// Test a simple multiline comment
run {
var result = analyzer.tokenizeLine("/** This is an", analyzer.initialState)
assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
result = analyzer.tokenizeLine(" incomplete comment*/", result.state)
assertThat(result.state.state).isEqualTo(LineState.NORMAL)
}
// Test a multiline comment which is directly followed by tokens of other types.
run {
var result = analyzer.tokenizeLine("/** This is an", analyzer.initialState)
assertThat(result.state.state).isEqualTo(LineState.INCOMPLETE)
assertThat(result.tokens.last()).isNotNull()
assertThat(result.tokens.last().type).isEqualTo(JavaLexer.IDENTIFIER)
result = analyzer.tokenizeLine(" incomplete comment*/ public static void", result.state)
assertThat(result.state.state).isEqualTo(LineState.NORMAL)
assertThat(result.tokens.last().type).isEqualTo(JavaLexer.VOID)
assertThat(result.tokens[result.tokens.lastIndex - 1].type).isEqualTo(JavaLexer.WS)
assertThat(result.tokens[result.tokens.lastIndex - 2].type).isEqualTo(JavaLexer.STATIC)
}
}
private fun ensureTokenSequence(
result: LineTokenizeResult<LineState, IncrementalToken>,
types: List<Int>
) {
for (index in types.indices) {
assertThat(result.tokens[index].type).isEqualTo(types[index])
}
}
}
+1 -1
View File
@@ -12,7 +12,7 @@ ext {
bll: 'com.github.Rosemoe:BlockLinkedList:1.0.0',
xml2json: 'com.github.smart-fun:XmlToJson:1.5.1',
jsoup: 'org.jsoup:jsoup:1.14.2',
antlr4: 'org.antlr:antlr4-runtime:4.9.2',
antlr4: 'org.antlr:antlr4-runtime:4.9.3',
javaparser: 'com.github.javaparser:javaparser-symbol-solver-core:3.24.2',
jsonrpc: 'org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.12.0',
lang3:'org.apache.commons:commons-lang3:3.12.0',
File diff suppressed because one or more lines are too long
@@ -0,0 +1,763 @@
// Generated from /home/itsaky/Projects/Android/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/java/JavaLexer.g4 by ANTLR 4.10.1
package com.itsaky.androidide.lexers.java;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class JavaLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.10.1", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
ABSTRACT=1, ASSERT=2, BOOLEAN=3, BREAK=4, BYTE=5, CASE=6, CATCH=7, CHAR=8,
CLASS=9, CONST=10, CONTINUE=11, DEFAULT=12, DO=13, DOUBLE=14, ELSE=15,
ENUM=16, EXTENDS=17, FINAL=18, FINALLY=19, FLOAT=20, FOR=21, IF=22, GOTO=23,
IMPLEMENTS=24, IMPORT=25, INSTANCEOF=26, INT=27, INTERFACE=28, LONG=29,
NATIVE=30, NEW=31, PACKAGE=32, PRIVATE=33, PROTECTED=34, PUBLIC=35, RETURN=36,
SHORT=37, STATIC=38, STRICTFP=39, SUPER=40, SWITCH=41, SYNCHRONIZED=42,
THIS=43, THROW=44, THROWS=45, TRANSIENT=46, TRY=47, VAR=48, VOID=49, VOLATILE=50,
WHILE=51, DECIMAL_LITERAL=52, HEX_LITERAL=53, OCT_LITERAL=54, BINARY_LITERAL=55,
FLOAT_LITERAL=56, HEX_FLOAT_LITERAL=57, BOOL_LITERAL=58, CHAR_LITERAL=59,
STRING_LITERAL=60, NULL_LITERAL=61, LPAREN=62, RPAREN=63, LBRACE=64, RBRACE=65,
LBRACK=66, RBRACK=67, SEMI=68, COMMA=69, DOT=70, ASSIGN=71, GT=72, LT=73,
BANG=74, TILDE=75, QUESTION=76, COLON=77, EQUAL=78, LE=79, GE=80, NOTEQUAL=81,
AND=82, OR=83, INC=84, DEC=85, ADD=86, SUB=87, MUL=88, DIV=89, BITAND=90,
BITOR=91, CARET=92, MOD=93, ADD_ASSIGN=94, SUB_ASSIGN=95, MUL_ASSIGN=96,
DIV_ASSIGN=97, AND_ASSIGN=98, OR_ASSIGN=99, XOR_ASSIGN=100, MOD_ASSIGN=101,
LSHIFT_ASSIGN=102, RSHIFT_ASSIGN=103, URSHIFT_ASSIGN=104, ARROW=105, COLONCOLON=106,
AT=107, ELLIPSIS=108, WS=109, BLOCK_COMMENT=110, LINE_COMMENT=111, IDENTIFIER=112;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
public static String[] modeNames = {
"DEFAULT_MODE"
};
private static String[] makeRuleNames() {
return new String[] {
"ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", "CHAR",
"CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM",
"EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS",
"IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", "NEW",
"PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", "STATIC",
"STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW", "THROWS",
"TRANSIENT", "TRY", "VAR", "VOID", "VOLATILE", "WHILE", "DECIMAL_LITERAL",
"HEX_LITERAL", "OCT_LITERAL", "BINARY_LITERAL", "FLOAT_LITERAL", "HEX_FLOAT_LITERAL",
"BOOL_LITERAL", "CHAR_LITERAL", "STRING_LITERAL", "NULL_LITERAL", "LPAREN",
"RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", "DOT",
"ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", "COLON", "EQUAL",
"LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", "SUB", "MUL",
"DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN",
"MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
"MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "ARROW",
"COLONCOLON", "AT", "ELLIPSIS", "WS", "BLOCK_COMMENT", "LINE_COMMENT",
"IDENTIFIER", "ExponentPart", "EscapeSequence", "HexDigits", "HexDigit",
"Digits", "LetterOrDigit", "Letter"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
null, "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", "'case'",
"'catch'", "'char'", "'class'", "'const'", "'continue'", "'default'",
"'do'", "'double'", "'else'", "'enum'", "'extends'", "'final'", "'finally'",
"'float'", "'for'", "'if'", "'goto'", "'implements'", "'import'", "'instanceof'",
"'int'", "'interface'", "'long'", "'native'", "'new'", "'package'", "'private'",
"'protected'", "'public'", "'return'", "'short'", "'static'", "'strictfp'",
"'super'", "'switch'", "'synchronized'", "'this'", "'throw'", "'throws'",
"'transient'", "'try'", "'var'", "'void'", "'volatile'", "'while'", null,
null, null, null, null, null, null, null, null, "'null'", "'('", "')'",
"'{'", "'}'", "'['", "']'", "';'", "','", "'.'", "'='", "'>'", "'<'",
"'!'", "'~'", "'?'", "':'", "'=='", "'<='", "'>='", "'!='", "'&&'", "'||'",
"'++'", "'--'", "'+'", "'-'", "'*'", "'/'", "'&'", "'|'", "'^'", "'%'",
"'+='", "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'<<='",
"'>>='", "'>>>='", "'->'", "'::'", "'@'", "'...'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, "ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH",
"CHAR", "CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE",
"ENUM", "EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO",
"IMPLEMENTS", "IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE",
"NEW", "PACKAGE", "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT",
"STATIC", "STRICTFP", "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW",
"THROWS", "TRANSIENT", "TRY", "VAR", "VOID", "VOLATILE", "WHILE", "DECIMAL_LITERAL",
"HEX_LITERAL", "OCT_LITERAL", "BINARY_LITERAL", "FLOAT_LITERAL", "HEX_FLOAT_LITERAL",
"BOOL_LITERAL", "CHAR_LITERAL", "STRING_LITERAL", "NULL_LITERAL", "LPAREN",
"RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK", "SEMI", "COMMA", "DOT",
"ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION", "COLON", "EQUAL",
"LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD", "SUB", "MUL",
"DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN", "SUB_ASSIGN",
"MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
"MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "ARROW",
"COLONCOLON", "AT", "ELLIPSIS", "WS", "BLOCK_COMMENT", "LINE_COMMENT",
"IDENTIFIER"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public JavaLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getGrammarFileName() { return "JavaLexer.g4"; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getChannelNames() { return channelNames; }
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
"\u0004\u0000p\u03b7\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
"\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
"\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
"\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+
"\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+
"\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+
"\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+
"\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+
"\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+
"\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+
"!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+
"&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
"+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
"0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+
"5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+
":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+
"?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007"+
"D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007"+
"I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007"+
"N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007"+
"S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007"+
"X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007"+
"]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007"+
"b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007"+
"g\u0002h\u0007h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007"+
"l\u0002m\u0007m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007"+
"q\u0002r\u0007r\u0002s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007"+
"v\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+
"\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001"+
"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+
"\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+
"\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+
"\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+
"\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+
"\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+
"\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+
"\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+
"\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b"+
"\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+
"\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+
"\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
"\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+
"\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
"\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+
"\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+
"\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+
"\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001"+
"\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001"+
"\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001"+
"\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+
"\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+
"\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001"+
"\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
"\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+
"\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+
"\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001"+
"\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001"+
"\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001"+
"\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+
"\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001"+
" \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001"+
"!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
"\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+
"$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001"+
"%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+
"&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001"+
"(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001"+
")\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001"+
"*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+
",\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001-\u0001"+
"-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+
".\u0001/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u0001"+
"1\u00011\u00011\u00011\u00011\u00011\u00011\u00011\u00011\u00012\u0001"+
"2\u00012\u00012\u00012\u00012\u00013\u00013\u00013\u00033\u024a\b3\u0001"+
"3\u00043\u024d\b3\u000b3\f3\u024e\u00013\u00033\u0252\b3\u00033\u0254"+
"\b3\u00013\u00033\u0257\b3\u00014\u00014\u00014\u00014\u00054\u025d\b"+
"4\n4\f4\u0260\t4\u00014\u00034\u0263\b4\u00014\u00034\u0266\b4\u00015"+
"\u00015\u00055\u026a\b5\n5\f5\u026d\t5\u00015\u00015\u00055\u0271\b5\n"+
"5\f5\u0274\t5\u00015\u00035\u0277\b5\u00015\u00035\u027a\b5\u00016\u0001"+
"6\u00016\u00016\u00056\u0280\b6\n6\f6\u0283\t6\u00016\u00036\u0286\b6"+
"\u00016\u00036\u0289\b6\u00017\u00017\u00017\u00037\u028e\b7\u00017\u0001"+
"7\u00037\u0292\b7\u00017\u00037\u0295\b7\u00017\u00037\u0298\b7\u0001"+
"7\u00017\u00017\u00037\u029d\b7\u00017\u00037\u02a0\b7\u00037\u02a2\b"+
"7\u00018\u00018\u00018\u00018\u00038\u02a8\b8\u00018\u00038\u02ab\b8\u0001"+
"8\u00018\u00038\u02af\b8\u00018\u00018\u00038\u02b3\b8\u00018\u00018\u0003"+
"8\u02b7\b8\u00019\u00019\u00019\u00019\u00019\u00019\u00019\u00019\u0001"+
"9\u00039\u02c2\b9\u0001:\u0001:\u0001:\u0003:\u02c7\b:\u0001:\u0001:\u0001"+
";\u0001;\u0001;\u0005;\u02ce\b;\n;\f;\u02d1\t;\u0001;\u0001;\u0001<\u0001"+
"<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001>\u0001>\u0001?\u0001?\u0001"+
"@\u0001@\u0001A\u0001A\u0001B\u0001B\u0001C\u0001C\u0001D\u0001D\u0001"+
"E\u0001E\u0001F\u0001F\u0001G\u0001G\u0001H\u0001H\u0001I\u0001I\u0001"+
"J\u0001J\u0001K\u0001K\u0001L\u0001L\u0001M\u0001M\u0001M\u0001N\u0001"+
"N\u0001N\u0001O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001"+
"Q\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001"+
"U\u0001U\u0001V\u0001V\u0001W\u0001W\u0001X\u0001X\u0001Y\u0001Y\u0001"+
"Z\u0001Z\u0001[\u0001[\u0001\\\u0001\\\u0001]\u0001]\u0001]\u0001^\u0001"+
"^\u0001^\u0001_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001a\u0001a\u0001"+
"a\u0001b\u0001b\u0001b\u0001c\u0001c\u0001c\u0001d\u0001d\u0001d\u0001"+
"e\u0001e\u0001e\u0001e\u0001f\u0001f\u0001f\u0001f\u0001g\u0001g\u0001"+
"g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001j\u0001"+
"j\u0001k\u0001k\u0001k\u0001k\u0001l\u0004l\u0354\bl\u000bl\fl\u0355\u0001"+
"l\u0001l\u0001m\u0001m\u0001m\u0001m\u0005m\u035e\bm\nm\fm\u0361\tm\u0001"+
"m\u0001m\u0001m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001n\u0005n\u036c"+
"\bn\nn\fn\u036f\tn\u0001n\u0001n\u0001o\u0001o\u0005o\u0375\bo\no\fo\u0378"+
"\to\u0001p\u0001p\u0003p\u037c\bp\u0001p\u0001p\u0001q\u0001q\u0001q\u0001"+
"q\u0003q\u0384\bq\u0001q\u0003q\u0387\bq\u0001q\u0001q\u0001q\u0004q\u038c"+
"\bq\u000bq\fq\u038d\u0001q\u0001q\u0001q\u0001q\u0001q\u0003q\u0395\b"+
"q\u0001r\u0001r\u0001r\u0005r\u039a\br\nr\fr\u039d\tr\u0001r\u0003r\u03a0"+
"\br\u0001s\u0001s\u0001t\u0001t\u0005t\u03a6\bt\nt\ft\u03a9\tt\u0001t"+
"\u0003t\u03ac\bt\u0001u\u0001u\u0003u\u03b0\bu\u0001v\u0001v\u0001v\u0001"+
"v\u0003v\u03b6\bv\u0001\u035f\u0000w\u0001\u0001\u0003\u0002\u0005\u0003"+
"\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015"+
"\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012"+
"%\u0013\'\u0014)\u0015+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c"+
"9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6"+
"m7o8q9s:u;w<y={>}?\u007f@\u0081A\u0083B\u0085C\u0087D\u0089E\u008bF\u008d"+
"G\u008fH\u0091I\u0093J\u0095K\u0097L\u0099M\u009bN\u009dO\u009fP\u00a1"+
"Q\u00a3R\u00a5S\u00a7T\u00a9U\u00abV\u00adW\u00afX\u00b1Y\u00b3Z\u00b5"+
"[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9"+
"e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3j\u00d5k\u00d7l\u00d9m\u00dbn\u00dd"+
"o\u00dfp\u00e1\u0000\u00e3\u0000\u00e5\u0000\u00e7\u0000\u00e9\u0000\u00eb"+
"\u0000\u00ed\u0000\u0001\u0000\u001a\u0001\u000019\u0002\u0000LLll\u0002"+
"\u0000XXxx\u0003\u000009AFaf\u0004\u000009AF__af\u0001\u000007\u0002\u0000"+
"07__\u0002\u0000BBbb\u0001\u000001\u0002\u000001__\u0004\u0000DDFFddf"+
"f\u0002\u0000PPpp\u0002\u0000++--\u0004\u0000\n\n\r\r\'\'\\\\\u0004\u0000"+
"\n\n\r\r\"\"\\\\\u0003\u0000\t\n\f\r \u0002\u0000\n\n\r\r\u0002\u0000"+
"EEee\b\u0000\"\"\'\'\\\\bbffnnrrtt\u0001\u000003\u0001\u000009\u0002\u0000"+
"09__\u0004\u0000$$AZ__az\u0002\u0000\u0000\u007f\u8000\ud800\u8000\udbff"+
"\u0001\u0000\u8000\ud800\u8000\udbff\u0001\u0000\u8000\udc00\u8000\udfff"+
"\u03e0\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000"+
"\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000"+
"\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000"+
"\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000"+
"\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000"+
"\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000"+
"\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000"+
"\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000"+
"!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001"+
"\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000"+
"\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000"+
"\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u00003"+
"\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001\u0000"+
"\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000"+
"\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A"+
"\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000"+
"\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000"+
"\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O"+
"\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000"+
"\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000"+
"\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]"+
"\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000"+
"\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000"+
"\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k"+
"\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000"+
"\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000"+
"\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000y"+
"\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001\u0000"+
"\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001\u0000"+
"\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001\u0000"+
"\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001\u0000"+
"\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001\u0000"+
"\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001\u0000"+
"\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001\u0000"+
"\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001\u0000"+
"\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001\u0000"+
"\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001\u0000"+
"\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001\u0000"+
"\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001\u0000"+
"\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001\u0000"+
"\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001\u0000"+
"\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001\u0000"+
"\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001\u0000"+
"\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00bd\u0001\u0000"+
"\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000\u0000\u00c1\u0001\u0000"+
"\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001\u0000"+
"\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001\u0000"+
"\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001\u0000"+
"\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001\u0000"+
"\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000\u0000\u00d5\u0001\u0000"+
"\u0000\u0000\u0000\u00d7\u0001\u0000\u0000\u0000\u0000\u00d9\u0001\u0000"+
"\u0000\u0000\u0000\u00db\u0001\u0000\u0000\u0000\u0000\u00dd\u0001\u0000"+
"\u0000\u0000\u0000\u00df\u0001\u0000\u0000\u0000\u0001\u00ef\u0001\u0000"+
"\u0000\u0000\u0003\u00f8\u0001\u0000\u0000\u0000\u0005\u00ff\u0001\u0000"+
"\u0000\u0000\u0007\u0107\u0001\u0000\u0000\u0000\t\u010d\u0001\u0000\u0000"+
"\u0000\u000b\u0112\u0001\u0000\u0000\u0000\r\u0117\u0001\u0000\u0000\u0000"+
"\u000f\u011d\u0001\u0000\u0000\u0000\u0011\u0122\u0001\u0000\u0000\u0000"+
"\u0013\u0128\u0001\u0000\u0000\u0000\u0015\u012e\u0001\u0000\u0000\u0000"+
"\u0017\u0137\u0001\u0000\u0000\u0000\u0019\u013f\u0001\u0000\u0000\u0000"+
"\u001b\u0142\u0001\u0000\u0000\u0000\u001d\u0149\u0001\u0000\u0000\u0000"+
"\u001f\u014e\u0001\u0000\u0000\u0000!\u0153\u0001\u0000\u0000\u0000#\u015b"+
"\u0001\u0000\u0000\u0000%\u0161\u0001\u0000\u0000\u0000\'\u0169\u0001"+
"\u0000\u0000\u0000)\u016f\u0001\u0000\u0000\u0000+\u0173\u0001\u0000\u0000"+
"\u0000-\u0176\u0001\u0000\u0000\u0000/\u017b\u0001\u0000\u0000\u00001"+
"\u0186\u0001\u0000\u0000\u00003\u018d\u0001\u0000\u0000\u00005\u0198\u0001"+
"\u0000\u0000\u00007\u019c\u0001\u0000\u0000\u00009\u01a6\u0001\u0000\u0000"+
"\u0000;\u01ab\u0001\u0000\u0000\u0000=\u01b2\u0001\u0000\u0000\u0000?"+
"\u01b6\u0001\u0000\u0000\u0000A\u01be\u0001\u0000\u0000\u0000C\u01c6\u0001"+
"\u0000\u0000\u0000E\u01d0\u0001\u0000\u0000\u0000G\u01d7\u0001\u0000\u0000"+
"\u0000I\u01de\u0001\u0000\u0000\u0000K\u01e4\u0001\u0000\u0000\u0000M"+
"\u01eb\u0001\u0000\u0000\u0000O\u01f4\u0001\u0000\u0000\u0000Q\u01fa\u0001"+
"\u0000\u0000\u0000S\u0201\u0001\u0000\u0000\u0000U\u020e\u0001\u0000\u0000"+
"\u0000W\u0213\u0001\u0000\u0000\u0000Y\u0219\u0001\u0000\u0000\u0000["+
"\u0220\u0001\u0000\u0000\u0000]\u022a\u0001\u0000\u0000\u0000_\u022e\u0001"+
"\u0000\u0000\u0000a\u0232\u0001\u0000\u0000\u0000c\u0237\u0001\u0000\u0000"+
"\u0000e\u0240\u0001\u0000\u0000\u0000g\u0253\u0001\u0000\u0000\u0000i"+
"\u0258\u0001\u0000\u0000\u0000k\u0267\u0001\u0000\u0000\u0000m\u027b\u0001"+
"\u0000\u0000\u0000o\u02a1\u0001\u0000\u0000\u0000q\u02a3\u0001\u0000\u0000"+
"\u0000s\u02c1\u0001\u0000\u0000\u0000u\u02c3\u0001\u0000\u0000\u0000w"+
"\u02ca\u0001\u0000\u0000\u0000y\u02d4\u0001\u0000\u0000\u0000{\u02d9\u0001"+
"\u0000\u0000\u0000}\u02db\u0001\u0000\u0000\u0000\u007f\u02dd\u0001\u0000"+
"\u0000\u0000\u0081\u02df\u0001\u0000\u0000\u0000\u0083\u02e1\u0001\u0000"+
"\u0000\u0000\u0085\u02e3\u0001\u0000\u0000\u0000\u0087\u02e5\u0001\u0000"+
"\u0000\u0000\u0089\u02e7\u0001\u0000\u0000\u0000\u008b\u02e9\u0001\u0000"+
"\u0000\u0000\u008d\u02eb\u0001\u0000\u0000\u0000\u008f\u02ed\u0001\u0000"+
"\u0000\u0000\u0091\u02ef\u0001\u0000\u0000\u0000\u0093\u02f1\u0001\u0000"+
"\u0000\u0000\u0095\u02f3\u0001\u0000\u0000\u0000\u0097\u02f5\u0001\u0000"+
"\u0000\u0000\u0099\u02f7\u0001\u0000\u0000\u0000\u009b\u02f9\u0001\u0000"+
"\u0000\u0000\u009d\u02fc\u0001\u0000\u0000\u0000\u009f\u02ff\u0001\u0000"+
"\u0000\u0000\u00a1\u0302\u0001\u0000\u0000\u0000\u00a3\u0305\u0001\u0000"+
"\u0000\u0000\u00a5\u0308\u0001\u0000\u0000\u0000\u00a7\u030b\u0001\u0000"+
"\u0000\u0000\u00a9\u030e\u0001\u0000\u0000\u0000\u00ab\u0311\u0001\u0000"+
"\u0000\u0000\u00ad\u0313\u0001\u0000\u0000\u0000\u00af\u0315\u0001\u0000"+
"\u0000\u0000\u00b1\u0317\u0001\u0000\u0000\u0000\u00b3\u0319\u0001\u0000"+
"\u0000\u0000\u00b5\u031b\u0001\u0000\u0000\u0000\u00b7\u031d\u0001\u0000"+
"\u0000\u0000\u00b9\u031f\u0001\u0000\u0000\u0000\u00bb\u0321\u0001\u0000"+
"\u0000\u0000\u00bd\u0324\u0001\u0000\u0000\u0000\u00bf\u0327\u0001\u0000"+
"\u0000\u0000\u00c1\u032a\u0001\u0000\u0000\u0000\u00c3\u032d\u0001\u0000"+
"\u0000\u0000\u00c5\u0330\u0001\u0000\u0000\u0000\u00c7\u0333\u0001\u0000"+
"\u0000\u0000\u00c9\u0336\u0001\u0000\u0000\u0000\u00cb\u0339\u0001\u0000"+
"\u0000\u0000\u00cd\u033d\u0001\u0000\u0000\u0000\u00cf\u0341\u0001\u0000"+
"\u0000\u0000\u00d1\u0346\u0001\u0000\u0000\u0000\u00d3\u0349\u0001\u0000"+
"\u0000\u0000\u00d5\u034c\u0001\u0000\u0000\u0000\u00d7\u034e\u0001\u0000"+
"\u0000\u0000\u00d9\u0353\u0001\u0000\u0000\u0000\u00db\u0359\u0001\u0000"+
"\u0000\u0000\u00dd\u0367\u0001\u0000\u0000\u0000\u00df\u0372\u0001\u0000"+
"\u0000\u0000\u00e1\u0379\u0001\u0000\u0000\u0000\u00e3\u0394\u0001\u0000"+
"\u0000\u0000\u00e5\u0396\u0001\u0000\u0000\u0000\u00e7\u03a1\u0001\u0000"+
"\u0000\u0000\u00e9\u03a3\u0001\u0000\u0000\u0000\u00eb\u03af\u0001\u0000"+
"\u0000\u0000\u00ed\u03b5\u0001\u0000\u0000\u0000\u00ef\u00f0\u0005a\u0000"+
"\u0000\u00f0\u00f1\u0005b\u0000\u0000\u00f1\u00f2\u0005s\u0000\u0000\u00f2"+
"\u00f3\u0005t\u0000\u0000\u00f3\u00f4\u0005r\u0000\u0000\u00f4\u00f5\u0005"+
"a\u0000\u0000\u00f5\u00f6\u0005c\u0000\u0000\u00f6\u00f7\u0005t\u0000"+
"\u0000\u00f7\u0002\u0001\u0000\u0000\u0000\u00f8\u00f9\u0005a\u0000\u0000"+
"\u00f9\u00fa\u0005s\u0000\u0000\u00fa\u00fb\u0005s\u0000\u0000\u00fb\u00fc"+
"\u0005e\u0000\u0000\u00fc\u00fd\u0005r\u0000\u0000\u00fd\u00fe\u0005t"+
"\u0000\u0000\u00fe\u0004\u0001\u0000\u0000\u0000\u00ff\u0100\u0005b\u0000"+
"\u0000\u0100\u0101\u0005o\u0000\u0000\u0101\u0102\u0005o\u0000\u0000\u0102"+
"\u0103\u0005l\u0000\u0000\u0103\u0104\u0005e\u0000\u0000\u0104\u0105\u0005"+
"a\u0000\u0000\u0105\u0106\u0005n\u0000\u0000\u0106\u0006\u0001\u0000\u0000"+
"\u0000\u0107\u0108\u0005b\u0000\u0000\u0108\u0109\u0005r\u0000\u0000\u0109"+
"\u010a\u0005e\u0000\u0000\u010a\u010b\u0005a\u0000\u0000\u010b\u010c\u0005"+
"k\u0000\u0000\u010c\b\u0001\u0000\u0000\u0000\u010d\u010e\u0005b\u0000"+
"\u0000\u010e\u010f\u0005y\u0000\u0000\u010f\u0110\u0005t\u0000\u0000\u0110"+
"\u0111\u0005e\u0000\u0000\u0111\n\u0001\u0000\u0000\u0000\u0112\u0113"+
"\u0005c\u0000\u0000\u0113\u0114\u0005a\u0000\u0000\u0114\u0115\u0005s"+
"\u0000\u0000\u0115\u0116\u0005e\u0000\u0000\u0116\f\u0001\u0000\u0000"+
"\u0000\u0117\u0118\u0005c\u0000\u0000\u0118\u0119\u0005a\u0000\u0000\u0119"+
"\u011a\u0005t\u0000\u0000\u011a\u011b\u0005c\u0000\u0000\u011b\u011c\u0005"+
"h\u0000\u0000\u011c\u000e\u0001\u0000\u0000\u0000\u011d\u011e\u0005c\u0000"+
"\u0000\u011e\u011f\u0005h\u0000\u0000\u011f\u0120\u0005a\u0000\u0000\u0120"+
"\u0121\u0005r\u0000\u0000\u0121\u0010\u0001\u0000\u0000\u0000\u0122\u0123"+
"\u0005c\u0000\u0000\u0123\u0124\u0005l\u0000\u0000\u0124\u0125\u0005a"+
"\u0000\u0000\u0125\u0126\u0005s\u0000\u0000\u0126\u0127\u0005s\u0000\u0000"+
"\u0127\u0012\u0001\u0000\u0000\u0000\u0128\u0129\u0005c\u0000\u0000\u0129"+
"\u012a\u0005o\u0000\u0000\u012a\u012b\u0005n\u0000\u0000\u012b\u012c\u0005"+
"s\u0000\u0000\u012c\u012d\u0005t\u0000\u0000\u012d\u0014\u0001\u0000\u0000"+
"\u0000\u012e\u012f\u0005c\u0000\u0000\u012f\u0130\u0005o\u0000\u0000\u0130"+
"\u0131\u0005n\u0000\u0000\u0131\u0132\u0005t\u0000\u0000\u0132\u0133\u0005"+
"i\u0000\u0000\u0133\u0134\u0005n\u0000\u0000\u0134\u0135\u0005u\u0000"+
"\u0000\u0135\u0136\u0005e\u0000\u0000\u0136\u0016\u0001\u0000\u0000\u0000"+
"\u0137\u0138\u0005d\u0000\u0000\u0138\u0139\u0005e\u0000\u0000\u0139\u013a"+
"\u0005f\u0000\u0000\u013a\u013b\u0005a\u0000\u0000\u013b\u013c\u0005u"+
"\u0000\u0000\u013c\u013d\u0005l\u0000\u0000\u013d\u013e\u0005t\u0000\u0000"+
"\u013e\u0018\u0001\u0000\u0000\u0000\u013f\u0140\u0005d\u0000\u0000\u0140"+
"\u0141\u0005o\u0000\u0000\u0141\u001a\u0001\u0000\u0000\u0000\u0142\u0143"+
"\u0005d\u0000\u0000\u0143\u0144\u0005o\u0000\u0000\u0144\u0145\u0005u"+
"\u0000\u0000\u0145\u0146\u0005b\u0000\u0000\u0146\u0147\u0005l\u0000\u0000"+
"\u0147\u0148\u0005e\u0000\u0000\u0148\u001c\u0001\u0000\u0000\u0000\u0149"+
"\u014a\u0005e\u0000\u0000\u014a\u014b\u0005l\u0000\u0000\u014b\u014c\u0005"+
"s\u0000\u0000\u014c\u014d\u0005e\u0000\u0000\u014d\u001e\u0001\u0000\u0000"+
"\u0000\u014e\u014f\u0005e\u0000\u0000\u014f\u0150\u0005n\u0000\u0000\u0150"+
"\u0151\u0005u\u0000\u0000\u0151\u0152\u0005m\u0000\u0000\u0152 \u0001"+
"\u0000\u0000\u0000\u0153\u0154\u0005e\u0000\u0000\u0154\u0155\u0005x\u0000"+
"\u0000\u0155\u0156\u0005t\u0000\u0000\u0156\u0157\u0005e\u0000\u0000\u0157"+
"\u0158\u0005n\u0000\u0000\u0158\u0159\u0005d\u0000\u0000\u0159\u015a\u0005"+
"s\u0000\u0000\u015a\"\u0001\u0000\u0000\u0000\u015b\u015c\u0005f\u0000"+
"\u0000\u015c\u015d\u0005i\u0000\u0000\u015d\u015e\u0005n\u0000\u0000\u015e"+
"\u015f\u0005a\u0000\u0000\u015f\u0160\u0005l\u0000\u0000\u0160$\u0001"+
"\u0000\u0000\u0000\u0161\u0162\u0005f\u0000\u0000\u0162\u0163\u0005i\u0000"+
"\u0000\u0163\u0164\u0005n\u0000\u0000\u0164\u0165\u0005a\u0000\u0000\u0165"+
"\u0166\u0005l\u0000\u0000\u0166\u0167\u0005l\u0000\u0000\u0167\u0168\u0005"+
"y\u0000\u0000\u0168&\u0001\u0000\u0000\u0000\u0169\u016a\u0005f\u0000"+
"\u0000\u016a\u016b\u0005l\u0000\u0000\u016b\u016c\u0005o\u0000\u0000\u016c"+
"\u016d\u0005a\u0000\u0000\u016d\u016e\u0005t\u0000\u0000\u016e(\u0001"+
"\u0000\u0000\u0000\u016f\u0170\u0005f\u0000\u0000\u0170\u0171\u0005o\u0000"+
"\u0000\u0171\u0172\u0005r\u0000\u0000\u0172*\u0001\u0000\u0000\u0000\u0173"+
"\u0174\u0005i\u0000\u0000\u0174\u0175\u0005f\u0000\u0000\u0175,\u0001"+
"\u0000\u0000\u0000\u0176\u0177\u0005g\u0000\u0000\u0177\u0178\u0005o\u0000"+
"\u0000\u0178\u0179\u0005t\u0000\u0000\u0179\u017a\u0005o\u0000\u0000\u017a"+
".\u0001\u0000\u0000\u0000\u017b\u017c\u0005i\u0000\u0000\u017c\u017d\u0005"+
"m\u0000\u0000\u017d\u017e\u0005p\u0000\u0000\u017e\u017f\u0005l\u0000"+
"\u0000\u017f\u0180\u0005e\u0000\u0000\u0180\u0181\u0005m\u0000\u0000\u0181"+
"\u0182\u0005e\u0000\u0000\u0182\u0183\u0005n\u0000\u0000\u0183\u0184\u0005"+
"t\u0000\u0000\u0184\u0185\u0005s\u0000\u0000\u01850\u0001\u0000\u0000"+
"\u0000\u0186\u0187\u0005i\u0000\u0000\u0187\u0188\u0005m\u0000\u0000\u0188"+
"\u0189\u0005p\u0000\u0000\u0189\u018a\u0005o\u0000\u0000\u018a\u018b\u0005"+
"r\u0000\u0000\u018b\u018c\u0005t\u0000\u0000\u018c2\u0001\u0000\u0000"+
"\u0000\u018d\u018e\u0005i\u0000\u0000\u018e\u018f\u0005n\u0000\u0000\u018f"+
"\u0190\u0005s\u0000\u0000\u0190\u0191\u0005t\u0000\u0000\u0191\u0192\u0005"+
"a\u0000\u0000\u0192\u0193\u0005n\u0000\u0000\u0193\u0194\u0005c\u0000"+
"\u0000\u0194\u0195\u0005e\u0000\u0000\u0195\u0196\u0005o\u0000\u0000\u0196"+
"\u0197\u0005f\u0000\u0000\u01974\u0001\u0000\u0000\u0000\u0198\u0199\u0005"+
"i\u0000\u0000\u0199\u019a\u0005n\u0000\u0000\u019a\u019b\u0005t\u0000"+
"\u0000\u019b6\u0001\u0000\u0000\u0000\u019c\u019d\u0005i\u0000\u0000\u019d"+
"\u019e\u0005n\u0000\u0000\u019e\u019f\u0005t\u0000\u0000\u019f\u01a0\u0005"+
"e\u0000\u0000\u01a0\u01a1\u0005r\u0000\u0000\u01a1\u01a2\u0005f\u0000"+
"\u0000\u01a2\u01a3\u0005a\u0000\u0000\u01a3\u01a4\u0005c\u0000\u0000\u01a4"+
"\u01a5\u0005e\u0000\u0000\u01a58\u0001\u0000\u0000\u0000\u01a6\u01a7\u0005"+
"l\u0000\u0000\u01a7\u01a8\u0005o\u0000\u0000\u01a8\u01a9\u0005n\u0000"+
"\u0000\u01a9\u01aa\u0005g\u0000\u0000\u01aa:\u0001\u0000\u0000\u0000\u01ab"+
"\u01ac\u0005n\u0000\u0000\u01ac\u01ad\u0005a\u0000\u0000\u01ad\u01ae\u0005"+
"t\u0000\u0000\u01ae\u01af\u0005i\u0000\u0000\u01af\u01b0\u0005v\u0000"+
"\u0000\u01b0\u01b1\u0005e\u0000\u0000\u01b1<\u0001\u0000\u0000\u0000\u01b2"+
"\u01b3\u0005n\u0000\u0000\u01b3\u01b4\u0005e\u0000\u0000\u01b4\u01b5\u0005"+
"w\u0000\u0000\u01b5>\u0001\u0000\u0000\u0000\u01b6\u01b7\u0005p\u0000"+
"\u0000\u01b7\u01b8\u0005a\u0000\u0000\u01b8\u01b9\u0005c\u0000\u0000\u01b9"+
"\u01ba\u0005k\u0000\u0000\u01ba\u01bb\u0005a\u0000\u0000\u01bb\u01bc\u0005"+
"g\u0000\u0000\u01bc\u01bd\u0005e\u0000\u0000\u01bd@\u0001\u0000\u0000"+
"\u0000\u01be\u01bf\u0005p\u0000\u0000\u01bf\u01c0\u0005r\u0000\u0000\u01c0"+
"\u01c1\u0005i\u0000\u0000\u01c1\u01c2\u0005v\u0000\u0000\u01c2\u01c3\u0005"+
"a\u0000\u0000\u01c3\u01c4\u0005t\u0000\u0000\u01c4\u01c5\u0005e\u0000"+
"\u0000\u01c5B\u0001\u0000\u0000\u0000\u01c6\u01c7\u0005p\u0000\u0000\u01c7"+
"\u01c8\u0005r\u0000\u0000\u01c8\u01c9\u0005o\u0000\u0000\u01c9\u01ca\u0005"+
"t\u0000\u0000\u01ca\u01cb\u0005e\u0000\u0000\u01cb\u01cc\u0005c\u0000"+
"\u0000\u01cc\u01cd\u0005t\u0000\u0000\u01cd\u01ce\u0005e\u0000\u0000\u01ce"+
"\u01cf\u0005d\u0000\u0000\u01cfD\u0001\u0000\u0000\u0000\u01d0\u01d1\u0005"+
"p\u0000\u0000\u01d1\u01d2\u0005u\u0000\u0000\u01d2\u01d3\u0005b\u0000"+
"\u0000\u01d3\u01d4\u0005l\u0000\u0000\u01d4\u01d5\u0005i\u0000\u0000\u01d5"+
"\u01d6\u0005c\u0000\u0000\u01d6F\u0001\u0000\u0000\u0000\u01d7\u01d8\u0005"+
"r\u0000\u0000\u01d8\u01d9\u0005e\u0000\u0000\u01d9\u01da\u0005t\u0000"+
"\u0000\u01da\u01db\u0005u\u0000\u0000\u01db\u01dc\u0005r\u0000\u0000\u01dc"+
"\u01dd\u0005n\u0000\u0000\u01ddH\u0001\u0000\u0000\u0000\u01de\u01df\u0005"+
"s\u0000\u0000\u01df\u01e0\u0005h\u0000\u0000\u01e0\u01e1\u0005o\u0000"+
"\u0000\u01e1\u01e2\u0005r\u0000\u0000\u01e2\u01e3\u0005t\u0000\u0000\u01e3"+
"J\u0001\u0000\u0000\u0000\u01e4\u01e5\u0005s\u0000\u0000\u01e5\u01e6\u0005"+
"t\u0000\u0000\u01e6\u01e7\u0005a\u0000\u0000\u01e7\u01e8\u0005t\u0000"+
"\u0000\u01e8\u01e9\u0005i\u0000\u0000\u01e9\u01ea\u0005c\u0000\u0000\u01ea"+
"L\u0001\u0000\u0000\u0000\u01eb\u01ec\u0005s\u0000\u0000\u01ec\u01ed\u0005"+
"t\u0000\u0000\u01ed\u01ee\u0005r\u0000\u0000\u01ee\u01ef\u0005i\u0000"+
"\u0000\u01ef\u01f0\u0005c\u0000\u0000\u01f0\u01f1\u0005t\u0000\u0000\u01f1"+
"\u01f2\u0005f\u0000\u0000\u01f2\u01f3\u0005p\u0000\u0000\u01f3N\u0001"+
"\u0000\u0000\u0000\u01f4\u01f5\u0005s\u0000\u0000\u01f5\u01f6\u0005u\u0000"+
"\u0000\u01f6\u01f7\u0005p\u0000\u0000\u01f7\u01f8\u0005e\u0000\u0000\u01f8"+
"\u01f9\u0005r\u0000\u0000\u01f9P\u0001\u0000\u0000\u0000\u01fa\u01fb\u0005"+
"s\u0000\u0000\u01fb\u01fc\u0005w\u0000\u0000\u01fc\u01fd\u0005i\u0000"+
"\u0000\u01fd\u01fe\u0005t\u0000\u0000\u01fe\u01ff\u0005c\u0000\u0000\u01ff"+
"\u0200\u0005h\u0000\u0000\u0200R\u0001\u0000\u0000\u0000\u0201\u0202\u0005"+
"s\u0000\u0000\u0202\u0203\u0005y\u0000\u0000\u0203\u0204\u0005n\u0000"+
"\u0000\u0204\u0205\u0005c\u0000\u0000\u0205\u0206\u0005h\u0000\u0000\u0206"+
"\u0207\u0005r\u0000\u0000\u0207\u0208\u0005o\u0000\u0000\u0208\u0209\u0005"+
"n\u0000\u0000\u0209\u020a\u0005i\u0000\u0000\u020a\u020b\u0005z\u0000"+
"\u0000\u020b\u020c\u0005e\u0000\u0000\u020c\u020d\u0005d\u0000\u0000\u020d"+
"T\u0001\u0000\u0000\u0000\u020e\u020f\u0005t\u0000\u0000\u020f\u0210\u0005"+
"h\u0000\u0000\u0210\u0211\u0005i\u0000\u0000\u0211\u0212\u0005s\u0000"+
"\u0000\u0212V\u0001\u0000\u0000\u0000\u0213\u0214\u0005t\u0000\u0000\u0214"+
"\u0215\u0005h\u0000\u0000\u0215\u0216\u0005r\u0000\u0000\u0216\u0217\u0005"+
"o\u0000\u0000\u0217\u0218\u0005w\u0000\u0000\u0218X\u0001\u0000\u0000"+
"\u0000\u0219\u021a\u0005t\u0000\u0000\u021a\u021b\u0005h\u0000\u0000\u021b"+
"\u021c\u0005r\u0000\u0000\u021c\u021d\u0005o\u0000\u0000\u021d\u021e\u0005"+
"w\u0000\u0000\u021e\u021f\u0005s\u0000\u0000\u021fZ\u0001\u0000\u0000"+
"\u0000\u0220\u0221\u0005t\u0000\u0000\u0221\u0222\u0005r\u0000\u0000\u0222"+
"\u0223\u0005a\u0000\u0000\u0223\u0224\u0005n\u0000\u0000\u0224\u0225\u0005"+
"s\u0000\u0000\u0225\u0226\u0005i\u0000\u0000\u0226\u0227\u0005e\u0000"+
"\u0000\u0227\u0228\u0005n\u0000\u0000\u0228\u0229\u0005t\u0000\u0000\u0229"+
"\\\u0001\u0000\u0000\u0000\u022a\u022b\u0005t\u0000\u0000\u022b\u022c"+
"\u0005r\u0000\u0000\u022c\u022d\u0005y\u0000\u0000\u022d^\u0001\u0000"+
"\u0000\u0000\u022e\u022f\u0005v\u0000\u0000\u022f\u0230\u0005a\u0000\u0000"+
"\u0230\u0231\u0005r\u0000\u0000\u0231`\u0001\u0000\u0000\u0000\u0232\u0233"+
"\u0005v\u0000\u0000\u0233\u0234\u0005o\u0000\u0000\u0234\u0235\u0005i"+
"\u0000\u0000\u0235\u0236\u0005d\u0000\u0000\u0236b\u0001\u0000\u0000\u0000"+
"\u0237\u0238\u0005v\u0000\u0000\u0238\u0239\u0005o\u0000\u0000\u0239\u023a"+
"\u0005l\u0000\u0000\u023a\u023b\u0005a\u0000\u0000\u023b\u023c\u0005t"+
"\u0000\u0000\u023c\u023d\u0005i\u0000\u0000\u023d\u023e\u0005l\u0000\u0000"+
"\u023e\u023f\u0005e\u0000\u0000\u023fd\u0001\u0000\u0000\u0000\u0240\u0241"+
"\u0005w\u0000\u0000\u0241\u0242\u0005h\u0000\u0000\u0242\u0243\u0005i"+
"\u0000\u0000\u0243\u0244\u0005l\u0000\u0000\u0244\u0245\u0005e\u0000\u0000"+
"\u0245f\u0001\u0000\u0000\u0000\u0246\u0254\u00050\u0000\u0000\u0247\u0251"+
"\u0007\u0000\u0000\u0000\u0248\u024a\u0003\u00e9t\u0000\u0249\u0248\u0001"+
"\u0000\u0000\u0000\u0249\u024a\u0001\u0000\u0000\u0000\u024a\u0252\u0001"+
"\u0000\u0000\u0000\u024b\u024d\u0005_\u0000\u0000\u024c\u024b\u0001\u0000"+
"\u0000\u0000\u024d\u024e\u0001\u0000\u0000\u0000\u024e\u024c\u0001\u0000"+
"\u0000\u0000\u024e\u024f\u0001\u0000\u0000\u0000\u024f\u0250\u0001\u0000"+
"\u0000\u0000\u0250\u0252\u0003\u00e9t\u0000\u0251\u0249\u0001\u0000\u0000"+
"\u0000\u0251\u024c\u0001\u0000\u0000\u0000\u0252\u0254\u0001\u0000\u0000"+
"\u0000\u0253\u0246\u0001\u0000\u0000\u0000\u0253\u0247\u0001\u0000\u0000"+
"\u0000\u0254\u0256\u0001\u0000\u0000\u0000\u0255\u0257\u0007\u0001\u0000"+
"\u0000\u0256\u0255\u0001\u0000\u0000\u0000\u0256\u0257\u0001\u0000\u0000"+
"\u0000\u0257h\u0001\u0000\u0000\u0000\u0258\u0259\u00050\u0000\u0000\u0259"+
"\u025a\u0007\u0002\u0000\u0000\u025a\u0262\u0007\u0003\u0000\u0000\u025b"+
"\u025d\u0007\u0004\u0000\u0000\u025c\u025b\u0001\u0000\u0000\u0000\u025d"+
"\u0260\u0001\u0000\u0000\u0000\u025e\u025c\u0001\u0000\u0000\u0000\u025e"+
"\u025f\u0001\u0000\u0000\u0000\u025f\u0261\u0001\u0000\u0000\u0000\u0260"+
"\u025e\u0001\u0000\u0000\u0000\u0261\u0263\u0007\u0003\u0000\u0000\u0262"+
"\u025e\u0001\u0000\u0000\u0000\u0262\u0263\u0001\u0000\u0000\u0000\u0263"+
"\u0265\u0001\u0000\u0000\u0000\u0264\u0266\u0007\u0001\u0000\u0000\u0265"+
"\u0264\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000\u0266"+
"j\u0001\u0000\u0000\u0000\u0267\u026b\u00050\u0000\u0000\u0268\u026a\u0005"+
"_\u0000\u0000\u0269\u0268\u0001\u0000\u0000\u0000\u026a\u026d\u0001\u0000"+
"\u0000\u0000\u026b\u0269\u0001\u0000\u0000\u0000\u026b\u026c\u0001\u0000"+
"\u0000\u0000\u026c\u026e\u0001\u0000\u0000\u0000\u026d\u026b\u0001\u0000"+
"\u0000\u0000\u026e\u0276\u0007\u0005\u0000\u0000\u026f\u0271\u0007\u0006"+
"\u0000\u0000\u0270\u026f\u0001\u0000\u0000\u0000\u0271\u0274\u0001\u0000"+
"\u0000\u0000\u0272\u0270\u0001\u0000\u0000\u0000\u0272\u0273\u0001\u0000"+
"\u0000\u0000\u0273\u0275\u0001\u0000\u0000\u0000\u0274\u0272\u0001\u0000"+
"\u0000\u0000\u0275\u0277\u0007\u0005\u0000\u0000\u0276\u0272\u0001\u0000"+
"\u0000\u0000\u0276\u0277\u0001\u0000\u0000\u0000\u0277\u0279\u0001\u0000"+
"\u0000\u0000\u0278\u027a\u0007\u0001\u0000\u0000\u0279\u0278\u0001\u0000"+
"\u0000\u0000\u0279\u027a\u0001\u0000\u0000\u0000\u027al\u0001\u0000\u0000"+
"\u0000\u027b\u027c\u00050\u0000\u0000\u027c\u027d\u0007\u0007\u0000\u0000"+
"\u027d\u0285\u0007\b\u0000\u0000\u027e\u0280\u0007\t\u0000\u0000\u027f"+
"\u027e\u0001\u0000\u0000\u0000\u0280\u0283\u0001\u0000\u0000\u0000\u0281"+
"\u027f\u0001\u0000\u0000\u0000\u0281\u0282\u0001\u0000\u0000\u0000\u0282"+
"\u0284\u0001\u0000\u0000\u0000\u0283\u0281\u0001\u0000\u0000\u0000\u0284"+
"\u0286\u0007\b\u0000\u0000\u0285\u0281\u0001\u0000\u0000\u0000\u0285\u0286"+
"\u0001\u0000\u0000\u0000\u0286\u0288\u0001\u0000\u0000\u0000\u0287\u0289"+
"\u0007\u0001\u0000\u0000\u0288\u0287\u0001\u0000\u0000\u0000\u0288\u0289"+
"\u0001\u0000\u0000\u0000\u0289n\u0001\u0000\u0000\u0000\u028a\u028b\u0003"+
"\u00e9t\u0000\u028b\u028d\u0005.\u0000\u0000\u028c\u028e\u0003\u00e9t"+
"\u0000\u028d\u028c\u0001\u0000\u0000\u0000\u028d\u028e\u0001\u0000\u0000"+
"\u0000\u028e\u0292\u0001\u0000\u0000\u0000\u028f\u0290\u0005.\u0000\u0000"+
"\u0290\u0292\u0003\u00e9t\u0000\u0291\u028a\u0001\u0000\u0000\u0000\u0291"+
"\u028f\u0001\u0000\u0000\u0000\u0292\u0294\u0001\u0000\u0000\u0000\u0293"+
"\u0295\u0003\u00e1p\u0000\u0294\u0293\u0001\u0000\u0000\u0000\u0294\u0295"+
"\u0001\u0000\u0000\u0000\u0295\u0297\u0001\u0000\u0000\u0000\u0296\u0298"+
"\u0007\n\u0000\u0000\u0297\u0296\u0001\u0000\u0000\u0000\u0297\u0298\u0001"+
"\u0000\u0000\u0000\u0298\u02a2\u0001\u0000\u0000\u0000\u0299\u029f\u0003"+
"\u00e9t\u0000\u029a\u029c\u0003\u00e1p\u0000\u029b\u029d\u0007\n\u0000"+
"\u0000\u029c\u029b\u0001\u0000\u0000\u0000\u029c\u029d\u0001\u0000\u0000"+
"\u0000\u029d\u02a0\u0001\u0000\u0000\u0000\u029e\u02a0\u0007\n\u0000\u0000"+
"\u029f\u029a\u0001\u0000\u0000\u0000\u029f\u029e\u0001\u0000\u0000\u0000"+
"\u02a0\u02a2\u0001\u0000\u0000\u0000\u02a1\u0291\u0001\u0000\u0000\u0000"+
"\u02a1\u0299\u0001\u0000\u0000\u0000\u02a2p\u0001\u0000\u0000\u0000\u02a3"+
"\u02a4\u00050\u0000\u0000\u02a4\u02ae\u0007\u0002\u0000\u0000\u02a5\u02a7"+
"\u0003\u00e5r\u0000\u02a6\u02a8\u0005.\u0000\u0000\u02a7\u02a6\u0001\u0000"+
"\u0000\u0000\u02a7\u02a8\u0001\u0000\u0000\u0000\u02a8\u02af\u0001\u0000"+
"\u0000\u0000\u02a9\u02ab\u0003\u00e5r\u0000\u02aa\u02a9\u0001\u0000\u0000"+
"\u0000\u02aa\u02ab\u0001\u0000\u0000\u0000\u02ab\u02ac\u0001\u0000\u0000"+
"\u0000\u02ac\u02ad\u0005.\u0000\u0000\u02ad\u02af\u0003\u00e5r\u0000\u02ae"+
"\u02a5\u0001\u0000\u0000\u0000\u02ae\u02aa\u0001\u0000\u0000\u0000\u02af"+
"\u02b0\u0001\u0000\u0000\u0000\u02b0\u02b2\u0007\u000b\u0000\u0000\u02b1"+
"\u02b3\u0007\f\u0000\u0000\u02b2\u02b1\u0001\u0000\u0000\u0000\u02b2\u02b3"+
"\u0001\u0000\u0000\u0000\u02b3\u02b4\u0001\u0000\u0000\u0000\u02b4\u02b6"+
"\u0003\u00e9t\u0000\u02b5\u02b7\u0007\n\u0000\u0000\u02b6\u02b5\u0001"+
"\u0000\u0000\u0000\u02b6\u02b7\u0001\u0000\u0000\u0000\u02b7r\u0001\u0000"+
"\u0000\u0000\u02b8\u02b9\u0005t\u0000\u0000\u02b9\u02ba\u0005r\u0000\u0000"+
"\u02ba\u02bb\u0005u\u0000\u0000\u02bb\u02c2\u0005e\u0000\u0000\u02bc\u02bd"+
"\u0005f\u0000\u0000\u02bd\u02be\u0005a\u0000\u0000\u02be\u02bf\u0005l"+
"\u0000\u0000\u02bf\u02c0\u0005s\u0000\u0000\u02c0\u02c2\u0005e\u0000\u0000"+
"\u02c1\u02b8\u0001\u0000\u0000\u0000\u02c1\u02bc\u0001\u0000\u0000\u0000"+
"\u02c2t\u0001\u0000\u0000\u0000\u02c3\u02c6\u0005\'\u0000\u0000\u02c4"+
"\u02c7\b\r\u0000\u0000\u02c5\u02c7\u0003\u00e3q\u0000\u02c6\u02c4\u0001"+
"\u0000\u0000\u0000\u02c6\u02c5\u0001\u0000\u0000\u0000\u02c7\u02c8\u0001"+
"\u0000\u0000\u0000\u02c8\u02c9\u0005\'\u0000\u0000\u02c9v\u0001\u0000"+
"\u0000\u0000\u02ca\u02cf\u0005\"\u0000\u0000\u02cb\u02ce\b\u000e\u0000"+
"\u0000\u02cc\u02ce\u0003\u00e3q\u0000\u02cd\u02cb\u0001\u0000\u0000\u0000"+
"\u02cd\u02cc\u0001\u0000\u0000\u0000\u02ce\u02d1\u0001\u0000\u0000\u0000"+
"\u02cf\u02cd\u0001\u0000\u0000\u0000\u02cf\u02d0\u0001\u0000\u0000\u0000"+
"\u02d0\u02d2\u0001\u0000\u0000\u0000\u02d1\u02cf\u0001\u0000\u0000\u0000"+
"\u02d2\u02d3\u0005\"\u0000\u0000\u02d3x\u0001\u0000\u0000\u0000\u02d4"+
"\u02d5\u0005n\u0000\u0000\u02d5\u02d6\u0005u\u0000\u0000\u02d6\u02d7\u0005"+
"l\u0000\u0000\u02d7\u02d8\u0005l\u0000\u0000\u02d8z\u0001\u0000\u0000"+
"\u0000\u02d9\u02da\u0005(\u0000\u0000\u02da|\u0001\u0000\u0000\u0000\u02db"+
"\u02dc\u0005)\u0000\u0000\u02dc~\u0001\u0000\u0000\u0000\u02dd\u02de\u0005"+
"{\u0000\u0000\u02de\u0080\u0001\u0000\u0000\u0000\u02df\u02e0\u0005}\u0000"+
"\u0000\u02e0\u0082\u0001\u0000\u0000\u0000\u02e1\u02e2\u0005[\u0000\u0000"+
"\u02e2\u0084\u0001\u0000\u0000\u0000\u02e3\u02e4\u0005]\u0000\u0000\u02e4"+
"\u0086\u0001\u0000\u0000\u0000\u02e5\u02e6\u0005;\u0000\u0000\u02e6\u0088"+
"\u0001\u0000\u0000\u0000\u02e7\u02e8\u0005,\u0000\u0000\u02e8\u008a\u0001"+
"\u0000\u0000\u0000\u02e9\u02ea\u0005.\u0000\u0000\u02ea\u008c\u0001\u0000"+
"\u0000\u0000\u02eb\u02ec\u0005=\u0000\u0000\u02ec\u008e\u0001\u0000\u0000"+
"\u0000\u02ed\u02ee\u0005>\u0000\u0000\u02ee\u0090\u0001\u0000\u0000\u0000"+
"\u02ef\u02f0\u0005<\u0000\u0000\u02f0\u0092\u0001\u0000\u0000\u0000\u02f1"+
"\u02f2\u0005!\u0000\u0000\u02f2\u0094\u0001\u0000\u0000\u0000\u02f3\u02f4"+
"\u0005~\u0000\u0000\u02f4\u0096\u0001\u0000\u0000\u0000\u02f5\u02f6\u0005"+
"?\u0000\u0000\u02f6\u0098\u0001\u0000\u0000\u0000\u02f7\u02f8\u0005:\u0000"+
"\u0000\u02f8\u009a\u0001\u0000\u0000\u0000\u02f9\u02fa\u0005=\u0000\u0000"+
"\u02fa\u02fb\u0005=\u0000\u0000\u02fb\u009c\u0001\u0000\u0000\u0000\u02fc"+
"\u02fd\u0005<\u0000\u0000\u02fd\u02fe\u0005=\u0000\u0000\u02fe\u009e\u0001"+
"\u0000\u0000\u0000\u02ff\u0300\u0005>\u0000\u0000\u0300\u0301\u0005=\u0000"+
"\u0000\u0301\u00a0\u0001\u0000\u0000\u0000\u0302\u0303\u0005!\u0000\u0000"+
"\u0303\u0304\u0005=\u0000\u0000\u0304\u00a2\u0001\u0000\u0000\u0000\u0305"+
"\u0306\u0005&\u0000\u0000\u0306\u0307\u0005&\u0000\u0000\u0307\u00a4\u0001"+
"\u0000\u0000\u0000\u0308\u0309\u0005|\u0000\u0000\u0309\u030a\u0005|\u0000"+
"\u0000\u030a\u00a6\u0001\u0000\u0000\u0000\u030b\u030c\u0005+\u0000\u0000"+
"\u030c\u030d\u0005+\u0000\u0000\u030d\u00a8\u0001\u0000\u0000\u0000\u030e"+
"\u030f\u0005-\u0000\u0000\u030f\u0310\u0005-\u0000\u0000\u0310\u00aa\u0001"+
"\u0000\u0000\u0000\u0311\u0312\u0005+\u0000\u0000\u0312\u00ac\u0001\u0000"+
"\u0000\u0000\u0313\u0314\u0005-\u0000\u0000\u0314\u00ae\u0001\u0000\u0000"+
"\u0000\u0315\u0316\u0005*\u0000\u0000\u0316\u00b0\u0001\u0000\u0000\u0000"+
"\u0317\u0318\u0005/\u0000\u0000\u0318\u00b2\u0001\u0000\u0000\u0000\u0319"+
"\u031a\u0005&\u0000\u0000\u031a\u00b4\u0001\u0000\u0000\u0000\u031b\u031c"+
"\u0005|\u0000\u0000\u031c\u00b6\u0001\u0000\u0000\u0000\u031d\u031e\u0005"+
"^\u0000\u0000\u031e\u00b8\u0001\u0000\u0000\u0000\u031f\u0320\u0005%\u0000"+
"\u0000\u0320\u00ba\u0001\u0000\u0000\u0000\u0321\u0322\u0005+\u0000\u0000"+
"\u0322\u0323\u0005=\u0000\u0000\u0323\u00bc\u0001\u0000\u0000\u0000\u0324"+
"\u0325\u0005-\u0000\u0000\u0325\u0326\u0005=\u0000\u0000\u0326\u00be\u0001"+
"\u0000\u0000\u0000\u0327\u0328\u0005*\u0000\u0000\u0328\u0329\u0005=\u0000"+
"\u0000\u0329\u00c0\u0001\u0000\u0000\u0000\u032a\u032b\u0005/\u0000\u0000"+
"\u032b\u032c\u0005=\u0000\u0000\u032c\u00c2\u0001\u0000\u0000\u0000\u032d"+
"\u032e\u0005&\u0000\u0000\u032e\u032f\u0005=\u0000\u0000\u032f\u00c4\u0001"+
"\u0000\u0000\u0000\u0330\u0331\u0005|\u0000\u0000\u0331\u0332\u0005=\u0000"+
"\u0000\u0332\u00c6\u0001\u0000\u0000\u0000\u0333\u0334\u0005^\u0000\u0000"+
"\u0334\u0335\u0005=\u0000\u0000\u0335\u00c8\u0001\u0000\u0000\u0000\u0336"+
"\u0337\u0005%\u0000\u0000\u0337\u0338\u0005=\u0000\u0000\u0338\u00ca\u0001"+
"\u0000\u0000\u0000\u0339\u033a\u0005<\u0000\u0000\u033a\u033b\u0005<\u0000"+
"\u0000\u033b\u033c\u0005=\u0000\u0000\u033c\u00cc\u0001\u0000\u0000\u0000"+
"\u033d\u033e\u0005>\u0000\u0000\u033e\u033f\u0005>\u0000\u0000\u033f\u0340"+
"\u0005=\u0000\u0000\u0340\u00ce\u0001\u0000\u0000\u0000\u0341\u0342\u0005"+
">\u0000\u0000\u0342\u0343\u0005>\u0000\u0000\u0343\u0344\u0005>\u0000"+
"\u0000\u0344\u0345\u0005=\u0000\u0000\u0345\u00d0\u0001\u0000\u0000\u0000"+
"\u0346\u0347\u0005-\u0000\u0000\u0347\u0348\u0005>\u0000\u0000\u0348\u00d2"+
"\u0001\u0000\u0000\u0000\u0349\u034a\u0005:\u0000\u0000\u034a\u034b\u0005"+
":\u0000\u0000\u034b\u00d4\u0001\u0000\u0000\u0000\u034c\u034d\u0005@\u0000"+
"\u0000\u034d\u00d6\u0001\u0000\u0000\u0000\u034e\u034f\u0005.\u0000\u0000"+
"\u034f\u0350\u0005.\u0000\u0000\u0350\u0351\u0005.\u0000\u0000\u0351\u00d8"+
"\u0001\u0000\u0000\u0000\u0352\u0354\u0007\u000f\u0000\u0000\u0353\u0352"+
"\u0001\u0000\u0000\u0000\u0354\u0355\u0001\u0000\u0000\u0000\u0355\u0353"+
"\u0001\u0000\u0000\u0000\u0355\u0356\u0001\u0000\u0000\u0000\u0356\u0357"+
"\u0001\u0000\u0000\u0000\u0357\u0358\u0006l\u0000\u0000\u0358\u00da\u0001"+
"\u0000\u0000\u0000\u0359\u035a\u0005/\u0000\u0000\u035a\u035b\u0005*\u0000"+
"\u0000\u035b\u035f\u0001\u0000\u0000\u0000\u035c\u035e\t\u0000\u0000\u0000"+
"\u035d\u035c\u0001\u0000\u0000\u0000\u035e\u0361\u0001\u0000\u0000\u0000"+
"\u035f\u0360\u0001\u0000\u0000\u0000\u035f\u035d\u0001\u0000\u0000\u0000"+
"\u0360\u0362\u0001\u0000\u0000\u0000\u0361\u035f\u0001\u0000\u0000\u0000"+
"\u0362\u0363\u0005*\u0000\u0000\u0363\u0364\u0005/\u0000\u0000\u0364\u0365"+
"\u0001\u0000\u0000\u0000\u0365\u0366\u0006m\u0000\u0000\u0366\u00dc\u0001"+
"\u0000\u0000\u0000\u0367\u0368\u0005/\u0000\u0000\u0368\u0369\u0005/\u0000"+
"\u0000\u0369\u036d\u0001\u0000\u0000\u0000\u036a\u036c\b\u0010\u0000\u0000"+
"\u036b\u036a\u0001\u0000\u0000\u0000\u036c\u036f\u0001\u0000\u0000\u0000"+
"\u036d\u036b\u0001\u0000\u0000\u0000\u036d\u036e\u0001\u0000\u0000\u0000"+
"\u036e\u0370\u0001\u0000\u0000\u0000\u036f\u036d\u0001\u0000\u0000\u0000"+
"\u0370\u0371\u0006n\u0000\u0000\u0371\u00de\u0001\u0000\u0000\u0000\u0372"+
"\u0376\u0003\u00edv\u0000\u0373\u0375\u0003\u00ebu\u0000\u0374\u0373\u0001"+
"\u0000\u0000\u0000\u0375\u0378\u0001\u0000\u0000\u0000\u0376\u0374\u0001"+
"\u0000\u0000\u0000\u0376\u0377\u0001\u0000\u0000\u0000\u0377\u00e0\u0001"+
"\u0000\u0000\u0000\u0378\u0376\u0001\u0000\u0000\u0000\u0379\u037b\u0007"+
"\u0011\u0000\u0000\u037a\u037c\u0007\f\u0000\u0000\u037b\u037a\u0001\u0000"+
"\u0000\u0000\u037b\u037c\u0001\u0000\u0000\u0000\u037c\u037d\u0001\u0000"+
"\u0000\u0000\u037d\u037e\u0003\u00e9t\u0000\u037e\u00e2\u0001\u0000\u0000"+
"\u0000\u037f\u0380\u0005\\\u0000\u0000\u0380\u0395\u0007\u0012\u0000\u0000"+
"\u0381\u0386\u0005\\\u0000\u0000\u0382\u0384\u0007\u0013\u0000\u0000\u0383"+
"\u0382\u0001\u0000\u0000\u0000\u0383\u0384\u0001\u0000\u0000\u0000\u0384"+
"\u0385\u0001\u0000\u0000\u0000\u0385\u0387\u0007\u0005\u0000\u0000\u0386"+
"\u0383\u0001\u0000\u0000\u0000\u0386\u0387\u0001\u0000\u0000\u0000\u0387"+
"\u0388\u0001\u0000\u0000\u0000\u0388\u0395\u0007\u0005\u0000\u0000\u0389"+
"\u038b\u0005\\\u0000\u0000\u038a\u038c\u0005u\u0000\u0000\u038b\u038a"+
"\u0001\u0000\u0000\u0000\u038c\u038d\u0001\u0000\u0000\u0000\u038d\u038b"+
"\u0001\u0000\u0000\u0000\u038d\u038e\u0001\u0000\u0000\u0000\u038e\u038f"+
"\u0001\u0000\u0000\u0000\u038f\u0390\u0003\u00e7s\u0000\u0390\u0391\u0003"+
"\u00e7s\u0000\u0391\u0392\u0003\u00e7s\u0000\u0392\u0393\u0003\u00e7s"+
"\u0000\u0393\u0395\u0001\u0000\u0000\u0000\u0394\u037f\u0001\u0000\u0000"+
"\u0000\u0394\u0381\u0001\u0000\u0000\u0000\u0394\u0389\u0001\u0000\u0000"+
"\u0000\u0395\u00e4\u0001\u0000\u0000\u0000\u0396\u039f\u0003\u00e7s\u0000"+
"\u0397\u039a\u0003\u00e7s\u0000\u0398\u039a\u0005_\u0000\u0000\u0399\u0397"+
"\u0001\u0000\u0000\u0000\u0399\u0398\u0001\u0000\u0000\u0000\u039a\u039d"+
"\u0001\u0000\u0000\u0000\u039b\u0399\u0001\u0000\u0000\u0000\u039b\u039c"+
"\u0001\u0000\u0000\u0000\u039c\u039e\u0001\u0000\u0000\u0000\u039d\u039b"+
"\u0001\u0000\u0000\u0000\u039e\u03a0\u0003\u00e7s\u0000\u039f\u039b\u0001"+
"\u0000\u0000\u0000\u039f\u03a0\u0001\u0000\u0000\u0000\u03a0\u00e6\u0001"+
"\u0000\u0000\u0000\u03a1\u03a2\u0007\u0003\u0000\u0000\u03a2\u00e8\u0001"+
"\u0000\u0000\u0000\u03a3\u03ab\u0007\u0014\u0000\u0000\u03a4\u03a6\u0007"+
"\u0015\u0000\u0000\u03a5\u03a4\u0001\u0000\u0000\u0000\u03a6\u03a9\u0001"+
"\u0000\u0000\u0000\u03a7\u03a5\u0001\u0000\u0000\u0000\u03a7\u03a8\u0001"+
"\u0000\u0000\u0000\u03a8\u03aa\u0001\u0000\u0000\u0000\u03a9\u03a7\u0001"+
"\u0000\u0000\u0000\u03aa\u03ac\u0007\u0014\u0000\u0000\u03ab\u03a7\u0001"+
"\u0000\u0000\u0000\u03ab\u03ac\u0001\u0000\u0000\u0000\u03ac\u00ea\u0001"+
"\u0000\u0000\u0000\u03ad\u03b0\u0003\u00edv\u0000\u03ae\u03b0\u0007\u0014"+
"\u0000\u0000\u03af\u03ad\u0001\u0000\u0000\u0000\u03af\u03ae\u0001\u0000"+
"\u0000\u0000\u03b0\u00ec\u0001\u0000\u0000\u0000\u03b1\u03b6\u0007\u0016"+
"\u0000\u0000\u03b2\u03b6\b\u0017\u0000\u0000\u03b3\u03b4\u0007\u0018\u0000"+
"\u0000\u03b4\u03b6\u0007\u0019\u0000\u0000\u03b5\u03b1\u0001\u0000\u0000"+
"\u0000\u03b5\u03b2\u0001\u0000\u0000\u0000\u03b5\u03b3\u0001\u0000\u0000"+
"\u0000\u03b6\u00ee\u0001\u0000\u0000\u00000\u0000\u0249\u024e\u0251\u0253"+
"\u0256\u025e\u0262\u0265\u026b\u0272\u0276\u0279\u0281\u0285\u0288\u028d"+
"\u0291\u0294\u0297\u029c\u029f\u02a1\u02a7\u02aa\u02ae\u02b2\u02b6\u02c1"+
"\u02c6\u02cd\u02cf\u0355\u035f\u036d\u0376\u037b\u0383\u0386\u038d\u0394"+
"\u0399\u039b\u039f\u03a7\u03ab\u03af\u03b5\u0001\u0000\u0001\u0000";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}
@@ -0,0 +1,211 @@
ABSTRACT=1
ASSERT=2
BOOLEAN=3
BREAK=4
BYTE=5
CASE=6
CATCH=7
CHAR=8
CLASS=9
CONST=10
CONTINUE=11
DEFAULT=12
DO=13
DOUBLE=14
ELSE=15
ENUM=16
EXTENDS=17
FINAL=18
FINALLY=19
FLOAT=20
FOR=21
IF=22
GOTO=23
IMPLEMENTS=24
IMPORT=25
INSTANCEOF=26
INT=27
INTERFACE=28
LONG=29
NATIVE=30
NEW=31
PACKAGE=32
PRIVATE=33
PROTECTED=34
PUBLIC=35
RETURN=36
SHORT=37
STATIC=38
STRICTFP=39
SUPER=40
SWITCH=41
SYNCHRONIZED=42
THIS=43
THROW=44
THROWS=45
TRANSIENT=46
TRY=47
VAR=48
VOID=49
VOLATILE=50
WHILE=51
DECIMAL_LITERAL=52
HEX_LITERAL=53
OCT_LITERAL=54
BINARY_LITERAL=55
FLOAT_LITERAL=56
HEX_FLOAT_LITERAL=57
BOOL_LITERAL=58
CHAR_LITERAL=59
STRING_LITERAL=60
NULL_LITERAL=61
LPAREN=62
RPAREN=63
LBRACE=64
RBRACE=65
LBRACK=66
RBRACK=67
SEMI=68
COMMA=69
DOT=70
ASSIGN=71
GT=72
LT=73
BANG=74
TILDE=75
QUESTION=76
COLON=77
EQUAL=78
LE=79
GE=80
NOTEQUAL=81
AND=82
OR=83
INC=84
DEC=85
ADD=86
SUB=87
MUL=88
DIV=89
BITAND=90
BITOR=91
CARET=92
MOD=93
ADD_ASSIGN=94
SUB_ASSIGN=95
MUL_ASSIGN=96
DIV_ASSIGN=97
AND_ASSIGN=98
OR_ASSIGN=99
XOR_ASSIGN=100
MOD_ASSIGN=101
LSHIFT_ASSIGN=102
RSHIFT_ASSIGN=103
URSHIFT_ASSIGN=104
ARROW=105
COLONCOLON=106
AT=107
ELLIPSIS=108
WS=109
BLOCK_COMMENT=110
LINE_COMMENT=111
IDENTIFIER=112
'abstract'=1
'assert'=2
'boolean'=3
'break'=4
'byte'=5
'case'=6
'catch'=7
'char'=8
'class'=9
'const'=10
'continue'=11
'default'=12
'do'=13
'double'=14
'else'=15
'enum'=16
'extends'=17
'final'=18
'finally'=19
'float'=20
'for'=21
'if'=22
'goto'=23
'implements'=24
'import'=25
'instanceof'=26
'int'=27
'interface'=28
'long'=29
'native'=30
'new'=31
'package'=32
'private'=33
'protected'=34
'public'=35
'return'=36
'short'=37
'static'=38
'strictfp'=39
'super'=40
'switch'=41
'synchronized'=42
'this'=43
'throw'=44
'throws'=45
'transient'=46
'try'=47
'var'=48
'void'=49
'volatile'=50
'while'=51
'null'=61
'('=62
')'=63
'{'=64
'}'=65
'['=66
']'=67
';'=68
','=69
'.'=70
'='=71
'>'=72
'<'=73
'!'=74
'~'=75
'?'=76
':'=77
'=='=78
'<='=79
'>='=80
'!='=81
'&&'=82
'||'=83
'++'=84
'--'=85
'+'=86
'-'=87
'*'=88
'/'=89
'&'=90
'|'=91
'^'=92
'%'=93
'+='=94
'-='=95
'*='=96
'/='=97
'&='=98
'|='=99
'^='=100
'%='=101
'<<='=102
'>>='=103
'>>>='=104
'->'=105
'::'=106
'@'=107
'...'=108
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,211 @@
ABSTRACT=1
ASSERT=2
BOOLEAN=3
BREAK=4
BYTE=5
CASE=6
CATCH=7
CHAR=8
CLASS=9
CONST=10
CONTINUE=11
DEFAULT=12
DO=13
DOUBLE=14
ELSE=15
ENUM=16
EXTENDS=17
FINAL=18
FINALLY=19
FLOAT=20
FOR=21
IF=22
GOTO=23
IMPLEMENTS=24
IMPORT=25
INSTANCEOF=26
INT=27
INTERFACE=28
LONG=29
NATIVE=30
NEW=31
PACKAGE=32
PRIVATE=33
PROTECTED=34
PUBLIC=35
RETURN=36
SHORT=37
STATIC=38
STRICTFP=39
SUPER=40
SWITCH=41
SYNCHRONIZED=42
THIS=43
THROW=44
THROWS=45
TRANSIENT=46
TRY=47
VAR=48
VOID=49
VOLATILE=50
WHILE=51
DECIMAL_LITERAL=52
HEX_LITERAL=53
OCT_LITERAL=54
BINARY_LITERAL=55
FLOAT_LITERAL=56
HEX_FLOAT_LITERAL=57
BOOL_LITERAL=58
CHAR_LITERAL=59
STRING_LITERAL=60
NULL_LITERAL=61
LPAREN=62
RPAREN=63
LBRACE=64
RBRACE=65
LBRACK=66
RBRACK=67
SEMI=68
COMMA=69
DOT=70
ASSIGN=71
GT=72
LT=73
BANG=74
TILDE=75
QUESTION=76
COLON=77
EQUAL=78
LE=79
GE=80
NOTEQUAL=81
AND=82
OR=83
INC=84
DEC=85
ADD=86
SUB=87
MUL=88
DIV=89
BITAND=90
BITOR=91
CARET=92
MOD=93
ADD_ASSIGN=94
SUB_ASSIGN=95
MUL_ASSIGN=96
DIV_ASSIGN=97
AND_ASSIGN=98
OR_ASSIGN=99
XOR_ASSIGN=100
MOD_ASSIGN=101
LSHIFT_ASSIGN=102
RSHIFT_ASSIGN=103
URSHIFT_ASSIGN=104
ARROW=105
COLONCOLON=106
AT=107
ELLIPSIS=108
WS=109
BLOCK_COMMENT=110
LINE_COMMENT=111
IDENTIFIER=112
'abstract'=1
'assert'=2
'boolean'=3
'break'=4
'byte'=5
'case'=6
'catch'=7
'char'=8
'class'=9
'const'=10
'continue'=11
'default'=12
'do'=13
'double'=14
'else'=15
'enum'=16
'extends'=17
'final'=18
'finally'=19
'float'=20
'for'=21
'if'=22
'goto'=23
'implements'=24
'import'=25
'instanceof'=26
'int'=27
'interface'=28
'long'=29
'native'=30
'new'=31
'package'=32
'private'=33
'protected'=34
'public'=35
'return'=36
'short'=37
'static'=38
'strictfp'=39
'super'=40
'switch'=41
'synchronized'=42
'this'=43
'throw'=44
'throws'=45
'transient'=46
'try'=47
'var'=48
'void'=49
'volatile'=50
'while'=51
'null'=61
'('=62
')'=63
'{'=64
'}'=65
'['=66
']'=67
';'=68
','=69
'.'=70
'='=71
'>'=72
'<'=73
'!'=74
'~'=75
'?'=76
':'=77
'=='=78
'<='=79
'>='=80
'!='=81
'&&'=82
'||'=83
'++'=84
'--'=85
'+'=86
'-'=87
'*'=88
'/'=89
'&'=90
'|'=91
'^'=92
'%'=93
'+='=94
'-='=95
'*='=96
'/='=97
'&='=98
'|='=99
'^='=100
'%='=101
'<<='=102
'>>='=103
'>>>='=104
'->'=105
'::'=106
'@'=107
'...'=108
@@ -0,0 +1,749 @@
// Generated from /home/itsaky/Projects/Android/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/java/JavaParser.g4 by ANTLR 4.10.1
package com.itsaky.androidide.lexers.java;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
/**
* This class provides an empty implementation of {@link JavaParserVisitor},
* which can be extended to create a visitor which only needs to handle a subset
* of the available methods.
*
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
public class JavaParserBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements JavaParserVisitor<T> {
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitCompilationUnit(JavaParser.CompilationUnitContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitPackageDeclaration(JavaParser.PackageDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitImportDeclaration(JavaParser.ImportDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeDeclaration(JavaParser.TypeDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitModifier(JavaParser.ModifierContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitClassOrInterfaceModifier(JavaParser.ClassOrInterfaceModifierContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitVariableModifier(JavaParser.VariableModifierContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitClassDeclaration(JavaParser.ClassDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeParameters(JavaParser.TypeParametersContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeParameter(JavaParser.TypeParameterContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeBound(JavaParser.TypeBoundContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitEnumDeclaration(JavaParser.EnumDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitEnumConstants(JavaParser.EnumConstantsContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitEnumConstant(JavaParser.EnumConstantContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitEnumBodyDeclarations(JavaParser.EnumBodyDeclarationsContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInterfaceDeclaration(JavaParser.InterfaceDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitClassBody(JavaParser.ClassBodyContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInterfaceBody(JavaParser.InterfaceBodyContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitClassBodyDeclaration(JavaParser.ClassBodyDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitMemberDeclaration(JavaParser.MemberDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitMethodDeclaration(JavaParser.MethodDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitMethodBody(JavaParser.MethodBodyContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeTypeOrVoid(JavaParser.TypeTypeOrVoidContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitGenericMethodDeclaration(JavaParser.GenericMethodDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitGenericConstructorDeclaration(JavaParser.GenericConstructorDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitConstructorDeclaration(JavaParser.ConstructorDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitFieldDeclaration(JavaParser.FieldDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInterfaceBodyDeclaration(JavaParser.InterfaceBodyDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInterfaceMemberDeclaration(JavaParser.InterfaceMemberDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitConstDeclaration(JavaParser.ConstDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitConstantDeclarator(JavaParser.ConstantDeclaratorContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInterfaceMethodDeclaration(JavaParser.InterfaceMethodDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInterfaceMethodModifier(JavaParser.InterfaceMethodModifierContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitGenericInterfaceMethodDeclaration(JavaParser.GenericInterfaceMethodDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitVariableDeclarators(JavaParser.VariableDeclaratorsContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitVariableDeclarator(JavaParser.VariableDeclaratorContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitVariableDeclaratorId(JavaParser.VariableDeclaratorIdContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitVariableInitializer(JavaParser.VariableInitializerContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitArrayInitializer(JavaParser.ArrayInitializerContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitClassOrInterfaceType(JavaParser.ClassOrInterfaceTypeContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeArgument(JavaParser.TypeArgumentContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitQualifiedNameList(JavaParser.QualifiedNameListContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitFormalParameters(JavaParser.FormalParametersContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitFormalParameterList(JavaParser.FormalParameterListContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitFormalParameter(JavaParser.FormalParameterContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLastFormalParameter(JavaParser.LastFormalParameterContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitQualifiedName(JavaParser.QualifiedNameContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLiteral(JavaParser.LiteralContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitIntegerLiteral(JavaParser.IntegerLiteralContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitFloatLiteral(JavaParser.FloatLiteralContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAltAnnotationQualifiedName(JavaParser.AltAnnotationQualifiedNameContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAnnotation(JavaParser.AnnotationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitElementValuePairs(JavaParser.ElementValuePairsContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitElementValuePair(JavaParser.ElementValuePairContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitElementValue(JavaParser.ElementValueContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitElementValueArrayInitializer(JavaParser.ElementValueArrayInitializerContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAnnotationTypeDeclaration(JavaParser.AnnotationTypeDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAnnotationTypeBody(JavaParser.AnnotationTypeBodyContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAnnotationTypeElementDeclaration(JavaParser.AnnotationTypeElementDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAnnotationTypeElementRest(JavaParser.AnnotationTypeElementRestContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAnnotationMethodOrConstantRest(JavaParser.AnnotationMethodOrConstantRestContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAnnotationMethodRest(JavaParser.AnnotationMethodRestContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitAnnotationConstantRest(JavaParser.AnnotationConstantRestContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitDefaultValue(JavaParser.DefaultValueContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBlock(JavaParser.BlockContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitBlockStatement(JavaParser.BlockStatementContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLocalVariableDeclaration(JavaParser.LocalVariableDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLocalTypeDeclaration(JavaParser.LocalTypeDeclarationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitStatement(JavaParser.StatementContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitCatchClause(JavaParser.CatchClauseContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitCatchType(JavaParser.CatchTypeContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitFinallyBlock(JavaParser.FinallyBlockContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitResourceSpecification(JavaParser.ResourceSpecificationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitResources(JavaParser.ResourcesContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitResource(JavaParser.ResourceContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitSwitchBlockStatementGroup(JavaParser.SwitchBlockStatementGroupContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitSwitchLabel(JavaParser.SwitchLabelContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitForControl(JavaParser.ForControlContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitForInit(JavaParser.ForInitContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitEnhancedForControl(JavaParser.EnhancedForControlContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitParExpression(JavaParser.ParExpressionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitExpressionList(JavaParser.ExpressionListContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitMethodCall(JavaParser.MethodCallContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitExpression(JavaParser.ExpressionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLambdaExpression(JavaParser.LambdaExpressionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLambdaParameters(JavaParser.LambdaParametersContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitLambdaBody(JavaParser.LambdaBodyContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitPrimary(JavaParser.PrimaryContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitClassType(JavaParser.ClassTypeContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitCreator(JavaParser.CreatorContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitCreatedName(JavaParser.CreatedNameContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitInnerCreator(JavaParser.InnerCreatorContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitArrayCreatorRest(JavaParser.ArrayCreatorRestContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitClassCreatorRest(JavaParser.ClassCreatorRestContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitExplicitGenericInvocation(JavaParser.ExplicitGenericInvocationContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeArgumentsOrDiamond(JavaParser.TypeArgumentsOrDiamondContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitNonWildcardTypeArgumentsOrDiamond(JavaParser.NonWildcardTypeArgumentsOrDiamondContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitNonWildcardTypeArguments(JavaParser.NonWildcardTypeArgumentsContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeList(JavaParser.TypeListContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeType(JavaParser.TypeTypeContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitPrimitiveType(JavaParser.PrimitiveTypeContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitTypeArguments(JavaParser.TypeArgumentsContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitSuperSuffix(JavaParser.SuperSuffixContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitExplicitGenericInvocationSuffix(JavaParser.ExplicitGenericInvocationSuffixContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitArguments(JavaParser.ArgumentsContext ctx) { return visitChildren(ctx); }
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,643 @@
// Generated from /home/itsaky/Projects/Android/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/java/JavaParser.g4 by ANTLR 4.10.1
package com.itsaky.androidide.lexers.java;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
/**
* This interface defines a complete generic visitor for a parse tree produced
* by {@link JavaParser}.
*
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
public interface JavaParserVisitor<T> extends ParseTreeVisitor<T> {
/**
* Visit a parse tree produced by {@link JavaParser#compilationUnit}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitCompilationUnit(JavaParser.CompilationUnitContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#packageDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitPackageDeclaration(JavaParser.PackageDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#importDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitImportDeclaration(JavaParser.ImportDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeDeclaration(JavaParser.TypeDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#modifier}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitModifier(JavaParser.ModifierContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#classOrInterfaceModifier}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassOrInterfaceModifier(JavaParser.ClassOrInterfaceModifierContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#variableModifier}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitVariableModifier(JavaParser.VariableModifierContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#classDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassDeclaration(JavaParser.ClassDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeParameters}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeParameters(JavaParser.TypeParametersContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeParameter}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeParameter(JavaParser.TypeParameterContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeBound}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeBound(JavaParser.TypeBoundContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#enumDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitEnumDeclaration(JavaParser.EnumDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#enumConstants}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitEnumConstants(JavaParser.EnumConstantsContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#enumConstant}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitEnumConstant(JavaParser.EnumConstantContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#enumBodyDeclarations}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitEnumBodyDeclarations(JavaParser.EnumBodyDeclarationsContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#interfaceDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInterfaceDeclaration(JavaParser.InterfaceDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#classBody}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassBody(JavaParser.ClassBodyContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#interfaceBody}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInterfaceBody(JavaParser.InterfaceBodyContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#classBodyDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassBodyDeclaration(JavaParser.ClassBodyDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#memberDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitMemberDeclaration(JavaParser.MemberDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#methodDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitMethodDeclaration(JavaParser.MethodDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#methodBody}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitMethodBody(JavaParser.MethodBodyContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeTypeOrVoid}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeTypeOrVoid(JavaParser.TypeTypeOrVoidContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#genericMethodDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitGenericMethodDeclaration(JavaParser.GenericMethodDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#genericConstructorDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitGenericConstructorDeclaration(JavaParser.GenericConstructorDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#constructorDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitConstructorDeclaration(JavaParser.ConstructorDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#fieldDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitFieldDeclaration(JavaParser.FieldDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#interfaceBodyDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInterfaceBodyDeclaration(JavaParser.InterfaceBodyDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#interfaceMemberDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInterfaceMemberDeclaration(JavaParser.InterfaceMemberDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#constDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitConstDeclaration(JavaParser.ConstDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#constantDeclarator}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitConstantDeclarator(JavaParser.ConstantDeclaratorContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#interfaceMethodDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInterfaceMethodDeclaration(JavaParser.InterfaceMethodDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#interfaceMethodModifier}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInterfaceMethodModifier(JavaParser.InterfaceMethodModifierContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#genericInterfaceMethodDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitGenericInterfaceMethodDeclaration(JavaParser.GenericInterfaceMethodDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#variableDeclarators}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitVariableDeclarators(JavaParser.VariableDeclaratorsContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#variableDeclarator}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitVariableDeclarator(JavaParser.VariableDeclaratorContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#variableDeclaratorId}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitVariableDeclaratorId(JavaParser.VariableDeclaratorIdContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#variableInitializer}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitVariableInitializer(JavaParser.VariableInitializerContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#arrayInitializer}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitArrayInitializer(JavaParser.ArrayInitializerContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#classOrInterfaceType}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassOrInterfaceType(JavaParser.ClassOrInterfaceTypeContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeArgument}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeArgument(JavaParser.TypeArgumentContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#qualifiedNameList}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitQualifiedNameList(JavaParser.QualifiedNameListContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#formalParameters}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitFormalParameters(JavaParser.FormalParametersContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#formalParameterList}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitFormalParameterList(JavaParser.FormalParameterListContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#formalParameter}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitFormalParameter(JavaParser.FormalParameterContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#lastFormalParameter}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLastFormalParameter(JavaParser.LastFormalParameterContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#qualifiedName}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitQualifiedName(JavaParser.QualifiedNameContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#literal}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLiteral(JavaParser.LiteralContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#integerLiteral}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitIntegerLiteral(JavaParser.IntegerLiteralContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#floatLiteral}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitFloatLiteral(JavaParser.FloatLiteralContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#altAnnotationQualifiedName}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAltAnnotationQualifiedName(JavaParser.AltAnnotationQualifiedNameContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#annotation}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotation(JavaParser.AnnotationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#elementValuePairs}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitElementValuePairs(JavaParser.ElementValuePairsContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#elementValuePair}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitElementValuePair(JavaParser.ElementValuePairContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#elementValue}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitElementValue(JavaParser.ElementValueContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#elementValueArrayInitializer}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitElementValueArrayInitializer(JavaParser.ElementValueArrayInitializerContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#annotationTypeDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationTypeDeclaration(JavaParser.AnnotationTypeDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#annotationTypeBody}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationTypeBody(JavaParser.AnnotationTypeBodyContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#annotationTypeElementDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationTypeElementDeclaration(JavaParser.AnnotationTypeElementDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#annotationTypeElementRest}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationTypeElementRest(JavaParser.AnnotationTypeElementRestContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#annotationMethodOrConstantRest}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationMethodOrConstantRest(JavaParser.AnnotationMethodOrConstantRestContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#annotationMethodRest}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationMethodRest(JavaParser.AnnotationMethodRestContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#annotationConstantRest}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitAnnotationConstantRest(JavaParser.AnnotationConstantRestContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#defaultValue}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDefaultValue(JavaParser.DefaultValueContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#block}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlock(JavaParser.BlockContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#blockStatement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlockStatement(JavaParser.BlockStatementContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#localVariableDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLocalVariableDeclaration(JavaParser.LocalVariableDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#localTypeDeclaration}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLocalTypeDeclaration(JavaParser.LocalTypeDeclarationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#statement}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitStatement(JavaParser.StatementContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#catchClause}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitCatchClause(JavaParser.CatchClauseContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#catchType}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitCatchType(JavaParser.CatchTypeContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#finallyBlock}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitFinallyBlock(JavaParser.FinallyBlockContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#resourceSpecification}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitResourceSpecification(JavaParser.ResourceSpecificationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#resources}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitResources(JavaParser.ResourcesContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#resource}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitResource(JavaParser.ResourceContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#switchBlockStatementGroup}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitSwitchBlockStatementGroup(JavaParser.SwitchBlockStatementGroupContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#switchLabel}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitSwitchLabel(JavaParser.SwitchLabelContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#forControl}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitForControl(JavaParser.ForControlContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#forInit}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitForInit(JavaParser.ForInitContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#enhancedForControl}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitEnhancedForControl(JavaParser.EnhancedForControlContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#parExpression}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitParExpression(JavaParser.ParExpressionContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#expressionList}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitExpressionList(JavaParser.ExpressionListContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#methodCall}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitMethodCall(JavaParser.MethodCallContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#expression}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitExpression(JavaParser.ExpressionContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#lambdaExpression}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLambdaExpression(JavaParser.LambdaExpressionContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#lambdaParameters}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLambdaParameters(JavaParser.LambdaParametersContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#lambdaBody}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLambdaBody(JavaParser.LambdaBodyContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#primary}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitPrimary(JavaParser.PrimaryContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#classType}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassType(JavaParser.ClassTypeContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#creator}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitCreator(JavaParser.CreatorContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#createdName}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitCreatedName(JavaParser.CreatedNameContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#innerCreator}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInnerCreator(JavaParser.InnerCreatorContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#arrayCreatorRest}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitArrayCreatorRest(JavaParser.ArrayCreatorRestContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#classCreatorRest}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitClassCreatorRest(JavaParser.ClassCreatorRestContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#explicitGenericInvocation}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitExplicitGenericInvocation(JavaParser.ExplicitGenericInvocationContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeArgumentsOrDiamond}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeArgumentsOrDiamond(JavaParser.TypeArgumentsOrDiamondContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#nonWildcardTypeArgumentsOrDiamond}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitNonWildcardTypeArgumentsOrDiamond(JavaParser.NonWildcardTypeArgumentsOrDiamondContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#nonWildcardTypeArguments}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitNonWildcardTypeArguments(JavaParser.NonWildcardTypeArgumentsContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeList}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeList(JavaParser.TypeListContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeType}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeType(JavaParser.TypeTypeContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#primitiveType}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitPrimitiveType(JavaParser.PrimitiveTypeContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#typeArguments}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitTypeArguments(JavaParser.TypeArgumentsContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#superSuffix}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitSuperSuffix(JavaParser.SuperSuffixContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#explicitGenericInvocationSuffix}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitExplicitGenericInvocationSuffix(JavaParser.ExplicitGenericInvocationSuffixContext ctx);
/**
* Visit a parse tree produced by {@link JavaParser#arguments}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitArguments(JavaParser.ArgumentsContext ctx);
}
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
set -eu
# Usage:
# find * -type d -exec ./gen.sh {} \;
cd $1
dir_name=$(basename $(pwd))
echo "Generating lexer and parser for $dir_name..."
antlr4 -o . -lib . -listener -visitor -package com.itsaky.androidide.lexers.$dir_name *.g4
cd - >/dev/null 2>&1
File diff suppressed because one or more lines are too long
@@ -1,27 +1,7 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from GroovyLexer.g4 by ANTLR 4.9.2
// Generated from GroovyLexer.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.groovy;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.RuntimeMetaData;
import org.antlr.v4.runtime.Vocabulary;
@@ -32,17 +12,8 @@ import org.antlr.v4.runtime.atn.LexerATNSimulator;
import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.dfa.DFA;
import java.io.IOException;
import java.io.StringReader;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class GroovyLexer extends Lexer {
static {
RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION);
}
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
public static final int ABSTRACT = 1,
ASSERT = 2,
BOOLEAN = 3,
@@ -155,442 +126,11 @@ public class GroovyLexer extends Lexer {
COMMENT = 110,
LINE_COMMENT = 111,
IDENTIFIER = 112;
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE"};
private static String[] makeRuleNames() {
return new String[] {
"ABSTRACT",
"ASSERT",
"BOOLEAN",
"BREAK",
"BYTE",
"CASE",
"CATCH",
"CHAR",
"CLASS",
"CONST",
"CONTINUE",
"DEFAULT",
"DO",
"DOUBLE",
"ELSE",
"ENUM",
"EXTENDS",
"FINAL",
"FINALLY",
"FLOAT",
"FOR",
"IF",
"GOTO",
"IMPLEMENTS",
"IMPORT",
"INSTANCEOF",
"INT",
"INTERFACE",
"LONG",
"NATIVE",
"NEW",
"PACKAGE",
"PRIVATE",
"PROTECTED",
"PUBLIC",
"RETURN",
"SHORT",
"STATIC",
"STRICTFP",
"SUPER",
"SWITCH",
"SYNCHRONIZED",
"THIS",
"THROW",
"THROWS",
"TRANSIENT",
"TRY",
"VOID",
"VOLATILE",
"WHILE",
"DECIMAL_LITERAL",
"HEX_LITERAL",
"OCT_LITERAL",
"BINARY_LITERAL",
"FLOAT_LITERAL",
"HEX_FLOAT_LITERAL",
"BOOL_LITERAL",
"CHAR_LITERAL",
"SINGLE_QUOTE_STRING",
"STRING_LITERAL",
"NULL_LITERAL",
"LPAREN",
"RPAREN",
"LBRACE",
"RBRACE",
"LBRACK",
"RBRACK",
"SEMI",
"COMMA",
"DOT",
"ASSIGN",
"GT",
"LT",
"BANG",
"TILDE",
"QUESTION",
"COLON",
"EQUAL",
"LE",
"GE",
"NOTEQUAL",
"AND",
"OR",
"INC",
"DEC",
"ADD",
"SUB",
"MUL",
"DIV",
"BITAND",
"BITOR",
"CARET",
"MOD",
"ADD_ASSIGN",
"SUB_ASSIGN",
"MUL_ASSIGN",
"DIV_ASSIGN",
"AND_ASSIGN",
"OR_ASSIGN",
"XOR_ASSIGN",
"MOD_ASSIGN",
"LSHIFT_ASSIGN",
"RSHIFT_ASSIGN",
"URSHIFT_ASSIGN",
"ARROW",
"COLONCOLON",
"AT",
"ELLIPSIS",
"WS",
"COMMENT",
"LINE_COMMENT",
"IDENTIFIER",
"ExponentPart",
"EscapeSequence",
"HexDigits",
"HexDigit",
"Digits",
"LetterOrDigit",
"Letter"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
null,
"'abstract'",
"'assert'",
"'boolean'",
"'break'",
"'byte'",
"'case'",
"'catch'",
"'char'",
"'class'",
"'const'",
"'continue'",
"'default'",
"'do'",
"'double'",
"'else'",
"'enum'",
"'extends'",
"'final'",
"'finally'",
"'float'",
"'for'",
"'if'",
"'goto'",
"'implements'",
"'import'",
"'instanceof'",
"'int'",
"'interface'",
"'long'",
"'native'",
"'new'",
"'package'",
"'private'",
"'protected'",
"'public'",
"'return'",
"'short'",
"'static'",
"'strictfp'",
"'super'",
"'switch'",
"'synchronized'",
"'this'",
"'throw'",
"'throws'",
"'transient'",
"'try'",
"'void'",
"'volatile'",
"'while'",
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
"'null'",
"'('",
"')'",
"'{'",
"'}'",
"'['",
"']'",
"';'",
"','",
"'.'",
"'='",
"'>'",
"'<'",
"'!'",
"'~'",
"'?'",
"':'",
"'=='",
"'<='",
"'>='",
"'!='",
"'&&'",
"'||'",
"'++'",
"'--'",
"'+'",
"'-'",
"'*'",
"'/'",
"'&'",
"'|'",
"'^'",
"'%'",
"'+='",
"'-='",
"'*='",
"'/='",
"'&='",
"'|='",
"'^='",
"'%='",
"'<<='",
"'>>='",
"'>>>='",
"'->'",
"'::'",
"'@'",
"'...'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null,
"ABSTRACT",
"ASSERT",
"BOOLEAN",
"BREAK",
"BYTE",
"CASE",
"CATCH",
"CHAR",
"CLASS",
"CONST",
"CONTINUE",
"DEFAULT",
"DO",
"DOUBLE",
"ELSE",
"ENUM",
"EXTENDS",
"FINAL",
"FINALLY",
"FLOAT",
"FOR",
"IF",
"GOTO",
"IMPLEMENTS",
"IMPORT",
"INSTANCEOF",
"INT",
"INTERFACE",
"LONG",
"NATIVE",
"NEW",
"PACKAGE",
"PRIVATE",
"PROTECTED",
"PUBLIC",
"RETURN",
"SHORT",
"STATIC",
"STRICTFP",
"SUPER",
"SWITCH",
"SYNCHRONIZED",
"THIS",
"THROW",
"THROWS",
"TRANSIENT",
"TRY",
"VOID",
"VOLATILE",
"WHILE",
"DECIMAL_LITERAL",
"HEX_LITERAL",
"OCT_LITERAL",
"BINARY_LITERAL",
"FLOAT_LITERAL",
"HEX_FLOAT_LITERAL",
"BOOL_LITERAL",
"CHAR_LITERAL",
"SINGLE_QUOTE_STRING",
"STRING_LITERAL",
"NULL_LITERAL",
"LPAREN",
"RPAREN",
"LBRACE",
"RBRACE",
"LBRACK",
"RBRACK",
"SEMI",
"COMMA",
"DOT",
"ASSIGN",
"GT",
"LT",
"BANG",
"TILDE",
"QUESTION",
"COLON",
"EQUAL",
"LE",
"GE",
"NOTEQUAL",
"AND",
"OR",
"INC",
"DEC",
"ADD",
"SUB",
"MUL",
"DIV",
"BITAND",
"BITOR",
"CARET",
"MOD",
"ADD_ASSIGN",
"SUB_ASSIGN",
"MUL_ASSIGN",
"DIV_ASSIGN",
"AND_ASSIGN",
"OR_ASSIGN",
"XOR_ASSIGN",
"MOD_ASSIGN",
"LSHIFT_ASSIGN",
"RSHIFT_ASSIGN",
"URSHIFT_ASSIGN",
"ARROW",
"COLONCOLON",
"AT",
"ELLIPSIS",
"WS",
"COMMENT",
"LINE_COMMENT",
"IDENTIFIER"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public GroovyLexer(String input) throws IOException {
this(CharStreams.fromReader(new StringReader(input)));
}
public GroovyLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
@Override
public String getGrammarFileName() {
return "GroovyLexer.g4";
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
public ATN getATN() {
return _ATN;
}
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2r\u03bf\b\1\4\2\t"
+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"
@@ -929,6 +469,31 @@ public class GroovyLexer extends Lexer {
+ "\u02cb\u02cd\u02d5\u02d7\u035d\u0367\u0375\u037e\u0383\u038b\u038e\u0395"
+ "\u039c\u03a1\u03a3\u03a7\u03af\u03b3\u03b7\u03bd\3\2\3\2";
public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray());
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE"};
static {
RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION);
}
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
@@ -936,4 +501,406 @@ public class GroovyLexer extends Lexer {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
public GroovyLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
private static String[] makeRuleNames() {
return new String[] {
"ABSTRACT",
"ASSERT",
"BOOLEAN",
"BREAK",
"BYTE",
"CASE",
"CATCH",
"CHAR",
"CLASS",
"CONST",
"CONTINUE",
"DEFAULT",
"DO",
"DOUBLE",
"ELSE",
"ENUM",
"EXTENDS",
"FINAL",
"FINALLY",
"FLOAT",
"FOR",
"IF",
"GOTO",
"IMPLEMENTS",
"IMPORT",
"INSTANCEOF",
"INT",
"INTERFACE",
"LONG",
"NATIVE",
"NEW",
"PACKAGE",
"PRIVATE",
"PROTECTED",
"PUBLIC",
"RETURN",
"SHORT",
"STATIC",
"STRICTFP",
"SUPER",
"SWITCH",
"SYNCHRONIZED",
"THIS",
"THROW",
"THROWS",
"TRANSIENT",
"TRY",
"VOID",
"VOLATILE",
"WHILE",
"DECIMAL_LITERAL",
"HEX_LITERAL",
"OCT_LITERAL",
"BINARY_LITERAL",
"FLOAT_LITERAL",
"HEX_FLOAT_LITERAL",
"BOOL_LITERAL",
"CHAR_LITERAL",
"SINGLE_QUOTE_STRING",
"STRING_LITERAL",
"NULL_LITERAL",
"LPAREN",
"RPAREN",
"LBRACE",
"RBRACE",
"LBRACK",
"RBRACK",
"SEMI",
"COMMA",
"DOT",
"ASSIGN",
"GT",
"LT",
"BANG",
"TILDE",
"QUESTION",
"COLON",
"EQUAL",
"LE",
"GE",
"NOTEQUAL",
"AND",
"OR",
"INC",
"DEC",
"ADD",
"SUB",
"MUL",
"DIV",
"BITAND",
"BITOR",
"CARET",
"MOD",
"ADD_ASSIGN",
"SUB_ASSIGN",
"MUL_ASSIGN",
"DIV_ASSIGN",
"AND_ASSIGN",
"OR_ASSIGN",
"XOR_ASSIGN",
"MOD_ASSIGN",
"LSHIFT_ASSIGN",
"RSHIFT_ASSIGN",
"URSHIFT_ASSIGN",
"ARROW",
"COLONCOLON",
"AT",
"ELLIPSIS",
"WS",
"COMMENT",
"LINE_COMMENT",
"IDENTIFIER",
"ExponentPart",
"EscapeSequence",
"HexDigits",
"HexDigit",
"Digits",
"LetterOrDigit",
"Letter"
};
}
private static String[] makeLiteralNames() {
return new String[] {
null,
"'abstract'",
"'assert'",
"'boolean'",
"'break'",
"'byte'",
"'case'",
"'catch'",
"'char'",
"'class'",
"'const'",
"'continue'",
"'default'",
"'do'",
"'double'",
"'else'",
"'enum'",
"'extends'",
"'final'",
"'finally'",
"'float'",
"'for'",
"'if'",
"'goto'",
"'implements'",
"'import'",
"'instanceof'",
"'int'",
"'interface'",
"'long'",
"'native'",
"'new'",
"'package'",
"'private'",
"'protected'",
"'public'",
"'return'",
"'short'",
"'static'",
"'strictfp'",
"'super'",
"'switch'",
"'synchronized'",
"'this'",
"'throw'",
"'throws'",
"'transient'",
"'try'",
"'void'",
"'volatile'",
"'while'",
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
"'null'",
"'('",
"')'",
"'{'",
"'}'",
"'['",
"']'",
"';'",
"','",
"'.'",
"'='",
"'>'",
"'<'",
"'!'",
"'~'",
"'?'",
"':'",
"'=='",
"'<='",
"'>='",
"'!='",
"'&&'",
"'||'",
"'++'",
"'--'",
"'+'",
"'-'",
"'*'",
"'/'",
"'&'",
"'|'",
"'^'",
"'%'",
"'+='",
"'-='",
"'*='",
"'/='",
"'&='",
"'|='",
"'^='",
"'%='",
"'<<='",
"'>>='",
"'>>>='",
"'->'",
"'::'",
"'@'",
"'...'"
};
}
private static String[] makeSymbolicNames() {
return new String[] {
null,
"ABSTRACT",
"ASSERT",
"BOOLEAN",
"BREAK",
"BYTE",
"CASE",
"CATCH",
"CHAR",
"CLASS",
"CONST",
"CONTINUE",
"DEFAULT",
"DO",
"DOUBLE",
"ELSE",
"ENUM",
"EXTENDS",
"FINAL",
"FINALLY",
"FLOAT",
"FOR",
"IF",
"GOTO",
"IMPLEMENTS",
"IMPORT",
"INSTANCEOF",
"INT",
"INTERFACE",
"LONG",
"NATIVE",
"NEW",
"PACKAGE",
"PRIVATE",
"PROTECTED",
"PUBLIC",
"RETURN",
"SHORT",
"STATIC",
"STRICTFP",
"SUPER",
"SWITCH",
"SYNCHRONIZED",
"THIS",
"THROW",
"THROWS",
"TRANSIENT",
"TRY",
"VOID",
"VOLATILE",
"WHILE",
"DECIMAL_LITERAL",
"HEX_LITERAL",
"OCT_LITERAL",
"BINARY_LITERAL",
"FLOAT_LITERAL",
"HEX_FLOAT_LITERAL",
"BOOL_LITERAL",
"CHAR_LITERAL",
"SINGLE_QUOTE_STRING",
"STRING_LITERAL",
"NULL_LITERAL",
"LPAREN",
"RPAREN",
"LBRACE",
"RBRACE",
"LBRACK",
"RBRACK",
"SEMI",
"COMMA",
"DOT",
"ASSIGN",
"GT",
"LT",
"BANG",
"TILDE",
"QUESTION",
"COLON",
"EQUAL",
"LE",
"GE",
"NOTEQUAL",
"AND",
"OR",
"INC",
"DEC",
"ADD",
"SUB",
"MUL",
"DIV",
"BITAND",
"BITOR",
"CARET",
"MOD",
"ADD_ASSIGN",
"SUB_ASSIGN",
"MUL_ASSIGN",
"DIV_ASSIGN",
"AND_ASSIGN",
"OR_ASSIGN",
"XOR_ASSIGN",
"MOD_ASSIGN",
"LSHIFT_ASSIGN",
"RSHIFT_ASSIGN",
"URSHIFT_ASSIGN",
"ARROW",
"COLONCOLON",
"AT",
"ELLIPSIS",
"WS",
"COMMENT",
"LINE_COMMENT",
"IDENTIFIER"
};
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String getGrammarFileName() {
return "GroovyLexer.g4";
}
@Override
public ATN getATN() {
return _ATN;
}
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
}
@@ -0,0 +1,210 @@
ABSTRACT=1
ASSERT=2
BOOLEAN=3
BREAK=4
BYTE=5
CASE=6
CATCH=7
CHAR=8
CLASS=9
CONST=10
CONTINUE=11
DEFAULT=12
DO=13
DOUBLE=14
ELSE=15
ENUM=16
EXTENDS=17
FINAL=18
FINALLY=19
FLOAT=20
FOR=21
IF=22
GOTO=23
IMPLEMENTS=24
IMPORT=25
INSTANCEOF=26
INT=27
INTERFACE=28
LONG=29
NATIVE=30
NEW=31
PACKAGE=32
PRIVATE=33
PROTECTED=34
PUBLIC=35
RETURN=36
SHORT=37
STATIC=38
STRICTFP=39
SUPER=40
SWITCH=41
SYNCHRONIZED=42
THIS=43
THROW=44
THROWS=45
TRANSIENT=46
TRY=47
VOID=48
VOLATILE=49
WHILE=50
DECIMAL_LITERAL=51
HEX_LITERAL=52
OCT_LITERAL=53
BINARY_LITERAL=54
FLOAT_LITERAL=55
HEX_FLOAT_LITERAL=56
BOOL_LITERAL=57
CHAR_LITERAL=58
SINGLE_QUOTE_STRING=59
STRING_LITERAL=60
NULL_LITERAL=61
LPAREN=62
RPAREN=63
LBRACE=64
RBRACE=65
LBRACK=66
RBRACK=67
SEMI=68
COMMA=69
DOT=70
ASSIGN=71
GT=72
LT=73
BANG=74
TILDE=75
QUESTION=76
COLON=77
EQUAL=78
LE=79
GE=80
NOTEQUAL=81
AND=82
OR=83
INC=84
DEC=85
ADD=86
SUB=87
MUL=88
DIV=89
BITAND=90
BITOR=91
CARET=92
MOD=93
ADD_ASSIGN=94
SUB_ASSIGN=95
MUL_ASSIGN=96
DIV_ASSIGN=97
AND_ASSIGN=98
OR_ASSIGN=99
XOR_ASSIGN=100
MOD_ASSIGN=101
LSHIFT_ASSIGN=102
RSHIFT_ASSIGN=103
URSHIFT_ASSIGN=104
ARROW=105
COLONCOLON=106
AT=107
ELLIPSIS=108
WS=109
COMMENT=110
LINE_COMMENT=111
IDENTIFIER=112
'abstract'=1
'assert'=2
'boolean'=3
'break'=4
'byte'=5
'case'=6
'catch'=7
'char'=8
'class'=9
'const'=10
'continue'=11
'default'=12
'do'=13
'double'=14
'else'=15
'enum'=16
'extends'=17
'final'=18
'finally'=19
'float'=20
'for'=21
'if'=22
'goto'=23
'implements'=24
'import'=25
'instanceof'=26
'int'=27
'interface'=28
'long'=29
'native'=30
'new'=31
'package'=32
'private'=33
'protected'=34
'public'=35
'return'=36
'short'=37
'static'=38
'strictfp'=39
'super'=40
'switch'=41
'synchronized'=42
'this'=43
'throw'=44
'throws'=45
'transient'=46
'try'=47
'void'=48
'volatile'=49
'while'=50
'null'=61
'('=62
')'=63
'{'=64
'}'=65
'['=66
']'=67
';'=68
','=69
'.'=70
'='=71
'>'=72
'<'=73
'!'=74
'~'=75
'?'=76
':'=77
'=='=78
'<='=79
'>='=80
'!='=81
'&&'=82
'||'=83
'++'=84
'--'=85
'+'=86
'-'=87
'*'=88
'/'=89
'&'=90
'|'=91
'^'=92
'%'=93
'+='=94
'-='=95
'*='=96
'/='=97
'&='=98
'|='=99
'^='=100
'%='=101
'<<='=102
'>>='=103
'>>>='=104
'->'=105
'::'=106
'@'=107
'...'=108
@@ -170,7 +170,7 @@ ELLIPSIS: '...';
WS: [ \t\r\n\u000C]+ -> channel(HIDDEN);
BLOCK_COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN);
LINE_COMMENT: '//'~[\r\n]* -> channel(HIDDEN);
// Identifiers
@@ -1,23 +1,4 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavaLexer.g4 by ANTLR 4.9.2
// Generated from JavaLexer.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.java;
import org.antlr.v4.runtime.CharStream;
@@ -33,12 +14,6 @@ import org.antlr.v4.runtime.dfa.DFA;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class JavaLexer extends Lexer {
static {
RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION);
}
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
public static final int ABSTRACT = 1,
ASSERT = 2,
BOOLEAN = 3,
@@ -151,438 +126,11 @@ public class JavaLexer extends Lexer {
BLOCK_COMMENT = 110,
LINE_COMMENT = 111,
IDENTIFIER = 112;
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE"};
private static String[] makeRuleNames() {
return new String[] {
"ABSTRACT",
"ASSERT",
"BOOLEAN",
"BREAK",
"BYTE",
"CASE",
"CATCH",
"CHAR",
"CLASS",
"CONST",
"CONTINUE",
"DEFAULT",
"DO",
"DOUBLE",
"ELSE",
"ENUM",
"EXTENDS",
"FINAL",
"FINALLY",
"FLOAT",
"FOR",
"IF",
"GOTO",
"IMPLEMENTS",
"IMPORT",
"INSTANCEOF",
"INT",
"INTERFACE",
"LONG",
"NATIVE",
"NEW",
"PACKAGE",
"PRIVATE",
"PROTECTED",
"PUBLIC",
"RETURN",
"SHORT",
"STATIC",
"STRICTFP",
"SUPER",
"SWITCH",
"SYNCHRONIZED",
"THIS",
"THROW",
"THROWS",
"TRANSIENT",
"TRY",
"VAR",
"VOID",
"VOLATILE",
"WHILE",
"DECIMAL_LITERAL",
"HEX_LITERAL",
"OCT_LITERAL",
"BINARY_LITERAL",
"FLOAT_LITERAL",
"HEX_FLOAT_LITERAL",
"BOOL_LITERAL",
"CHAR_LITERAL",
"STRING_LITERAL",
"NULL_LITERAL",
"LPAREN",
"RPAREN",
"LBRACE",
"RBRACE",
"LBRACK",
"RBRACK",
"SEMI",
"COMMA",
"DOT",
"ASSIGN",
"GT",
"LT",
"BANG",
"TILDE",
"QUESTION",
"COLON",
"EQUAL",
"LE",
"GE",
"NOTEQUAL",
"AND",
"OR",
"INC",
"DEC",
"ADD",
"SUB",
"MUL",
"DIV",
"BITAND",
"BITOR",
"CARET",
"MOD",
"ADD_ASSIGN",
"SUB_ASSIGN",
"MUL_ASSIGN",
"DIV_ASSIGN",
"AND_ASSIGN",
"OR_ASSIGN",
"XOR_ASSIGN",
"MOD_ASSIGN",
"LSHIFT_ASSIGN",
"RSHIFT_ASSIGN",
"URSHIFT_ASSIGN",
"ARROW",
"COLONCOLON",
"AT",
"ELLIPSIS",
"WS",
"BLOCK_COMMENT",
"LINE_COMMENT",
"IDENTIFIER",
"ExponentPart",
"EscapeSequence",
"HexDigits",
"HexDigit",
"Digits",
"LetterOrDigit",
"Letter"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
null,
"'abstract'",
"'assert'",
"'boolean'",
"'break'",
"'byte'",
"'case'",
"'catch'",
"'char'",
"'class'",
"'const'",
"'continue'",
"'default'",
"'do'",
"'double'",
"'else'",
"'enum'",
"'extends'",
"'final'",
"'finally'",
"'float'",
"'for'",
"'if'",
"'goto'",
"'implements'",
"'import'",
"'instanceof'",
"'int'",
"'interface'",
"'long'",
"'native'",
"'new'",
"'package'",
"'private'",
"'protected'",
"'public'",
"'return'",
"'short'",
"'static'",
"'strictfp'",
"'super'",
"'switch'",
"'synchronized'",
"'this'",
"'throw'",
"'throws'",
"'transient'",
"'try'",
"'var'",
"'void'",
"'volatile'",
"'while'",
null,
null,
null,
null,
null,
null,
null,
null,
null,
"'null'",
"'('",
"')'",
"'{'",
"'}'",
"'['",
"']'",
"';'",
"','",
"'.'",
"'='",
"'>'",
"'<'",
"'!'",
"'~'",
"'?'",
"':'",
"'=='",
"'<='",
"'>='",
"'!='",
"'&&'",
"'||'",
"'++'",
"'--'",
"'+'",
"'-'",
"'*'",
"'/'",
"'&'",
"'|'",
"'^'",
"'%'",
"'+='",
"'-='",
"'*='",
"'/='",
"'&='",
"'|='",
"'^='",
"'%='",
"'<<='",
"'>>='",
"'>>>='",
"'->'",
"'::'",
"'@'",
"'...'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null,
"ABSTRACT",
"ASSERT",
"BOOLEAN",
"BREAK",
"BYTE",
"CASE",
"CATCH",
"CHAR",
"CLASS",
"CONST",
"CONTINUE",
"DEFAULT",
"DO",
"DOUBLE",
"ELSE",
"ENUM",
"EXTENDS",
"FINAL",
"FINALLY",
"FLOAT",
"FOR",
"IF",
"GOTO",
"IMPLEMENTS",
"IMPORT",
"INSTANCEOF",
"INT",
"INTERFACE",
"LONG",
"NATIVE",
"NEW",
"PACKAGE",
"PRIVATE",
"PROTECTED",
"PUBLIC",
"RETURN",
"SHORT",
"STATIC",
"STRICTFP",
"SUPER",
"SWITCH",
"SYNCHRONIZED",
"THIS",
"THROW",
"THROWS",
"TRANSIENT",
"TRY",
"VAR",
"VOID",
"VOLATILE",
"WHILE",
"DECIMAL_LITERAL",
"HEX_LITERAL",
"OCT_LITERAL",
"BINARY_LITERAL",
"FLOAT_LITERAL",
"HEX_FLOAT_LITERAL",
"BOOL_LITERAL",
"CHAR_LITERAL",
"STRING_LITERAL",
"NULL_LITERAL",
"LPAREN",
"RPAREN",
"LBRACE",
"RBRACE",
"LBRACK",
"RBRACK",
"SEMI",
"COMMA",
"DOT",
"ASSIGN",
"GT",
"LT",
"BANG",
"TILDE",
"QUESTION",
"COLON",
"EQUAL",
"LE",
"GE",
"NOTEQUAL",
"AND",
"OR",
"INC",
"DEC",
"ADD",
"SUB",
"MUL",
"DIV",
"BITAND",
"BITOR",
"CARET",
"MOD",
"ADD_ASSIGN",
"SUB_ASSIGN",
"MUL_ASSIGN",
"DIV_ASSIGN",
"AND_ASSIGN",
"OR_ASSIGN",
"XOR_ASSIGN",
"MOD_ASSIGN",
"LSHIFT_ASSIGN",
"RSHIFT_ASSIGN",
"URSHIFT_ASSIGN",
"ARROW",
"COLONCOLON",
"AT",
"ELLIPSIS",
"WS",
"BLOCK_COMMENT",
"LINE_COMMENT",
"IDENTIFIER"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public JavaLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
@Override
public String getGrammarFileName() {
return "JavaLexer.g4";
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
public ATN getATN() {
return _ATN;
}
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2r\u03b9\b\1\4\2\t"
+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"
@@ -918,6 +466,31 @@ public class JavaLexer extends Lexer {
+ "\u0378\u037d\u0385\u0388\u038f\u0396\u039b\u039d\u03a1\u03a9\u03ad\u03b1"
+ "\u03b7\3\2\3\2";
public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray());
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE"};
static {
RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION);
}
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
@@ -925,4 +498,406 @@ public class JavaLexer extends Lexer {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
public JavaLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
private static String[] makeRuleNames() {
return new String[] {
"ABSTRACT",
"ASSERT",
"BOOLEAN",
"BREAK",
"BYTE",
"CASE",
"CATCH",
"CHAR",
"CLASS",
"CONST",
"CONTINUE",
"DEFAULT",
"DO",
"DOUBLE",
"ELSE",
"ENUM",
"EXTENDS",
"FINAL",
"FINALLY",
"FLOAT",
"FOR",
"IF",
"GOTO",
"IMPLEMENTS",
"IMPORT",
"INSTANCEOF",
"INT",
"INTERFACE",
"LONG",
"NATIVE",
"NEW",
"PACKAGE",
"PRIVATE",
"PROTECTED",
"PUBLIC",
"RETURN",
"SHORT",
"STATIC",
"STRICTFP",
"SUPER",
"SWITCH",
"SYNCHRONIZED",
"THIS",
"THROW",
"THROWS",
"TRANSIENT",
"TRY",
"VAR",
"VOID",
"VOLATILE",
"WHILE",
"DECIMAL_LITERAL",
"HEX_LITERAL",
"OCT_LITERAL",
"BINARY_LITERAL",
"FLOAT_LITERAL",
"HEX_FLOAT_LITERAL",
"BOOL_LITERAL",
"CHAR_LITERAL",
"STRING_LITERAL",
"NULL_LITERAL",
"LPAREN",
"RPAREN",
"LBRACE",
"RBRACE",
"LBRACK",
"RBRACK",
"SEMI",
"COMMA",
"DOT",
"ASSIGN",
"GT",
"LT",
"BANG",
"TILDE",
"QUESTION",
"COLON",
"EQUAL",
"LE",
"GE",
"NOTEQUAL",
"AND",
"OR",
"INC",
"DEC",
"ADD",
"SUB",
"MUL",
"DIV",
"BITAND",
"BITOR",
"CARET",
"MOD",
"ADD_ASSIGN",
"SUB_ASSIGN",
"MUL_ASSIGN",
"DIV_ASSIGN",
"AND_ASSIGN",
"OR_ASSIGN",
"XOR_ASSIGN",
"MOD_ASSIGN",
"LSHIFT_ASSIGN",
"RSHIFT_ASSIGN",
"URSHIFT_ASSIGN",
"ARROW",
"COLONCOLON",
"AT",
"ELLIPSIS",
"WS",
"BLOCK_COMMENT",
"LINE_COMMENT",
"IDENTIFIER",
"ExponentPart",
"EscapeSequence",
"HexDigits",
"HexDigit",
"Digits",
"LetterOrDigit",
"Letter"
};
}
private static String[] makeLiteralNames() {
return new String[] {
null,
"'abstract'",
"'assert'",
"'boolean'",
"'break'",
"'byte'",
"'case'",
"'catch'",
"'char'",
"'class'",
"'const'",
"'continue'",
"'default'",
"'do'",
"'double'",
"'else'",
"'enum'",
"'extends'",
"'final'",
"'finally'",
"'float'",
"'for'",
"'if'",
"'goto'",
"'implements'",
"'import'",
"'instanceof'",
"'int'",
"'interface'",
"'long'",
"'native'",
"'new'",
"'package'",
"'private'",
"'protected'",
"'public'",
"'return'",
"'short'",
"'static'",
"'strictfp'",
"'super'",
"'switch'",
"'synchronized'",
"'this'",
"'throw'",
"'throws'",
"'transient'",
"'try'",
"'var'",
"'void'",
"'volatile'",
"'while'",
null,
null,
null,
null,
null,
null,
null,
null,
null,
"'null'",
"'('",
"')'",
"'{'",
"'}'",
"'['",
"']'",
"';'",
"','",
"'.'",
"'='",
"'>'",
"'<'",
"'!'",
"'~'",
"'?'",
"':'",
"'=='",
"'<='",
"'>='",
"'!='",
"'&&'",
"'||'",
"'++'",
"'--'",
"'+'",
"'-'",
"'*'",
"'/'",
"'&'",
"'|'",
"'^'",
"'%'",
"'+='",
"'-='",
"'*='",
"'/='",
"'&='",
"'|='",
"'^='",
"'%='",
"'<<='",
"'>>='",
"'>>>='",
"'->'",
"'::'",
"'@'",
"'...'"
};
}
private static String[] makeSymbolicNames() {
return new String[] {
null,
"ABSTRACT",
"ASSERT",
"BOOLEAN",
"BREAK",
"BYTE",
"CASE",
"CATCH",
"CHAR",
"CLASS",
"CONST",
"CONTINUE",
"DEFAULT",
"DO",
"DOUBLE",
"ELSE",
"ENUM",
"EXTENDS",
"FINAL",
"FINALLY",
"FLOAT",
"FOR",
"IF",
"GOTO",
"IMPLEMENTS",
"IMPORT",
"INSTANCEOF",
"INT",
"INTERFACE",
"LONG",
"NATIVE",
"NEW",
"PACKAGE",
"PRIVATE",
"PROTECTED",
"PUBLIC",
"RETURN",
"SHORT",
"STATIC",
"STRICTFP",
"SUPER",
"SWITCH",
"SYNCHRONIZED",
"THIS",
"THROW",
"THROWS",
"TRANSIENT",
"TRY",
"VAR",
"VOID",
"VOLATILE",
"WHILE",
"DECIMAL_LITERAL",
"HEX_LITERAL",
"OCT_LITERAL",
"BINARY_LITERAL",
"FLOAT_LITERAL",
"HEX_FLOAT_LITERAL",
"BOOL_LITERAL",
"CHAR_LITERAL",
"STRING_LITERAL",
"NULL_LITERAL",
"LPAREN",
"RPAREN",
"LBRACE",
"RBRACE",
"LBRACK",
"RBRACK",
"SEMI",
"COMMA",
"DOT",
"ASSIGN",
"GT",
"LT",
"BANG",
"TILDE",
"QUESTION",
"COLON",
"EQUAL",
"LE",
"GE",
"NOTEQUAL",
"AND",
"OR",
"INC",
"DEC",
"ADD",
"SUB",
"MUL",
"DIV",
"BITAND",
"BITOR",
"CARET",
"MOD",
"ADD_ASSIGN",
"SUB_ASSIGN",
"MUL_ASSIGN",
"DIV_ASSIGN",
"AND_ASSIGN",
"OR_ASSIGN",
"XOR_ASSIGN",
"MOD_ASSIGN",
"LSHIFT_ASSIGN",
"RSHIFT_ASSIGN",
"URSHIFT_ASSIGN",
"ARROW",
"COLONCOLON",
"AT",
"ELLIPSIS",
"WS",
"BLOCK_COMMENT",
"LINE_COMMENT",
"IDENTIFIER"
};
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String getGrammarFileName() {
return "JavaLexer.g4";
}
@Override
public ATN getATN() {
return _ATN;
}
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
}
File diff suppressed because it is too large Load Diff
@@ -1,23 +1,4 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavaParser.g4 by ANTLR 4.9.2
// Generated from JavaParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.java;
import org.antlr.v4.runtime.ParserRuleContext;
@@ -1514,20 +1495,6 @@ public class JavaParserBaseListener implements JavaParserListener {
@Override
public void exitArguments(JavaParser.ArgumentsContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void enterEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void exitEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
@@ -1535,6 +1502,7 @@ public class JavaParserBaseListener implements JavaParserListener {
*/
@Override
public void visitTerminal(TerminalNode node) {}
/**
* {@inheritDoc}
*
@@ -1542,4 +1510,20 @@ public class JavaParserBaseListener implements JavaParserListener {
*/
@Override
public void visitErrorNode(ErrorNode node) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void enterEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void exitEveryRule(ParserRuleContext ctx) {}
}
@@ -1,23 +1,4 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavaParser.g4 by ANTLR 4.9.2
// Generated from JavaParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.java;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
@@ -1,23 +1,4 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavaParser.g4 by ANTLR 4.9.2
// Generated from JavaParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.java;
import org.antlr.v4.runtime.tree.ParseTreeListener;
@@ -1,23 +1,4 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavaParser.g4 by ANTLR 4.9.2
// Generated from JavaParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.java;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
@@ -1,24 +1,5 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavadocLexer.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
// Generated from JavadocLexer.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.javadoc;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Lexer;
@@ -34,12 +15,6 @@ import org.antlr.v4.runtime.dfa.DFA;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class JavadocLexer extends Lexer {
static {
RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION);
}
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
public static final int NAME = 1,
NEWLINE = 2,
SPACE = 3,
@@ -52,144 +27,11 @@ public class JavadocLexer extends Lexer {
INLINE_TAG_START = 10,
BRACE_OPEN = 11,
BRACE_CLOSE = 12;
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE"};
private static String[] makeRuleNames() {
return new String[] {
"NAME",
"NEWLINE",
"SPACE",
"TEXT_CONTENT",
"AT",
"STAR",
"SLASH",
"JAVADOC_START",
"JAVADOC_END",
"INLINE_TAG_START",
"BRACE_OPEN",
"BRACE_CLOSE"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
null, null, null, null, null, "'@'", "'*'", "'/'", null, null, "'{@'", "'{'", "'}'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null,
"NAME",
"NEWLINE",
"SPACE",
"TEXT_CONTENT",
"AT",
"STAR",
"SLASH",
"JAVADOC_START",
"JAVADOC_END",
"INLINE_TAG_START",
"BRACE_OPEN",
"BRACE_CLOSE"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public JavadocLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
@Override
public String getGrammarFileName() {
return "JavadocLexer.g4";
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
public ATN getATN() {
return _ATN;
}
@Override
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
case 1:
return NEWLINE_sempred((RuleContext) _localctx, predIndex);
}
return true;
}
private boolean NEWLINE_sempred(RuleContext _localctx, int predIndex) {
switch (predIndex) {
case 0:
return _input.LA(1) != '/';
case 1:
return _input.LA(1) != '/';
case 2:
return _input.LA(1) != '/';
}
return true;
}
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\16x\b\1\4\2\t\2\4"
+ "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"
@@ -224,6 +66,31 @@ public class JavadocLexer extends Lexer {
+ "no\7,\2\2op\7\61\2\2p\24\3\2\2\2qr\7}\2\2rs\7B\2\2s\26\3\2\2\2tu\7}\2"
+ "\2u\30\3\2\2\2vw\7\177\2\2w\32\3\2\2\2\23\2\36\")+\618:>EGINSbfk\2";
public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray());
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE"};
static {
RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION);
}
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
@@ -231,4 +98,112 @@ public class JavadocLexer extends Lexer {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
public JavadocLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
private static String[] makeRuleNames() {
return new String[] {
"NAME",
"NEWLINE",
"SPACE",
"TEXT_CONTENT",
"AT",
"STAR",
"SLASH",
"JAVADOC_START",
"JAVADOC_END",
"INLINE_TAG_START",
"BRACE_OPEN",
"BRACE_CLOSE"
};
}
private static String[] makeLiteralNames() {
return new String[] {
null, null, null, null, null, "'@'", "'*'", "'/'", null, null, "'{@'", "'{'", "'}'"
};
}
private static String[] makeSymbolicNames() {
return new String[] {
null,
"NAME",
"NEWLINE",
"SPACE",
"TEXT_CONTENT",
"AT",
"STAR",
"SLASH",
"JAVADOC_START",
"JAVADOC_END",
"INLINE_TAG_START",
"BRACE_OPEN",
"BRACE_CLOSE"
};
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String getGrammarFileName() {
return "JavadocLexer.g4";
}
@Override
public ATN getATN() {
return _ATN;
}
@Override
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
case 1:
return NEWLINE_sempred((RuleContext) _localctx, predIndex);
}
return true;
}
private boolean NEWLINE_sempred(RuleContext _localctx, int predIndex) {
switch (predIndex) {
case 0:
return _input.LA(1) != '/';
case 1:
return _input.LA(1) != '/';
case 2:
return _input.LA(1) != '/';
}
return true;
}
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
}
File diff suppressed because it is too large Load Diff
@@ -1,24 +1,5 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavadocParser.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
// Generated from JavadocParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.javadoc;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ErrorNode;
@@ -339,20 +320,6 @@ public class JavadocParserBaseListener implements JavadocParserListener {
@Override
public void exitBraceText(JavadocParser.BraceTextContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void enterEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void exitEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
@@ -360,6 +327,7 @@ public class JavadocParserBaseListener implements JavadocParserListener {
*/
@Override
public void visitTerminal(TerminalNode node) {}
/**
* {@inheritDoc}
*
@@ -367,4 +335,20 @@ public class JavadocParserBaseListener implements JavadocParserListener {
*/
@Override
public void visitErrorNode(ErrorNode node) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void enterEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void exitEveryRule(ParserRuleContext ctx) {}
}
@@ -1,24 +1,5 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavadocParser.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
// Generated from JavadocParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.javadoc;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
@@ -35,221 +16,220 @@ public class JavadocParserBaseVisitor<T> extends AbstractParseTreeVisitor<T>
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDocumentation(JavadocParser.DocumentationContext context) {
return visitChildren(context);
public T visitDocumentation(JavadocParser.DocumentationContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDocumentationContent(JavadocParser.DocumentationContentContext context) {
return visitChildren(context);
public T visitDocumentationContent(JavadocParser.DocumentationContentContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitSkipWhitespace(JavadocParser.SkipWhitespaceContext context) {
return visitChildren(context);
public T visitSkipWhitespace(JavadocParser.SkipWhitespaceContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDescription(JavadocParser.DescriptionContext context) {
return visitChildren(context);
public T visitDescription(JavadocParser.DescriptionContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDescriptionLine(JavadocParser.DescriptionLineContext context) {
return visitChildren(context);
public T visitDescriptionLine(JavadocParser.DescriptionLineContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDescriptionLineStart(JavadocParser.DescriptionLineStartContext context) {
return visitChildren(context);
public T visitDescriptionLineStart(JavadocParser.DescriptionLineStartContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDescriptionLineNoSpaceNoAt(
JavadocParser.DescriptionLineNoSpaceNoAtContext context) {
return visitChildren(context);
public T visitDescriptionLineNoSpaceNoAt(JavadocParser.DescriptionLineNoSpaceNoAtContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDescriptionLineElement(JavadocParser.DescriptionLineElementContext context) {
return visitChildren(context);
public T visitDescriptionLineElement(JavadocParser.DescriptionLineElementContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDescriptionLineText(JavadocParser.DescriptionLineTextContext context) {
return visitChildren(context);
public T visitDescriptionLineText(JavadocParser.DescriptionLineTextContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitDescriptionNewline(JavadocParser.DescriptionNewlineContext context) {
return visitChildren(context);
public T visitDescriptionNewline(JavadocParser.DescriptionNewlineContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitTagSection(JavadocParser.TagSectionContext context) {
return visitChildren(context);
public T visitTagSection(JavadocParser.TagSectionContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitBlockTag(JavadocParser.BlockTagContext context) {
return visitChildren(context);
public T visitBlockTag(JavadocParser.BlockTagContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitBlockTagName(JavadocParser.BlockTagNameContext context) {
return visitChildren(context);
public T visitBlockTagName(JavadocParser.BlockTagNameContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitBlockTagContent(JavadocParser.BlockTagContentContext context) {
return visitChildren(context);
public T visitBlockTagContent(JavadocParser.BlockTagContentContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitBlockTagText(JavadocParser.BlockTagTextContext context) {
return visitChildren(context);
public T visitBlockTagText(JavadocParser.BlockTagTextContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitBlockTagTextElement(JavadocParser.BlockTagTextElementContext context) {
return visitChildren(context);
public T visitBlockTagTextElement(JavadocParser.BlockTagTextElementContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitInlineTag(JavadocParser.InlineTagContext context) {
return visitChildren(context);
public T visitInlineTag(JavadocParser.InlineTagContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitInlineTagName(JavadocParser.InlineTagNameContext context) {
return visitChildren(context);
public T visitInlineTagName(JavadocParser.InlineTagNameContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitInlineTagContent(JavadocParser.InlineTagContentContext context) {
return visitChildren(context);
public T visitInlineTagContent(JavadocParser.InlineTagContentContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitBraceExpression(JavadocParser.BraceExpressionContext context) {
return visitChildren(context);
public T visitBraceExpression(JavadocParser.BraceExpressionContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitBraceContent(JavadocParser.BraceContentContext context) {
return visitChildren(context);
public T visitBraceContent(JavadocParser.BraceContentContext ctx) {
return visitChildren(ctx);
}
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling {@link #visitChildren} on {@code
* context}.
* ctx}.
*/
@Override
public T visitBraceText(JavadocParser.BraceTextContext context) {
return visitChildren(context);
public T visitBraceText(JavadocParser.BraceTextContext ctx) {
return visitChildren(ctx);
}
}
@@ -1,24 +1,5 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavadocParser.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
// Generated from JavadocParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.javadoc;
import org.antlr.v4.runtime.tree.ParseTreeListener;
@@ -1,24 +1,5 @@
/************************************************************************************
* This file is part of AndroidIDE.
*
*
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*
**************************************************************************************/
// Generated from JavadocParser.g4 by ANTLR 4.9.2
package com.itsaky.androidide.antlr4.javadoc;
// Generated from JavadocParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.javadoc;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,384 +1,406 @@
// Generated from UnicodeClasses.g4 by ANTLR 4.9.2
// Generated from UnicodeClasses.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.kotlin;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.RuntimeMetaData;
import org.antlr.v4.runtime.Vocabulary;
import org.antlr.v4.runtime.VocabularyImpl;
import org.antlr.v4.runtime.atn.ATN;
import org.antlr.v4.runtime.atn.ATNDeserializer;
import org.antlr.v4.runtime.atn.LexerATNSimulator;
import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class UnicodeClasses extends Lexer {
static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); }
public static final int UNICODE_CLASS_LL = 1,
UNICODE_CLASS_LM = 2,
UNICODE_CLASS_LO = 3,
UNICODE_CLASS_LT = 4,
UNICODE_CLASS_LU = 5,
UNICODE_CLASS_ND = 6,
UNICODE_CLASS_NL = 7;
public static final String[] ruleNames = makeRuleNames();
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated public static final String[] tokenNames;
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\t\37\b\1\4\2\t\2"
+ "\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\3\2\3\2\3\3\3\3\3\4\3"
+ "\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\2\2\t\3\3\5\4\7\5\t\6\13\7\r\b\17\t"
+ "\3\2\t\u0248\2c|\u00b7\u00b7\u00e1\u00f8\u00fa\u0101\u0103\u0103\u0105"
+ "\u0105\u0107\u0107\u0109\u0109\u010b\u010b\u010d\u010d\u010f\u010f\u0111"
+ "\u0111\u0113\u0113\u0115\u0115\u0117\u0117\u0119\u0119\u011b\u011b\u011d"
+ "\u011d\u011f\u011f\u0121\u0121\u0123\u0123\u0125\u0125\u0127\u0127\u0129"
+ "\u0129\u012b\u012b\u012d\u012d\u012f\u012f\u0131\u0131\u0133\u0133\u0135"
+ "\u0135\u0137\u0137\u0139\u013a\u013c\u013c\u013e\u013e\u0140\u0140\u0142"
+ "\u0142\u0144\u0144\u0146\u0146\u0148\u0148\u014a\u014b\u014d\u014d\u014f"
+ "\u014f\u0151\u0151\u0153\u0153\u0155\u0155\u0157\u0157\u0159\u0159\u015b"
+ "\u015b\u015d\u015d\u015f\u015f\u0161\u0161\u0163\u0163\u0165\u0165\u0167"
+ "\u0167\u0169\u0169\u016b\u016b\u016d\u016d\u016f\u016f\u0171\u0171\u0173"
+ "\u0173\u0175\u0175\u0177\u0177\u0179\u0179\u017c\u017c\u017e\u017e\u0180"
+ "\u0182\u0185\u0185\u0187\u0187\u018a\u018a\u018e\u018f\u0194\u0194\u0197"
+ "\u0197\u019b\u019d\u01a0\u01a0\u01a3\u01a3\u01a5\u01a5\u01a7\u01a7\u01aa"
+ "\u01aa\u01ac\u01ad\u01af\u01af\u01b2\u01b2\u01b6\u01b6\u01b8\u01b8\u01bb"
+ "\u01bc\u01bf\u01c1\u01c8\u01c8\u01cb\u01cb\u01ce\u01ce\u01d0\u01d0\u01d2"
+ "\u01d2\u01d4\u01d4\u01d6\u01d6\u01d8\u01d8\u01da\u01da\u01dc\u01dc\u01de"
+ "\u01df\u01e1\u01e1\u01e3\u01e3\u01e5\u01e5\u01e7\u01e7\u01e9\u01e9\u01eb"
+ "\u01eb\u01ed\u01ed\u01ef\u01ef\u01f1\u01f2\u01f5\u01f5\u01f7\u01f7\u01fb"
+ "\u01fb\u01fd\u01fd\u01ff\u01ff\u0201\u0201\u0203\u0203\u0205\u0205\u0207"
+ "\u0207\u0209\u0209\u020b\u020b\u020d\u020d\u020f\u020f\u0211\u0211\u0213"
+ "\u0213\u0215\u0215\u0217\u0217\u0219\u0219\u021b\u021b\u021d\u021d\u021f"
+ "\u021f\u0221\u0221\u0223\u0223\u0225\u0225\u0227\u0227\u0229\u0229\u022b"
+ "\u022b\u022d\u022d\u022f\u022f\u0231\u0231\u0233\u0233\u0235\u023b\u023e"
+ "\u023e\u0241\u0242\u0244\u0244\u0249\u0249\u024b\u024b\u024d\u024d\u024f"
+ "\u024f\u0251\u0295\u0297\u02b1\u0373\u0373\u0375\u0375\u0379\u0379\u037d"
+ "\u037f\u0392\u0392\u03ae\u03d0\u03d2\u03d3\u03d7\u03d9\u03db\u03db\u03dd"
+ "\u03dd\u03df\u03df\u03e1\u03e1\u03e3\u03e3\u03e5\u03e5\u03e7\u03e7\u03e9"
+ "\u03e9\u03eb\u03eb\u03ed\u03ed\u03ef\u03ef\u03f1\u03f5\u03f7\u03f7\u03fa"
+ "\u03fa\u03fd\u03fe\u0432\u0461\u0463\u0463\u0465\u0465\u0467\u0467\u0469"
+ "\u0469\u046b\u046b\u046d\u046d\u046f\u046f\u0471\u0471\u0473\u0473\u0475"
+ "\u0475\u0477\u0477\u0479\u0479\u047b\u047b\u047d\u047d\u047f\u047f\u0481"
+ "\u0481\u0483\u0483\u048d\u048d\u048f\u048f\u0491\u0491\u0493\u0493\u0495"
+ "\u0495\u0497\u0497\u0499\u0499\u049b\u049b\u049d\u049d\u049f\u049f\u04a1"
+ "\u04a1\u04a3\u04a3\u04a5\u04a5\u04a7\u04a7\u04a9\u04a9\u04ab\u04ab\u04ad"
+ "\u04ad\u04af\u04af\u04b1\u04b1\u04b3\u04b3\u04b5\u04b5\u04b7\u04b7\u04b9"
+ "\u04b9\u04bb\u04bb\u04bd\u04bd\u04bf\u04bf\u04c1\u04c1\u04c4\u04c4\u04c6"
+ "\u04c6\u04c8\u04c8\u04ca\u04ca\u04cc\u04cc\u04ce\u04ce\u04d0\u04d1\u04d3"
+ "\u04d3\u04d5\u04d5\u04d7\u04d7\u04d9\u04d9\u04db\u04db\u04dd\u04dd\u04df"
+ "\u04df\u04e1\u04e1\u04e3\u04e3\u04e5\u04e5\u04e7\u04e7\u04e9\u04e9\u04eb"
+ "\u04eb\u04ed\u04ed\u04ef\u04ef\u04f1\u04f1\u04f3\u04f3\u04f5\u04f5\u04f7"
+ "\u04f7\u04f9\u04f9\u04fb\u04fb\u04fd\u04fd\u04ff\u04ff\u0501\u0501\u0503"
+ "\u0503\u0505\u0505\u0507\u0507\u0509\u0509\u050b\u050b\u050d\u050d\u050f"
+ "\u050f\u0511\u0511\u0513\u0513\u0515\u0515\u0517\u0517\u0519\u0519\u051b"
+ "\u051b\u051d\u051d\u051f\u051f\u0521\u0521\u0523\u0523\u0525\u0525\u0527"
+ "\u0527\u0529\u0529\u0563\u0589\u1d02\u1d2d\u1d6d\u1d79\u1d7b\u1d9c\u1e03"
+ "\u1e03\u1e05\u1e05\u1e07\u1e07\u1e09\u1e09\u1e0b\u1e0b\u1e0d\u1e0d\u1e0f"
+ "\u1e0f\u1e11\u1e11\u1e13\u1e13\u1e15\u1e15\u1e17\u1e17\u1e19\u1e19\u1e1b"
+ "\u1e1b\u1e1d\u1e1d\u1e1f\u1e1f\u1e21\u1e21\u1e23\u1e23\u1e25\u1e25\u1e27"
+ "\u1e27\u1e29\u1e29\u1e2b\u1e2b\u1e2d\u1e2d\u1e2f\u1e2f\u1e31\u1e31\u1e33"
+ "\u1e33\u1e35\u1e35\u1e37\u1e37\u1e39\u1e39\u1e3b\u1e3b\u1e3d\u1e3d\u1e3f"
+ "\u1e3f\u1e41\u1e41\u1e43\u1e43\u1e45\u1e45\u1e47\u1e47\u1e49\u1e49\u1e4b"
+ "\u1e4b\u1e4d\u1e4d\u1e4f\u1e4f\u1e51\u1e51\u1e53\u1e53\u1e55\u1e55\u1e57"
+ "\u1e57\u1e59\u1e59\u1e5b\u1e5b\u1e5d\u1e5d\u1e5f\u1e5f\u1e61\u1e61\u1e63"
+ "\u1e63\u1e65\u1e65\u1e67\u1e67\u1e69\u1e69\u1e6b\u1e6b\u1e6d\u1e6d\u1e6f"
+ "\u1e6f\u1e71\u1e71\u1e73\u1e73\u1e75\u1e75\u1e77\u1e77\u1e79\u1e79\u1e7b"
+ "\u1e7b\u1e7d\u1e7d\u1e7f\u1e7f\u1e81\u1e81\u1e83\u1e83\u1e85\u1e85\u1e87"
+ "\u1e87\u1e89\u1e89\u1e8b\u1e8b\u1e8d\u1e8d\u1e8f\u1e8f\u1e91\u1e91\u1e93"
+ "\u1e93\u1e95\u1e95\u1e97\u1e9f\u1ea1\u1ea1\u1ea3\u1ea3\u1ea5\u1ea5\u1ea7"
+ "\u1ea7\u1ea9\u1ea9\u1eab\u1eab\u1ead\u1ead\u1eaf\u1eaf\u1eb1\u1eb1\u1eb3"
+ "\u1eb3\u1eb5\u1eb5\u1eb7\u1eb7\u1eb9\u1eb9\u1ebb\u1ebb\u1ebd\u1ebd\u1ebf"
+ "\u1ebf\u1ec1\u1ec1\u1ec3\u1ec3\u1ec5\u1ec5\u1ec7\u1ec7\u1ec9\u1ec9\u1ecb"
+ "\u1ecb\u1ecd\u1ecd\u1ecf\u1ecf\u1ed1\u1ed1\u1ed3\u1ed3\u1ed5\u1ed5\u1ed7"
+ "\u1ed7\u1ed9\u1ed9\u1edb\u1edb\u1edd\u1edd\u1edf\u1edf\u1ee1\u1ee1\u1ee3"
+ "\u1ee3\u1ee5\u1ee5\u1ee7\u1ee7\u1ee9\u1ee9\u1eeb\u1eeb\u1eed\u1eed\u1eef"
+ "\u1eef\u1ef1\u1ef1\u1ef3\u1ef3\u1ef5\u1ef5\u1ef7\u1ef7\u1ef9\u1ef9\u1efb"
+ "\u1efb\u1efd\u1efd\u1eff\u1eff\u1f01\u1f09\u1f12\u1f17\u1f22\u1f29\u1f32"
+ "\u1f39\u1f42\u1f47\u1f52\u1f59\u1f62\u1f69\u1f72\u1f7f\u1f82\u1f89\u1f92"
+ "\u1f99\u1fa2\u1fa9\u1fb2\u1fb6\u1fb8\u1fb9\u1fc0\u1fc0\u1fc4\u1fc6\u1fc8"
+ "\u1fc9\u1fd2\u1fd5\u1fd8\u1fd9\u1fe2\u1fe9\u1ff4\u1ff6\u1ff8\u1ff9\u210c"
+ "\u210c\u2110\u2111\u2115\u2115\u2131\u2131\u2136\u2136\u213b\u213b\u213e"
+ "\u213f\u2148\u214b\u2150\u2150\u2186\u2186\u2c32\u2c60\u2c63\u2c63\u2c67"
+ "\u2c68\u2c6a\u2c6a\u2c6c\u2c6c\u2c6e\u2c6e\u2c73\u2c73\u2c75\u2c76\u2c78"
+ "\u2c7d\u2c83\u2c83\u2c85\u2c85\u2c87\u2c87\u2c89\u2c89\u2c8b\u2c8b\u2c8d"
+ "\u2c8d\u2c8f\u2c8f\u2c91\u2c91\u2c93\u2c93\u2c95\u2c95\u2c97\u2c97\u2c99"
+ "\u2c99\u2c9b\u2c9b\u2c9d\u2c9d\u2c9f\u2c9f\u2ca1\u2ca1\u2ca3\u2ca3\u2ca5"
+ "\u2ca5\u2ca7\u2ca7\u2ca9\u2ca9\u2cab\u2cab\u2cad\u2cad\u2caf\u2caf\u2cb1"
+ "\u2cb1\u2cb3\u2cb3\u2cb5\u2cb5\u2cb7\u2cb7\u2cb9\u2cb9\u2cbb\u2cbb\u2cbd"
+ "\u2cbd\u2cbf\u2cbf\u2cc1\u2cc1\u2cc3\u2cc3\u2cc5\u2cc5\u2cc7\u2cc7\u2cc9"
+ "\u2cc9\u2ccb\u2ccb\u2ccd\u2ccd\u2ccf\u2ccf\u2cd1\u2cd1\u2cd3\u2cd3\u2cd5"
+ "\u2cd5\u2cd7\u2cd7\u2cd9\u2cd9\u2cdb\u2cdb\u2cdd\u2cdd\u2cdf\u2cdf\u2ce1"
+ "\u2ce1\u2ce3\u2ce3\u2ce5\u2ce6\u2cee\u2cee\u2cf0\u2cf0\u2cf5\u2cf5\u2d02"
+ "\u2d27\u2d29\u2d29\u2d2f\u2d2f\ua643\ua643\ua645\ua645\ua647\ua647\ua649"
+ "\ua649\ua64b\ua64b\ua64d\ua64d\ua64f\ua64f\ua651\ua651\ua653\ua653\ua655"
+ "\ua655\ua657\ua657\ua659\ua659\ua65b\ua65b\ua65d\ua65d\ua65f\ua65f\ua661"
+ "\ua661\ua663\ua663\ua665\ua665\ua667\ua667\ua669\ua669\ua66b\ua66b\ua66d"
+ "\ua66d\ua66f\ua66f\ua683\ua683\ua685\ua685\ua687\ua687\ua689\ua689\ua68b"
+ "\ua68b\ua68d\ua68d\ua68f\ua68f\ua691\ua691\ua693\ua693\ua695\ua695\ua697"
+ "\ua697\ua699\ua699\ua725\ua725\ua727\ua727\ua729\ua729\ua72b\ua72b\ua72d"
+ "\ua72d\ua72f\ua72f\ua731\ua733\ua735\ua735\ua737\ua737\ua739\ua739\ua73b"
+ "\ua73b\ua73d\ua73d\ua73f\ua73f\ua741\ua741\ua743\ua743\ua745\ua745\ua747"
+ "\ua747\ua749\ua749\ua74b\ua74b\ua74d\ua74d\ua74f\ua74f\ua751\ua751\ua753"
+ "\ua753\ua755\ua755\ua757\ua757\ua759\ua759\ua75b\ua75b\ua75d\ua75d\ua75f"
+ "\ua75f\ua761\ua761\ua763\ua763\ua765\ua765\ua767\ua767\ua769\ua769\ua76b"
+ "\ua76b\ua76d\ua76d\ua76f\ua76f\ua771\ua771\ua773\ua77a\ua77c\ua77c\ua77e"
+ "\ua77e\ua781\ua781\ua783\ua783\ua785\ua785\ua787\ua787\ua789\ua789\ua78e"
+ "\ua78e\ua790\ua790\ua793\ua793\ua795\ua795\ua7a3\ua7a3\ua7a5\ua7a5\ua7a7"
+ "\ua7a7\ua7a9\ua7a9\ua7ab\ua7ab\ua7fc\ua7fc\ufb02\ufb08\ufb15\ufb19\uff43"
+ "\uff5c\65\2\u02b2\u02c3\u02c8\u02d3\u02e2\u02e6\u02ee\u02ee\u02f0\u02f0"
+ "\u0376\u0376\u037c\u037c\u055b\u055b\u0642\u0642\u06e7\u06e8\u07f6\u07f7"
+ "\u07fc\u07fc\u081c\u081c\u0826\u0826\u082a\u082a\u0973\u0973\u0e48\u0e48"
+ "\u0ec8\u0ec8\u10fe\u10fe\u17d9\u17d9\u1845\u1845\u1aa9\u1aa9\u1c7a\u1c7f"
+ "\u1d2e\u1d6c\u1d7a\u1d7a\u1d9d\u1dc1\u2073\u2073\u2081\u2081\u2092\u209e"
+ "\u2c7e\u2c7f\u2d71\u2d71\u2e31\u2e31\u3007\u3007\u3033\u3037\u303d\u303d"
+ "\u309f\u30a0\u30fe\u3100\ua017\ua017\ua4fa\ua4ff\ua60e\ua60e\ua681\ua681"
+ "\ua719\ua721\ua772\ua772\ua78a\ua78a\ua7fa\ua7fb\ua9d1\ua9d1\uaa72\uaa72"
+ "\uaadf\uaadf\uaaf5\uaaf6\uff72\uff72\uffa0\uffa1\u0123\2\u00ac\u00ac\u00bc"
+ "\u00bc\u01bd\u01bd\u01c2\u01c5\u0296\u0296\u05d2\u05ec\u05f2\u05f4\u0622"
+ "\u0641\u0643\u064c\u0670\u0671\u0673\u06d5\u06d7\u06d7\u06f0\u06f1\u06fc"
+ "\u06fe\u0701\u0701\u0712\u0712\u0714\u0731\u074f\u07a7\u07b3\u07b3\u07cc"
+ "\u07ec\u0802\u0817\u0842\u085a\u08a2\u08a2\u08a4\u08ae\u0906\u093b\u093f"
+ "\u093f\u0952\u0952\u095a\u0963\u0974\u0979\u097b\u0981\u0987\u098e\u0991"
+ "\u0992\u0995\u09aa\u09ac\u09b2\u09b4\u09b4\u09b8\u09bb\u09bf\u09bf\u09d0"
+ "\u09d0\u09de\u09df\u09e1\u09e3\u09f2\u09f3\u0a07\u0a0c\u0a11\u0a12\u0a15"
+ "\u0a2a\u0a2c\u0a32\u0a34\u0a35\u0a37\u0a38\u0a3a\u0a3b\u0a5b\u0a5e\u0a60"
+ "\u0a60\u0a74\u0a76\u0a87\u0a8f\u0a91\u0a93\u0a95\u0aaa\u0aac\u0ab2\u0ab4"
+ "\u0ab5\u0ab7\u0abb\u0abf\u0abf\u0ad2\u0ad2\u0ae2\u0ae3\u0b07\u0b0e\u0b11"
+ "\u0b12\u0b15\u0b2a\u0b2c\u0b32\u0b34\u0b35\u0b37\u0b3b\u0b3f\u0b3f\u0b5e"
+ "\u0b5f\u0b61\u0b63\u0b73\u0b73\u0b85\u0b85\u0b87\u0b8c\u0b90\u0b92\u0b94"
+ "\u0b97\u0b9b\u0b9c\u0b9e\u0b9e\u0ba0\u0ba1\u0ba5\u0ba6\u0baa\u0bac\u0bb0"
+ "\u0bbb\u0bd2\u0bd2\u0c07\u0c0e\u0c10\u0c12\u0c14\u0c2a\u0c2c\u0c35\u0c37"
+ "\u0c3b\u0c3f\u0c3f\u0c5a\u0c5b\u0c62\u0c63\u0c87\u0c8e\u0c90\u0c92\u0c94"
+ "\u0caa\u0cac\u0cb5\u0cb7\u0cbb\u0cbf\u0cbf\u0ce0\u0ce0\u0ce2\u0ce3\u0cf3"
+ "\u0cf4\u0d07\u0d0e\u0d10\u0d12\u0d14\u0d3c\u0d3f\u0d3f\u0d50\u0d50\u0d62"
+ "\u0d63\u0d7c\u0d81\u0d87\u0d98\u0d9c\u0db3\u0db5\u0dbd\u0dbf\u0dbf\u0dc2"
+ "\u0dc8\u0e03\u0e32\u0e34\u0e35\u0e42\u0e47\u0e83\u0e84\u0e86\u0e86\u0e89"
+ "\u0e8a\u0e8c\u0e8c\u0e8f\u0e8f\u0e96\u0e99\u0e9b\u0ea1\u0ea3\u0ea5\u0ea7"
+ "\u0ea7\u0ea9\u0ea9\u0eac\u0ead\u0eaf\u0eb2\u0eb4\u0eb5\u0ebf\u0ebf\u0ec2"
+ "\u0ec6\u0ede\u0ee1\u0f02\u0f02\u0f42\u0f49\u0f4b\u0f6e\u0f8a\u0f8e\u1002"
+ "\u102c\u1041\u1041\u1052\u1057\u105c\u105f\u1063\u1063\u1067\u1068\u1070"
+ "\u1072\u1077\u1083\u1090\u1090\u10d2\u10fc\u10ff\u124a\u124c\u124f\u1252"
+ "\u1258\u125a\u125a\u125c\u125f\u1262\u128a\u128c\u128f\u1292\u12b2\u12b4"
+ "\u12b7\u12ba\u12c0\u12c2\u12c2\u12c4\u12c7\u12ca\u12d8\u12da\u1312\u1314"
+ "\u1317\u131a\u135c\u1382\u1391\u13a2\u13f6\u1403\u166e\u1671\u1681\u1683"
+ "\u169c\u16a2\u16ec\u1702\u170e\u1710\u1713\u1722\u1733\u1742\u1753\u1762"
+ "\u176e\u1770\u1772\u1782\u17b5\u17de\u17de\u1822\u1844\u1846\u1879\u1882"
+ "\u18aa\u18ac\u18ac\u18b2\u18f7\u1902\u191e\u1952\u196f\u1972\u1976\u1982"
+ "\u19ad\u19c3\u19c9\u1a02\u1a18\u1a22\u1a56\u1b07\u1b35\u1b47\u1b4d\u1b85"
+ "\u1ba2\u1bb0\u1bb1\u1bbc\u1be7\u1c02\u1c25\u1c4f\u1c51\u1c5c\u1c79\u1ceb"
+ "\u1cee\u1cf0\u1cf3\u1cf7\u1cf8\u2137\u213a\u2d32\u2d69\u2d82\u2d98\u2da2"
+ "\u2da8\u2daa\u2db0\u2db2\u2db8\u2dba\u2dc0\u2dc2\u2dc8\u2dca\u2dd0\u2dd2"
+ "\u2dd8\u2dda\u2de0\u3008\u3008\u303e\u303e\u3043\u3098\u30a1\u30a1\u30a3"
+ "\u30fc\u3101\u3101\u3107\u312f\u3133\u3190\u31a2\u31bc\u31f2\u3201\u3402"
+ "\u3402\u4db7\u4db7\u4e02\u4e02\u9fce\u9fce\ua002\ua016\ua018\ua48e\ua4d2"
+ "\ua4f9\ua502\ua60d\ua612\ua621\ua62c\ua62d\ua670\ua670\ua6a2\ua6e7\ua7fd"
+ "\ua803\ua805\ua807\ua809\ua80c\ua80e\ua824\ua842\ua875\ua884\ua8b5\ua8f4"
+ "\ua8f9\ua8fd\ua8fd\ua90c\ua927\ua932\ua948\ua962\ua97e\ua986\ua9b4\uaa02"
+ "\uaa2a\uaa42\uaa44\uaa46\uaa4d\uaa62\uaa71\uaa73\uaa78\uaa7c\uaa7c\uaa82"
+ "\uaab1\uaab3\uaab3\uaab7\uaab8\uaabb\uaabf\uaac2\uaac2\uaac4\uaac4\uaadd"
+ "\uaade\uaae2\uaaec\uaaf4\uaaf4\uab03\uab08\uab0b\uab10\uab13\uab18\uab22"
+ "\uab28\uab2a\uab30\uabc2\uabe4\uac02\uac02\ud7a5\ud7a5\ud7b2\ud7c8\ud7cd"
+ "\ud7fd\uf902\ufa6f\ufa72\ufadb\ufb1f\ufb1f\ufb21\ufb2a\ufb2c\ufb38\ufb3a"
+ "\ufb3e\ufb40\ufb40\ufb42\ufb43\ufb45\ufb46\ufb48\ufbb3\ufbd5\ufd3f\ufd52"
+ "\ufd91\ufd94\ufdc9\ufdf2\ufdfd\ufe72\ufe76\ufe78\ufefe\uff68\uff71\uff73"
+ "\uff9f\uffa2\uffc0\uffc4\uffc9\uffcc\uffd1\uffd4\uffd9\uffdc\uffde\f\2"
+ "\u01c7\u01c7\u01ca\u01ca\u01cd\u01cd\u01f4\u01f4\u1f8a\u1f91\u1f9a\u1fa1"
+ "\u1faa\u1fb1\u1fbe\u1fbe\u1fce\u1fce\u1ffe\u1ffe\u0242\2C\\\u00c2\u00d8"
+ "\u00da\u00e0\u0102\u0102\u0104\u0104\u0106\u0106\u0108\u0108\u010a\u010a"
+ "\u010c\u010c\u010e\u010e\u0110\u0110\u0112\u0112\u0114\u0114\u0116\u0116"
+ "\u0118\u0118\u011a\u011a\u011c\u011c\u011e\u011e\u0120\u0120\u0122\u0122"
+ "\u0124\u0124\u0126\u0126\u0128\u0128\u012a\u012a\u012c\u012c\u012e\u012e"
+ "\u0130\u0130\u0132\u0132\u0134\u0134\u0136\u0136\u0138\u0138\u013b\u013b"
+ "\u013d\u013d\u013f\u013f\u0141\u0141\u0143\u0143\u0145\u0145\u0147\u0147"
+ "\u0149\u0149\u014c\u014c\u014e\u014e\u0150\u0150\u0152\u0152\u0154\u0154"
+ "\u0156\u0156\u0158\u0158\u015a\u015a\u015c\u015c\u015e\u015e\u0160\u0160"
+ "\u0162\u0162\u0164\u0164\u0166\u0166\u0168\u0168\u016a\u016a\u016c\u016c"
+ "\u016e\u016e\u0170\u0170\u0172\u0172\u0174\u0174\u0176\u0176\u0178\u0178"
+ "\u017a\u017b\u017d\u017d\u017f\u017f\u0183\u0184\u0186\u0186\u0188\u0189"
+ "\u018b\u018d\u0190\u0193\u0195\u0196\u0198\u019a\u019e\u019f\u01a1\u01a2"
+ "\u01a4\u01a4\u01a6\u01a6\u01a8\u01a9\u01ab\u01ab\u01ae\u01ae\u01b0\u01b1"
+ "\u01b3\u01b5\u01b7\u01b7\u01b9\u01ba\u01be\u01be\u01c6\u01c6\u01c9\u01c9"
+ "\u01cc\u01cc\u01cf\u01cf\u01d1\u01d1\u01d3\u01d3\u01d5\u01d5\u01d7\u01d7"
+ "\u01d9\u01d9\u01db\u01db\u01dd\u01dd\u01e0\u01e0\u01e2\u01e2\u01e4\u01e4"
+ "\u01e6\u01e6\u01e8\u01e8\u01ea\u01ea\u01ec\u01ec\u01ee\u01ee\u01f0\u01f0"
+ "\u01f3\u01f3\u01f6\u01f6\u01f8\u01fa\u01fc\u01fc\u01fe\u01fe\u0200\u0200"
+ "\u0202\u0202\u0204\u0204\u0206\u0206\u0208\u0208\u020a\u020a\u020c\u020c"
+ "\u020e\u020e\u0210\u0210\u0212\u0212\u0214\u0214\u0216\u0216\u0218\u0218"
+ "\u021a\u021a\u021c\u021c\u021e\u021e\u0220\u0220\u0222\u0222\u0224\u0224"
+ "\u0226\u0226\u0228\u0228\u022a\u022a\u022c\u022c\u022e\u022e\u0230\u0230"
+ "\u0232\u0232\u0234\u0234\u023c\u023d\u023f\u0240\u0243\u0243\u0245\u0248"
+ "\u024a\u024a\u024c\u024c\u024e\u024e\u0250\u0250\u0372\u0372\u0374\u0374"
+ "\u0378\u0378\u0388\u0388\u038a\u038c\u038e\u038e\u0390\u0391\u0393\u03a3"
+ "\u03a5\u03ad\u03d1\u03d1\u03d4\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de"
+ "\u03e0\u03e0\u03e2\u03e2\u03e4\u03e4\u03e6\u03e6\u03e8\u03e8\u03ea\u03ea"
+ "\u03ec\u03ec\u03ee\u03ee\u03f0\u03f0\u03f6\u03f6\u03f9\u03f9\u03fb\u03fc"
+ "\u03ff\u0431\u0462\u0462\u0464\u0464\u0466\u0466\u0468\u0468\u046a\u046a"
+ "\u046c\u046c\u046e\u046e\u0470\u0470\u0472\u0472\u0474\u0474\u0476\u0476"
+ "\u0478\u0478\u047a\u047a\u047c\u047c\u047e\u047e\u0480\u0480\u0482\u0482"
+ "\u048c\u048c\u048e\u048e\u0490\u0490\u0492\u0492\u0494\u0494\u0496\u0496"
+ "\u0498\u0498\u049a\u049a\u049c\u049c\u049e\u049e\u04a0\u04a0\u04a2\u04a2"
+ "\u04a4\u04a4\u04a6\u04a6\u04a8\u04a8\u04aa\u04aa\u04ac\u04ac\u04ae\u04ae"
+ "\u04b0\u04b0\u04b2\u04b2\u04b4\u04b4\u04b6\u04b6\u04b8\u04b8\u04ba\u04ba"
+ "\u04bc\u04bc\u04be\u04be\u04c0\u04c0\u04c2\u04c3\u04c5\u04c5\u04c7\u04c7"
+ "\u04c9\u04c9\u04cb\u04cb\u04cd\u04cd\u04cf\u04cf\u04d2\u04d2\u04d4\u04d4"
+ "\u04d6\u04d6\u04d8\u04d8\u04da\u04da\u04dc\u04dc\u04de\u04de\u04e0\u04e0"
+ "\u04e2\u04e2\u04e4\u04e4\u04e6\u04e6\u04e8\u04e8\u04ea\u04ea\u04ec\u04ec"
+ "\u04ee\u04ee\u04f0\u04f0\u04f2\u04f2\u04f4\u04f4\u04f6\u04f6\u04f8\u04f8"
+ "\u04fa\u04fa\u04fc\u04fc\u04fe\u04fe\u0500\u0500\u0502\u0502\u0504\u0504"
+ "\u0506\u0506\u0508\u0508\u050a\u050a\u050c\u050c\u050e\u050e\u0510\u0510"
+ "\u0512\u0512\u0514\u0514\u0516\u0516\u0518\u0518\u051a\u051a\u051c\u051c"
+ "\u051e\u051e\u0520\u0520\u0522\u0522\u0524\u0524\u0526\u0526\u0528\u0528"
+ "\u0533\u0558\u10a2\u10c7\u10c9\u10c9\u10cf\u10cf\u1e02\u1e02\u1e04\u1e04"
+ "\u1e06\u1e06\u1e08\u1e08\u1e0a\u1e0a\u1e0c\u1e0c\u1e0e\u1e0e\u1e10\u1e10"
+ "\u1e12\u1e12\u1e14\u1e14\u1e16\u1e16\u1e18\u1e18\u1e1a\u1e1a\u1e1c\u1e1c"
+ "\u1e1e\u1e1e\u1e20\u1e20\u1e22\u1e22\u1e24\u1e24\u1e26\u1e26\u1e28\u1e28"
+ "\u1e2a\u1e2a\u1e2c\u1e2c\u1e2e\u1e2e\u1e30\u1e30\u1e32\u1e32\u1e34\u1e34"
+ "\u1e36\u1e36\u1e38\u1e38\u1e3a\u1e3a\u1e3c\u1e3c\u1e3e\u1e3e\u1e40\u1e40"
+ "\u1e42\u1e42\u1e44\u1e44\u1e46\u1e46\u1e48\u1e48\u1e4a\u1e4a\u1e4c\u1e4c"
+ "\u1e4e\u1e4e\u1e50\u1e50\u1e52\u1e52\u1e54\u1e54\u1e56\u1e56\u1e58\u1e58"
+ "\u1e5a\u1e5a\u1e5c\u1e5c\u1e5e\u1e5e\u1e60\u1e60\u1e62\u1e62\u1e64\u1e64"
+ "\u1e66\u1e66\u1e68\u1e68\u1e6a\u1e6a\u1e6c\u1e6c\u1e6e\u1e6e\u1e70\u1e70"
+ "\u1e72\u1e72\u1e74\u1e74\u1e76\u1e76\u1e78\u1e78\u1e7a\u1e7a\u1e7c\u1e7c"
+ "\u1e7e\u1e7e\u1e80\u1e80\u1e82\u1e82\u1e84\u1e84\u1e86\u1e86\u1e88\u1e88"
+ "\u1e8a\u1e8a\u1e8c\u1e8c\u1e8e\u1e8e\u1e90\u1e90\u1e92\u1e92\u1e94\u1e94"
+ "\u1e96\u1e96\u1ea0\u1ea0\u1ea2\u1ea2\u1ea4\u1ea4\u1ea6\u1ea6\u1ea8\u1ea8"
+ "\u1eaa\u1eaa\u1eac\u1eac\u1eae\u1eae\u1eb0\u1eb0\u1eb2\u1eb2\u1eb4\u1eb4"
+ "\u1eb6\u1eb6\u1eb8\u1eb8\u1eba\u1eba\u1ebc\u1ebc\u1ebe\u1ebe\u1ec0\u1ec0"
+ "\u1ec2\u1ec2\u1ec4\u1ec4\u1ec6\u1ec6\u1ec8\u1ec8\u1eca\u1eca\u1ecc\u1ecc"
+ "\u1ece\u1ece\u1ed0\u1ed0\u1ed2\u1ed2\u1ed4\u1ed4\u1ed6\u1ed6\u1ed8\u1ed8"
+ "\u1eda\u1eda\u1edc\u1edc\u1ede\u1ede\u1ee0\u1ee0\u1ee2\u1ee2\u1ee4\u1ee4"
+ "\u1ee6\u1ee6\u1ee8\u1ee8\u1eea\u1eea\u1eec\u1eec\u1eee\u1eee\u1ef0\u1ef0"
+ "\u1ef2\u1ef2\u1ef4\u1ef4\u1ef6\u1ef6\u1ef8\u1ef8\u1efa\u1efa\u1efc\u1efc"
+ "\u1efe\u1efe\u1f00\u1f00\u1f0a\u1f11\u1f1a\u1f1f\u1f2a\u1f31\u1f3a\u1f41"
+ "\u1f4a\u1f4f\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f5f\u1f61\u1f61\u1f6a\u1f71"
+ "\u1fba\u1fbd\u1fca\u1fcd\u1fda\u1fdd\u1fea\u1fee\u1ffa\u1ffd\u2104\u2104"
+ "\u2109\u2109\u210d\u210f\u2112\u2114\u2117\u2117\u211b\u211f\u2126\u2126"
+ "\u2128\u2128\u212a\u212a\u212c\u212f\u2132\u2135\u2140\u2141\u2147\u2147"
+ "\u2185\u2185\u2c02\u2c30\u2c62\u2c62\u2c64\u2c66\u2c69\u2c69\u2c6b\u2c6b"
+ "\u2c6d\u2c6d\u2c6f\u2c72\u2c74\u2c74\u2c77\u2c77\u2c80\u2c82\u2c84\u2c84"
+ "\u2c86\u2c86\u2c88\u2c88\u2c8a\u2c8a\u2c8c\u2c8c\u2c8e\u2c8e\u2c90\u2c90"
+ "\u2c92\u2c92\u2c94\u2c94\u2c96\u2c96\u2c98\u2c98\u2c9a\u2c9a\u2c9c\u2c9c"
+ "\u2c9e\u2c9e\u2ca0\u2ca0\u2ca2\u2ca2\u2ca4\u2ca4\u2ca6\u2ca6\u2ca8\u2ca8"
+ "\u2caa\u2caa\u2cac\u2cac\u2cae\u2cae\u2cb0\u2cb0\u2cb2\u2cb2\u2cb4\u2cb4"
+ "\u2cb6\u2cb6\u2cb8\u2cb8\u2cba\u2cba\u2cbc\u2cbc\u2cbe\u2cbe\u2cc0\u2cc0"
+ "\u2cc2\u2cc2\u2cc4\u2cc4\u2cc6\u2cc6\u2cc8\u2cc8\u2cca\u2cca\u2ccc\u2ccc"
+ "\u2cce\u2cce\u2cd0\u2cd0\u2cd2\u2cd2\u2cd4\u2cd4\u2cd6\u2cd6\u2cd8\u2cd8"
+ "\u2cda\u2cda\u2cdc\u2cdc\u2cde\u2cde\u2ce0\u2ce0\u2ce2\u2ce2\u2ce4\u2ce4"
+ "\u2ced\u2ced\u2cef\u2cef\u2cf4\u2cf4\ua642\ua642\ua644\ua644\ua646\ua646"
+ "\ua648\ua648\ua64a\ua64a\ua64c\ua64c\ua64e\ua64e\ua650\ua650\ua652\ua652"
+ "\ua654\ua654\ua656\ua656\ua658\ua658\ua65a\ua65a\ua65c\ua65c\ua65e\ua65e"
+ "\ua660\ua660\ua662\ua662\ua664\ua664\ua666\ua666\ua668\ua668\ua66a\ua66a"
+ "\ua66c\ua66c\ua66e\ua66e\ua682\ua682\ua684\ua684\ua686\ua686\ua688\ua688"
+ "\ua68a\ua68a\ua68c\ua68c\ua68e\ua68e\ua690\ua690\ua692\ua692\ua694\ua694"
+ "\ua696\ua696\ua698\ua698\ua724\ua724\ua726\ua726\ua728\ua728\ua72a\ua72a"
+ "\ua72c\ua72c\ua72e\ua72e\ua730\ua730\ua734\ua734\ua736\ua736\ua738\ua738"
+ "\ua73a\ua73a\ua73c\ua73c\ua73e\ua73e\ua740\ua740\ua742\ua742\ua744\ua744"
+ "\ua746\ua746\ua748\ua748\ua74a\ua74a\ua74c\ua74c\ua74e\ua74e\ua750\ua750"
+ "\ua752\ua752\ua754\ua754\ua756\ua756\ua758\ua758\ua75a\ua75a\ua75c\ua75c"
+ "\ua75e\ua75e\ua760\ua760\ua762\ua762\ua764\ua764\ua766\ua766\ua768\ua768"
+ "\ua76a\ua76a\ua76c\ua76c\ua76e\ua76e\ua770\ua770\ua77b\ua77b\ua77d\ua77d"
+ "\ua77f\ua780\ua782\ua782\ua784\ua784\ua786\ua786\ua788\ua788\ua78d\ua78d"
+ "\ua78f\ua78f\ua792\ua792\ua794\ua794\ua7a2\ua7a2\ua7a4\ua7a4\ua7a6\ua7a6"
+ "\ua7a8\ua7a8\ua7aa\ua7aa\ua7ac\ua7ac\uff23\uff3c%\2\62;\u0662\u066b\u06f2"
+ "\u06fb\u07c2\u07cb\u0968\u0971\u09e8\u09f1\u0a68\u0a71\u0ae8\u0af1\u0b68"
+ "\u0b71\u0be8\u0bf1\u0c68\u0c71\u0ce8\u0cf1\u0d68\u0d71\u0e52\u0e5b\u0ed2"
+ "\u0edb\u0f22\u0f2b\u1042\u104b\u1092\u109b\u17e2\u17eb\u1812\u181b\u1948"
+ "\u1951\u19d2\u19db\u1a82\u1a8b\u1a92\u1a9b\u1b52\u1b5b\u1bb2\u1bbb\u1c42"
+ "\u1c4b\u1c52\u1c5b\ua622\ua62b\ua8d2\ua8db\ua902\ua90b\ua9d2\ua9db\uaa52"
+ "\uaa5b\uabf2\uabfb\uff12\uff1b\t\2\u16f0\u16f2\u2162\u2184\u2187\u218a"
+ "\u3009\u3009\u3023\u302b\u303a\u303c\ua6e8\ua6f1\2\36\2\3\3\2\2\2\2\5"
+ "\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2"
+ "\3\21\3\2\2\2\5\23\3\2\2\2\7\25\3\2\2\2\t\27\3\2\2\2\13\31\3\2\2\2\r\33"
+ "\3\2\2\2\17\35\3\2\2\2\21\22\t\2\2\2\22\4\3\2\2\2\23\24\t\3\2\2\24\6\3"
+ "\2\2\2\25\26\t\4\2\2\26\b\3\2\2\2\27\30\t\5\2\2\30\n\3\2\2\2\31\32\t\6"
+ "\2\2\32\f\3\2\2\2\33\34\t\7\2\2\34\16\3\2\2\2\35\36\t\b\2\2\36\20\3\2"
+ "\2\2\3\2\2";
public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray());
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE"};
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
UNICODE_CLASS_LL=1, UNICODE_CLASS_LM=2, UNICODE_CLASS_LO=3, UNICODE_CLASS_LT=4,
UNICODE_CLASS_LU=5, UNICODE_CLASS_ND=6, UNICODE_CLASS_NL=7;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
static {
RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION);
}
public static String[] modeNames = {
"DEFAULT_MODE"
};
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
private static String[] makeRuleNames() {
return new String[] {
"UNICODE_CLASS_LL", "UNICODE_CLASS_LM", "UNICODE_CLASS_LO", "UNICODE_CLASS_LT",
"UNICODE_CLASS_LU", "UNICODE_CLASS_ND", "UNICODE_CLASS_NL"
};
}
public static final String[] ruleNames = makeRuleNames();
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
private static String[] makeLiteralNames() {
return new String[] {
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, "UNICODE_CLASS_LL", "UNICODE_CLASS_LM", "UNICODE_CLASS_LO", "UNICODE_CLASS_LT",
"UNICODE_CLASS_LU", "UNICODE_CLASS_ND", "UNICODE_CLASS_NL"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
public UnicodeClasses(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
private static String[] makeRuleNames() {
return new String[] {
"UNICODE_CLASS_LL",
"UNICODE_CLASS_LM",
"UNICODE_CLASS_LO",
"UNICODE_CLASS_LT",
"UNICODE_CLASS_LU",
"UNICODE_CLASS_ND",
"UNICODE_CLASS_NL"
};
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
private static String[] makeLiteralNames() {
return new String[] {};
}
@Override
private static String[] makeSymbolicNames() {
return new String[] {
null,
"UNICODE_CLASS_LL",
"UNICODE_CLASS_LM",
"UNICODE_CLASS_LO",
"UNICODE_CLASS_LT",
"UNICODE_CLASS_LU",
"UNICODE_CLASS_ND",
"UNICODE_CLASS_NL"
};
}
public Vocabulary getVocabulary() {
return VOCABULARY;
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public UnicodeClasses(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String getGrammarFileName() { return "UnicodeClasses.g4"; }
@Override
public String getGrammarFileName() {
return "UnicodeClasses.g4";
}
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public ATN getATN() {
return _ATN;
}
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getChannelNames() { return channelNames; }
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\t\37\b\1\4\2\t\2"+
"\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\3\2\3\2\3\3\3\3\3\4\3"+
"\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\2\2\t\3\3\5\4\7\5\t\6\13\7\r\b\17\t"+
"\3\2\t\u0248\2c|\u00b7\u00b7\u00e1\u00f8\u00fa\u0101\u0103\u0103\u0105"+
"\u0105\u0107\u0107\u0109\u0109\u010b\u010b\u010d\u010d\u010f\u010f\u0111"+
"\u0111\u0113\u0113\u0115\u0115\u0117\u0117\u0119\u0119\u011b\u011b\u011d"+
"\u011d\u011f\u011f\u0121\u0121\u0123\u0123\u0125\u0125\u0127\u0127\u0129"+
"\u0129\u012b\u012b\u012d\u012d\u012f\u012f\u0131\u0131\u0133\u0133\u0135"+
"\u0135\u0137\u0137\u0139\u013a\u013c\u013c\u013e\u013e\u0140\u0140\u0142"+
"\u0142\u0144\u0144\u0146\u0146\u0148\u0148\u014a\u014b\u014d\u014d\u014f"+
"\u014f\u0151\u0151\u0153\u0153\u0155\u0155\u0157\u0157\u0159\u0159\u015b"+
"\u015b\u015d\u015d\u015f\u015f\u0161\u0161\u0163\u0163\u0165\u0165\u0167"+
"\u0167\u0169\u0169\u016b\u016b\u016d\u016d\u016f\u016f\u0171\u0171\u0173"+
"\u0173\u0175\u0175\u0177\u0177\u0179\u0179\u017c\u017c\u017e\u017e\u0180"+
"\u0182\u0185\u0185\u0187\u0187\u018a\u018a\u018e\u018f\u0194\u0194\u0197"+
"\u0197\u019b\u019d\u01a0\u01a0\u01a3\u01a3\u01a5\u01a5\u01a7\u01a7\u01aa"+
"\u01aa\u01ac\u01ad\u01af\u01af\u01b2\u01b2\u01b6\u01b6\u01b8\u01b8\u01bb"+
"\u01bc\u01bf\u01c1\u01c8\u01c8\u01cb\u01cb\u01ce\u01ce\u01d0\u01d0\u01d2"+
"\u01d2\u01d4\u01d4\u01d6\u01d6\u01d8\u01d8\u01da\u01da\u01dc\u01dc\u01de"+
"\u01df\u01e1\u01e1\u01e3\u01e3\u01e5\u01e5\u01e7\u01e7\u01e9\u01e9\u01eb"+
"\u01eb\u01ed\u01ed\u01ef\u01ef\u01f1\u01f2\u01f5\u01f5\u01f7\u01f7\u01fb"+
"\u01fb\u01fd\u01fd\u01ff\u01ff\u0201\u0201\u0203\u0203\u0205\u0205\u0207"+
"\u0207\u0209\u0209\u020b\u020b\u020d\u020d\u020f\u020f\u0211\u0211\u0213"+
"\u0213\u0215\u0215\u0217\u0217\u0219\u0219\u021b\u021b\u021d\u021d\u021f"+
"\u021f\u0221\u0221\u0223\u0223\u0225\u0225\u0227\u0227\u0229\u0229\u022b"+
"\u022b\u022d\u022d\u022f\u022f\u0231\u0231\u0233\u0233\u0235\u023b\u023e"+
"\u023e\u0241\u0242\u0244\u0244\u0249\u0249\u024b\u024b\u024d\u024d\u024f"+
"\u024f\u0251\u0295\u0297\u02b1\u0373\u0373\u0375\u0375\u0379\u0379\u037d"+
"\u037f\u0392\u0392\u03ae\u03d0\u03d2\u03d3\u03d7\u03d9\u03db\u03db\u03dd"+
"\u03dd\u03df\u03df\u03e1\u03e1\u03e3\u03e3\u03e5\u03e5\u03e7\u03e7\u03e9"+
"\u03e9\u03eb\u03eb\u03ed\u03ed\u03ef\u03ef\u03f1\u03f5\u03f7\u03f7\u03fa"+
"\u03fa\u03fd\u03fe\u0432\u0461\u0463\u0463\u0465\u0465\u0467\u0467\u0469"+
"\u0469\u046b\u046b\u046d\u046d\u046f\u046f\u0471\u0471\u0473\u0473\u0475"+
"\u0475\u0477\u0477\u0479\u0479\u047b\u047b\u047d\u047d\u047f\u047f\u0481"+
"\u0481\u0483\u0483\u048d\u048d\u048f\u048f\u0491\u0491\u0493\u0493\u0495"+
"\u0495\u0497\u0497\u0499\u0499\u049b\u049b\u049d\u049d\u049f\u049f\u04a1"+
"\u04a1\u04a3\u04a3\u04a5\u04a5\u04a7\u04a7\u04a9\u04a9\u04ab\u04ab\u04ad"+
"\u04ad\u04af\u04af\u04b1\u04b1\u04b3\u04b3\u04b5\u04b5\u04b7\u04b7\u04b9"+
"\u04b9\u04bb\u04bb\u04bd\u04bd\u04bf\u04bf\u04c1\u04c1\u04c4\u04c4\u04c6"+
"\u04c6\u04c8\u04c8\u04ca\u04ca\u04cc\u04cc\u04ce\u04ce\u04d0\u04d1\u04d3"+
"\u04d3\u04d5\u04d5\u04d7\u04d7\u04d9\u04d9\u04db\u04db\u04dd\u04dd\u04df"+
"\u04df\u04e1\u04e1\u04e3\u04e3\u04e5\u04e5\u04e7\u04e7\u04e9\u04e9\u04eb"+
"\u04eb\u04ed\u04ed\u04ef\u04ef\u04f1\u04f1\u04f3\u04f3\u04f5\u04f5\u04f7"+
"\u04f7\u04f9\u04f9\u04fb\u04fb\u04fd\u04fd\u04ff\u04ff\u0501\u0501\u0503"+
"\u0503\u0505\u0505\u0507\u0507\u0509\u0509\u050b\u050b\u050d\u050d\u050f"+
"\u050f\u0511\u0511\u0513\u0513\u0515\u0515\u0517\u0517\u0519\u0519\u051b"+
"\u051b\u051d\u051d\u051f\u051f\u0521\u0521\u0523\u0523\u0525\u0525\u0527"+
"\u0527\u0529\u0529\u0563\u0589\u1d02\u1d2d\u1d6d\u1d79\u1d7b\u1d9c\u1e03"+
"\u1e03\u1e05\u1e05\u1e07\u1e07\u1e09\u1e09\u1e0b\u1e0b\u1e0d\u1e0d\u1e0f"+
"\u1e0f\u1e11\u1e11\u1e13\u1e13\u1e15\u1e15\u1e17\u1e17\u1e19\u1e19\u1e1b"+
"\u1e1b\u1e1d\u1e1d\u1e1f\u1e1f\u1e21\u1e21\u1e23\u1e23\u1e25\u1e25\u1e27"+
"\u1e27\u1e29\u1e29\u1e2b\u1e2b\u1e2d\u1e2d\u1e2f\u1e2f\u1e31\u1e31\u1e33"+
"\u1e33\u1e35\u1e35\u1e37\u1e37\u1e39\u1e39\u1e3b\u1e3b\u1e3d\u1e3d\u1e3f"+
"\u1e3f\u1e41\u1e41\u1e43\u1e43\u1e45\u1e45\u1e47\u1e47\u1e49\u1e49\u1e4b"+
"\u1e4b\u1e4d\u1e4d\u1e4f\u1e4f\u1e51\u1e51\u1e53\u1e53\u1e55\u1e55\u1e57"+
"\u1e57\u1e59\u1e59\u1e5b\u1e5b\u1e5d\u1e5d\u1e5f\u1e5f\u1e61\u1e61\u1e63"+
"\u1e63\u1e65\u1e65\u1e67\u1e67\u1e69\u1e69\u1e6b\u1e6b\u1e6d\u1e6d\u1e6f"+
"\u1e6f\u1e71\u1e71\u1e73\u1e73\u1e75\u1e75\u1e77\u1e77\u1e79\u1e79\u1e7b"+
"\u1e7b\u1e7d\u1e7d\u1e7f\u1e7f\u1e81\u1e81\u1e83\u1e83\u1e85\u1e85\u1e87"+
"\u1e87\u1e89\u1e89\u1e8b\u1e8b\u1e8d\u1e8d\u1e8f\u1e8f\u1e91\u1e91\u1e93"+
"\u1e93\u1e95\u1e95\u1e97\u1e9f\u1ea1\u1ea1\u1ea3\u1ea3\u1ea5\u1ea5\u1ea7"+
"\u1ea7\u1ea9\u1ea9\u1eab\u1eab\u1ead\u1ead\u1eaf\u1eaf\u1eb1\u1eb1\u1eb3"+
"\u1eb3\u1eb5\u1eb5\u1eb7\u1eb7\u1eb9\u1eb9\u1ebb\u1ebb\u1ebd\u1ebd\u1ebf"+
"\u1ebf\u1ec1\u1ec1\u1ec3\u1ec3\u1ec5\u1ec5\u1ec7\u1ec7\u1ec9\u1ec9\u1ecb"+
"\u1ecb\u1ecd\u1ecd\u1ecf\u1ecf\u1ed1\u1ed1\u1ed3\u1ed3\u1ed5\u1ed5\u1ed7"+
"\u1ed7\u1ed9\u1ed9\u1edb\u1edb\u1edd\u1edd\u1edf\u1edf\u1ee1\u1ee1\u1ee3"+
"\u1ee3\u1ee5\u1ee5\u1ee7\u1ee7\u1ee9\u1ee9\u1eeb\u1eeb\u1eed\u1eed\u1eef"+
"\u1eef\u1ef1\u1ef1\u1ef3\u1ef3\u1ef5\u1ef5\u1ef7\u1ef7\u1ef9\u1ef9\u1efb"+
"\u1efb\u1efd\u1efd\u1eff\u1eff\u1f01\u1f09\u1f12\u1f17\u1f22\u1f29\u1f32"+
"\u1f39\u1f42\u1f47\u1f52\u1f59\u1f62\u1f69\u1f72\u1f7f\u1f82\u1f89\u1f92"+
"\u1f99\u1fa2\u1fa9\u1fb2\u1fb6\u1fb8\u1fb9\u1fc0\u1fc0\u1fc4\u1fc6\u1fc8"+
"\u1fc9\u1fd2\u1fd5\u1fd8\u1fd9\u1fe2\u1fe9\u1ff4\u1ff6\u1ff8\u1ff9\u210c"+
"\u210c\u2110\u2111\u2115\u2115\u2131\u2131\u2136\u2136\u213b\u213b\u213e"+
"\u213f\u2148\u214b\u2150\u2150\u2186\u2186\u2c32\u2c60\u2c63\u2c63\u2c67"+
"\u2c68\u2c6a\u2c6a\u2c6c\u2c6c\u2c6e\u2c6e\u2c73\u2c73\u2c75\u2c76\u2c78"+
"\u2c7d\u2c83\u2c83\u2c85\u2c85\u2c87\u2c87\u2c89\u2c89\u2c8b\u2c8b\u2c8d"+
"\u2c8d\u2c8f\u2c8f\u2c91\u2c91\u2c93\u2c93\u2c95\u2c95\u2c97\u2c97\u2c99"+
"\u2c99\u2c9b\u2c9b\u2c9d\u2c9d\u2c9f\u2c9f\u2ca1\u2ca1\u2ca3\u2ca3\u2ca5"+
"\u2ca5\u2ca7\u2ca7\u2ca9\u2ca9\u2cab\u2cab\u2cad\u2cad\u2caf\u2caf\u2cb1"+
"\u2cb1\u2cb3\u2cb3\u2cb5\u2cb5\u2cb7\u2cb7\u2cb9\u2cb9\u2cbb\u2cbb\u2cbd"+
"\u2cbd\u2cbf\u2cbf\u2cc1\u2cc1\u2cc3\u2cc3\u2cc5\u2cc5\u2cc7\u2cc7\u2cc9"+
"\u2cc9\u2ccb\u2ccb\u2ccd\u2ccd\u2ccf\u2ccf\u2cd1\u2cd1\u2cd3\u2cd3\u2cd5"+
"\u2cd5\u2cd7\u2cd7\u2cd9\u2cd9\u2cdb\u2cdb\u2cdd\u2cdd\u2cdf\u2cdf\u2ce1"+
"\u2ce1\u2ce3\u2ce3\u2ce5\u2ce6\u2cee\u2cee\u2cf0\u2cf0\u2cf5\u2cf5\u2d02"+
"\u2d27\u2d29\u2d29\u2d2f\u2d2f\ua643\ua643\ua645\ua645\ua647\ua647\ua649"+
"\ua649\ua64b\ua64b\ua64d\ua64d\ua64f\ua64f\ua651\ua651\ua653\ua653\ua655"+
"\ua655\ua657\ua657\ua659\ua659\ua65b\ua65b\ua65d\ua65d\ua65f\ua65f\ua661"+
"\ua661\ua663\ua663\ua665\ua665\ua667\ua667\ua669\ua669\ua66b\ua66b\ua66d"+
"\ua66d\ua66f\ua66f\ua683\ua683\ua685\ua685\ua687\ua687\ua689\ua689\ua68b"+
"\ua68b\ua68d\ua68d\ua68f\ua68f\ua691\ua691\ua693\ua693\ua695\ua695\ua697"+
"\ua697\ua699\ua699\ua725\ua725\ua727\ua727\ua729\ua729\ua72b\ua72b\ua72d"+
"\ua72d\ua72f\ua72f\ua731\ua733\ua735\ua735\ua737\ua737\ua739\ua739\ua73b"+
"\ua73b\ua73d\ua73d\ua73f\ua73f\ua741\ua741\ua743\ua743\ua745\ua745\ua747"+
"\ua747\ua749\ua749\ua74b\ua74b\ua74d\ua74d\ua74f\ua74f\ua751\ua751\ua753"+
"\ua753\ua755\ua755\ua757\ua757\ua759\ua759\ua75b\ua75b\ua75d\ua75d\ua75f"+
"\ua75f\ua761\ua761\ua763\ua763\ua765\ua765\ua767\ua767\ua769\ua769\ua76b"+
"\ua76b\ua76d\ua76d\ua76f\ua76f\ua771\ua771\ua773\ua77a\ua77c\ua77c\ua77e"+
"\ua77e\ua781\ua781\ua783\ua783\ua785\ua785\ua787\ua787\ua789\ua789\ua78e"+
"\ua78e\ua790\ua790\ua793\ua793\ua795\ua795\ua7a3\ua7a3\ua7a5\ua7a5\ua7a7"+
"\ua7a7\ua7a9\ua7a9\ua7ab\ua7ab\ua7fc\ua7fc\ufb02\ufb08\ufb15\ufb19\uff43"+
"\uff5c\65\2\u02b2\u02c3\u02c8\u02d3\u02e2\u02e6\u02ee\u02ee\u02f0\u02f0"+
"\u0376\u0376\u037c\u037c\u055b\u055b\u0642\u0642\u06e7\u06e8\u07f6\u07f7"+
"\u07fc\u07fc\u081c\u081c\u0826\u0826\u082a\u082a\u0973\u0973\u0e48\u0e48"+
"\u0ec8\u0ec8\u10fe\u10fe\u17d9\u17d9\u1845\u1845\u1aa9\u1aa9\u1c7a\u1c7f"+
"\u1d2e\u1d6c\u1d7a\u1d7a\u1d9d\u1dc1\u2073\u2073\u2081\u2081\u2092\u209e"+
"\u2c7e\u2c7f\u2d71\u2d71\u2e31\u2e31\u3007\u3007\u3033\u3037\u303d\u303d"+
"\u309f\u30a0\u30fe\u3100\ua017\ua017\ua4fa\ua4ff\ua60e\ua60e\ua681\ua681"+
"\ua719\ua721\ua772\ua772\ua78a\ua78a\ua7fa\ua7fb\ua9d1\ua9d1\uaa72\uaa72"+
"\uaadf\uaadf\uaaf5\uaaf6\uff72\uff72\uffa0\uffa1\u0123\2\u00ac\u00ac\u00bc"+
"\u00bc\u01bd\u01bd\u01c2\u01c5\u0296\u0296\u05d2\u05ec\u05f2\u05f4\u0622"+
"\u0641\u0643\u064c\u0670\u0671\u0673\u06d5\u06d7\u06d7\u06f0\u06f1\u06fc"+
"\u06fe\u0701\u0701\u0712\u0712\u0714\u0731\u074f\u07a7\u07b3\u07b3\u07cc"+
"\u07ec\u0802\u0817\u0842\u085a\u08a2\u08a2\u08a4\u08ae\u0906\u093b\u093f"+
"\u093f\u0952\u0952\u095a\u0963\u0974\u0979\u097b\u0981\u0987\u098e\u0991"+
"\u0992\u0995\u09aa\u09ac\u09b2\u09b4\u09b4\u09b8\u09bb\u09bf\u09bf\u09d0"+
"\u09d0\u09de\u09df\u09e1\u09e3\u09f2\u09f3\u0a07\u0a0c\u0a11\u0a12\u0a15"+
"\u0a2a\u0a2c\u0a32\u0a34\u0a35\u0a37\u0a38\u0a3a\u0a3b\u0a5b\u0a5e\u0a60"+
"\u0a60\u0a74\u0a76\u0a87\u0a8f\u0a91\u0a93\u0a95\u0aaa\u0aac\u0ab2\u0ab4"+
"\u0ab5\u0ab7\u0abb\u0abf\u0abf\u0ad2\u0ad2\u0ae2\u0ae3\u0b07\u0b0e\u0b11"+
"\u0b12\u0b15\u0b2a\u0b2c\u0b32\u0b34\u0b35\u0b37\u0b3b\u0b3f\u0b3f\u0b5e"+
"\u0b5f\u0b61\u0b63\u0b73\u0b73\u0b85\u0b85\u0b87\u0b8c\u0b90\u0b92\u0b94"+
"\u0b97\u0b9b\u0b9c\u0b9e\u0b9e\u0ba0\u0ba1\u0ba5\u0ba6\u0baa\u0bac\u0bb0"+
"\u0bbb\u0bd2\u0bd2\u0c07\u0c0e\u0c10\u0c12\u0c14\u0c2a\u0c2c\u0c35\u0c37"+
"\u0c3b\u0c3f\u0c3f\u0c5a\u0c5b\u0c62\u0c63\u0c87\u0c8e\u0c90\u0c92\u0c94"+
"\u0caa\u0cac\u0cb5\u0cb7\u0cbb\u0cbf\u0cbf\u0ce0\u0ce0\u0ce2\u0ce3\u0cf3"+
"\u0cf4\u0d07\u0d0e\u0d10\u0d12\u0d14\u0d3c\u0d3f\u0d3f\u0d50\u0d50\u0d62"+
"\u0d63\u0d7c\u0d81\u0d87\u0d98\u0d9c\u0db3\u0db5\u0dbd\u0dbf\u0dbf\u0dc2"+
"\u0dc8\u0e03\u0e32\u0e34\u0e35\u0e42\u0e47\u0e83\u0e84\u0e86\u0e86\u0e89"+
"\u0e8a\u0e8c\u0e8c\u0e8f\u0e8f\u0e96\u0e99\u0e9b\u0ea1\u0ea3\u0ea5\u0ea7"+
"\u0ea7\u0ea9\u0ea9\u0eac\u0ead\u0eaf\u0eb2\u0eb4\u0eb5\u0ebf\u0ebf\u0ec2"+
"\u0ec6\u0ede\u0ee1\u0f02\u0f02\u0f42\u0f49\u0f4b\u0f6e\u0f8a\u0f8e\u1002"+
"\u102c\u1041\u1041\u1052\u1057\u105c\u105f\u1063\u1063\u1067\u1068\u1070"+
"\u1072\u1077\u1083\u1090\u1090\u10d2\u10fc\u10ff\u124a\u124c\u124f\u1252"+
"\u1258\u125a\u125a\u125c\u125f\u1262\u128a\u128c\u128f\u1292\u12b2\u12b4"+
"\u12b7\u12ba\u12c0\u12c2\u12c2\u12c4\u12c7\u12ca\u12d8\u12da\u1312\u1314"+
"\u1317\u131a\u135c\u1382\u1391\u13a2\u13f6\u1403\u166e\u1671\u1681\u1683"+
"\u169c\u16a2\u16ec\u1702\u170e\u1710\u1713\u1722\u1733\u1742\u1753\u1762"+
"\u176e\u1770\u1772\u1782\u17b5\u17de\u17de\u1822\u1844\u1846\u1879\u1882"+
"\u18aa\u18ac\u18ac\u18b2\u18f7\u1902\u191e\u1952\u196f\u1972\u1976\u1982"+
"\u19ad\u19c3\u19c9\u1a02\u1a18\u1a22\u1a56\u1b07\u1b35\u1b47\u1b4d\u1b85"+
"\u1ba2\u1bb0\u1bb1\u1bbc\u1be7\u1c02\u1c25\u1c4f\u1c51\u1c5c\u1c79\u1ceb"+
"\u1cee\u1cf0\u1cf3\u1cf7\u1cf8\u2137\u213a\u2d32\u2d69\u2d82\u2d98\u2da2"+
"\u2da8\u2daa\u2db0\u2db2\u2db8\u2dba\u2dc0\u2dc2\u2dc8\u2dca\u2dd0\u2dd2"+
"\u2dd8\u2dda\u2de0\u3008\u3008\u303e\u303e\u3043\u3098\u30a1\u30a1\u30a3"+
"\u30fc\u3101\u3101\u3107\u312f\u3133\u3190\u31a2\u31bc\u31f2\u3201\u3402"+
"\u3402\u4db7\u4db7\u4e02\u4e02\u9fce\u9fce\ua002\ua016\ua018\ua48e\ua4d2"+
"\ua4f9\ua502\ua60d\ua612\ua621\ua62c\ua62d\ua670\ua670\ua6a2\ua6e7\ua7fd"+
"\ua803\ua805\ua807\ua809\ua80c\ua80e\ua824\ua842\ua875\ua884\ua8b5\ua8f4"+
"\ua8f9\ua8fd\ua8fd\ua90c\ua927\ua932\ua948\ua962\ua97e\ua986\ua9b4\uaa02"+
"\uaa2a\uaa42\uaa44\uaa46\uaa4d\uaa62\uaa71\uaa73\uaa78\uaa7c\uaa7c\uaa82"+
"\uaab1\uaab3\uaab3\uaab7\uaab8\uaabb\uaabf\uaac2\uaac2\uaac4\uaac4\uaadd"+
"\uaade\uaae2\uaaec\uaaf4\uaaf4\uab03\uab08\uab0b\uab10\uab13\uab18\uab22"+
"\uab28\uab2a\uab30\uabc2\uabe4\uac02\uac02\ud7a5\ud7a5\ud7b2\ud7c8\ud7cd"+
"\ud7fd\uf902\ufa6f\ufa72\ufadb\ufb1f\ufb1f\ufb21\ufb2a\ufb2c\ufb38\ufb3a"+
"\ufb3e\ufb40\ufb40\ufb42\ufb43\ufb45\ufb46\ufb48\ufbb3\ufbd5\ufd3f\ufd52"+
"\ufd91\ufd94\ufdc9\ufdf2\ufdfd\ufe72\ufe76\ufe78\ufefe\uff68\uff71\uff73"+
"\uff9f\uffa2\uffc0\uffc4\uffc9\uffcc\uffd1\uffd4\uffd9\uffdc\uffde\f\2"+
"\u01c7\u01c7\u01ca\u01ca\u01cd\u01cd\u01f4\u01f4\u1f8a\u1f91\u1f9a\u1fa1"+
"\u1faa\u1fb1\u1fbe\u1fbe\u1fce\u1fce\u1ffe\u1ffe\u0242\2C\\\u00c2\u00d8"+
"\u00da\u00e0\u0102\u0102\u0104\u0104\u0106\u0106\u0108\u0108\u010a\u010a"+
"\u010c\u010c\u010e\u010e\u0110\u0110\u0112\u0112\u0114\u0114\u0116\u0116"+
"\u0118\u0118\u011a\u011a\u011c\u011c\u011e\u011e\u0120\u0120\u0122\u0122"+
"\u0124\u0124\u0126\u0126\u0128\u0128\u012a\u012a\u012c\u012c\u012e\u012e"+
"\u0130\u0130\u0132\u0132\u0134\u0134\u0136\u0136\u0138\u0138\u013b\u013b"+
"\u013d\u013d\u013f\u013f\u0141\u0141\u0143\u0143\u0145\u0145\u0147\u0147"+
"\u0149\u0149\u014c\u014c\u014e\u014e\u0150\u0150\u0152\u0152\u0154\u0154"+
"\u0156\u0156\u0158\u0158\u015a\u015a\u015c\u015c\u015e\u015e\u0160\u0160"+
"\u0162\u0162\u0164\u0164\u0166\u0166\u0168\u0168\u016a\u016a\u016c\u016c"+
"\u016e\u016e\u0170\u0170\u0172\u0172\u0174\u0174\u0176\u0176\u0178\u0178"+
"\u017a\u017b\u017d\u017d\u017f\u017f\u0183\u0184\u0186\u0186\u0188\u0189"+
"\u018b\u018d\u0190\u0193\u0195\u0196\u0198\u019a\u019e\u019f\u01a1\u01a2"+
"\u01a4\u01a4\u01a6\u01a6\u01a8\u01a9\u01ab\u01ab\u01ae\u01ae\u01b0\u01b1"+
"\u01b3\u01b5\u01b7\u01b7\u01b9\u01ba\u01be\u01be\u01c6\u01c6\u01c9\u01c9"+
"\u01cc\u01cc\u01cf\u01cf\u01d1\u01d1\u01d3\u01d3\u01d5\u01d5\u01d7\u01d7"+
"\u01d9\u01d9\u01db\u01db\u01dd\u01dd\u01e0\u01e0\u01e2\u01e2\u01e4\u01e4"+
"\u01e6\u01e6\u01e8\u01e8\u01ea\u01ea\u01ec\u01ec\u01ee\u01ee\u01f0\u01f0"+
"\u01f3\u01f3\u01f6\u01f6\u01f8\u01fa\u01fc\u01fc\u01fe\u01fe\u0200\u0200"+
"\u0202\u0202\u0204\u0204\u0206\u0206\u0208\u0208\u020a\u020a\u020c\u020c"+
"\u020e\u020e\u0210\u0210\u0212\u0212\u0214\u0214\u0216\u0216\u0218\u0218"+
"\u021a\u021a\u021c\u021c\u021e\u021e\u0220\u0220\u0222\u0222\u0224\u0224"+
"\u0226\u0226\u0228\u0228\u022a\u022a\u022c\u022c\u022e\u022e\u0230\u0230"+
"\u0232\u0232\u0234\u0234\u023c\u023d\u023f\u0240\u0243\u0243\u0245\u0248"+
"\u024a\u024a\u024c\u024c\u024e\u024e\u0250\u0250\u0372\u0372\u0374\u0374"+
"\u0378\u0378\u0388\u0388\u038a\u038c\u038e\u038e\u0390\u0391\u0393\u03a3"+
"\u03a5\u03ad\u03d1\u03d1\u03d4\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de"+
"\u03e0\u03e0\u03e2\u03e2\u03e4\u03e4\u03e6\u03e6\u03e8\u03e8\u03ea\u03ea"+
"\u03ec\u03ec\u03ee\u03ee\u03f0\u03f0\u03f6\u03f6\u03f9\u03f9\u03fb\u03fc"+
"\u03ff\u0431\u0462\u0462\u0464\u0464\u0466\u0466\u0468\u0468\u046a\u046a"+
"\u046c\u046c\u046e\u046e\u0470\u0470\u0472\u0472\u0474\u0474\u0476\u0476"+
"\u0478\u0478\u047a\u047a\u047c\u047c\u047e\u047e\u0480\u0480\u0482\u0482"+
"\u048c\u048c\u048e\u048e\u0490\u0490\u0492\u0492\u0494\u0494\u0496\u0496"+
"\u0498\u0498\u049a\u049a\u049c\u049c\u049e\u049e\u04a0\u04a0\u04a2\u04a2"+
"\u04a4\u04a4\u04a6\u04a6\u04a8\u04a8\u04aa\u04aa\u04ac\u04ac\u04ae\u04ae"+
"\u04b0\u04b0\u04b2\u04b2\u04b4\u04b4\u04b6\u04b6\u04b8\u04b8\u04ba\u04ba"+
"\u04bc\u04bc\u04be\u04be\u04c0\u04c0\u04c2\u04c3\u04c5\u04c5\u04c7\u04c7"+
"\u04c9\u04c9\u04cb\u04cb\u04cd\u04cd\u04cf\u04cf\u04d2\u04d2\u04d4\u04d4"+
"\u04d6\u04d6\u04d8\u04d8\u04da\u04da\u04dc\u04dc\u04de\u04de\u04e0\u04e0"+
"\u04e2\u04e2\u04e4\u04e4\u04e6\u04e6\u04e8\u04e8\u04ea\u04ea\u04ec\u04ec"+
"\u04ee\u04ee\u04f0\u04f0\u04f2\u04f2\u04f4\u04f4\u04f6\u04f6\u04f8\u04f8"+
"\u04fa\u04fa\u04fc\u04fc\u04fe\u04fe\u0500\u0500\u0502\u0502\u0504\u0504"+
"\u0506\u0506\u0508\u0508\u050a\u050a\u050c\u050c\u050e\u050e\u0510\u0510"+
"\u0512\u0512\u0514\u0514\u0516\u0516\u0518\u0518\u051a\u051a\u051c\u051c"+
"\u051e\u051e\u0520\u0520\u0522\u0522\u0524\u0524\u0526\u0526\u0528\u0528"+
"\u0533\u0558\u10a2\u10c7\u10c9\u10c9\u10cf\u10cf\u1e02\u1e02\u1e04\u1e04"+
"\u1e06\u1e06\u1e08\u1e08\u1e0a\u1e0a\u1e0c\u1e0c\u1e0e\u1e0e\u1e10\u1e10"+
"\u1e12\u1e12\u1e14\u1e14\u1e16\u1e16\u1e18\u1e18\u1e1a\u1e1a\u1e1c\u1e1c"+
"\u1e1e\u1e1e\u1e20\u1e20\u1e22\u1e22\u1e24\u1e24\u1e26\u1e26\u1e28\u1e28"+
"\u1e2a\u1e2a\u1e2c\u1e2c\u1e2e\u1e2e\u1e30\u1e30\u1e32\u1e32\u1e34\u1e34"+
"\u1e36\u1e36\u1e38\u1e38\u1e3a\u1e3a\u1e3c\u1e3c\u1e3e\u1e3e\u1e40\u1e40"+
"\u1e42\u1e42\u1e44\u1e44\u1e46\u1e46\u1e48\u1e48\u1e4a\u1e4a\u1e4c\u1e4c"+
"\u1e4e\u1e4e\u1e50\u1e50\u1e52\u1e52\u1e54\u1e54\u1e56\u1e56\u1e58\u1e58"+
"\u1e5a\u1e5a\u1e5c\u1e5c\u1e5e\u1e5e\u1e60\u1e60\u1e62\u1e62\u1e64\u1e64"+
"\u1e66\u1e66\u1e68\u1e68\u1e6a\u1e6a\u1e6c\u1e6c\u1e6e\u1e6e\u1e70\u1e70"+
"\u1e72\u1e72\u1e74\u1e74\u1e76\u1e76\u1e78\u1e78\u1e7a\u1e7a\u1e7c\u1e7c"+
"\u1e7e\u1e7e\u1e80\u1e80\u1e82\u1e82\u1e84\u1e84\u1e86\u1e86\u1e88\u1e88"+
"\u1e8a\u1e8a\u1e8c\u1e8c\u1e8e\u1e8e\u1e90\u1e90\u1e92\u1e92\u1e94\u1e94"+
"\u1e96\u1e96\u1ea0\u1ea0\u1ea2\u1ea2\u1ea4\u1ea4\u1ea6\u1ea6\u1ea8\u1ea8"+
"\u1eaa\u1eaa\u1eac\u1eac\u1eae\u1eae\u1eb0\u1eb0\u1eb2\u1eb2\u1eb4\u1eb4"+
"\u1eb6\u1eb6\u1eb8\u1eb8\u1eba\u1eba\u1ebc\u1ebc\u1ebe\u1ebe\u1ec0\u1ec0"+
"\u1ec2\u1ec2\u1ec4\u1ec4\u1ec6\u1ec6\u1ec8\u1ec8\u1eca\u1eca\u1ecc\u1ecc"+
"\u1ece\u1ece\u1ed0\u1ed0\u1ed2\u1ed2\u1ed4\u1ed4\u1ed6\u1ed6\u1ed8\u1ed8"+
"\u1eda\u1eda\u1edc\u1edc\u1ede\u1ede\u1ee0\u1ee0\u1ee2\u1ee2\u1ee4\u1ee4"+
"\u1ee6\u1ee6\u1ee8\u1ee8\u1eea\u1eea\u1eec\u1eec\u1eee\u1eee\u1ef0\u1ef0"+
"\u1ef2\u1ef2\u1ef4\u1ef4\u1ef6\u1ef6\u1ef8\u1ef8\u1efa\u1efa\u1efc\u1efc"+
"\u1efe\u1efe\u1f00\u1f00\u1f0a\u1f11\u1f1a\u1f1f\u1f2a\u1f31\u1f3a\u1f41"+
"\u1f4a\u1f4f\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f5f\u1f61\u1f61\u1f6a\u1f71"+
"\u1fba\u1fbd\u1fca\u1fcd\u1fda\u1fdd\u1fea\u1fee\u1ffa\u1ffd\u2104\u2104"+
"\u2109\u2109\u210d\u210f\u2112\u2114\u2117\u2117\u211b\u211f\u2126\u2126"+
"\u2128\u2128\u212a\u212a\u212c\u212f\u2132\u2135\u2140\u2141\u2147\u2147"+
"\u2185\u2185\u2c02\u2c30\u2c62\u2c62\u2c64\u2c66\u2c69\u2c69\u2c6b\u2c6b"+
"\u2c6d\u2c6d\u2c6f\u2c72\u2c74\u2c74\u2c77\u2c77\u2c80\u2c82\u2c84\u2c84"+
"\u2c86\u2c86\u2c88\u2c88\u2c8a\u2c8a\u2c8c\u2c8c\u2c8e\u2c8e\u2c90\u2c90"+
"\u2c92\u2c92\u2c94\u2c94\u2c96\u2c96\u2c98\u2c98\u2c9a\u2c9a\u2c9c\u2c9c"+
"\u2c9e\u2c9e\u2ca0\u2ca0\u2ca2\u2ca2\u2ca4\u2ca4\u2ca6\u2ca6\u2ca8\u2ca8"+
"\u2caa\u2caa\u2cac\u2cac\u2cae\u2cae\u2cb0\u2cb0\u2cb2\u2cb2\u2cb4\u2cb4"+
"\u2cb6\u2cb6\u2cb8\u2cb8\u2cba\u2cba\u2cbc\u2cbc\u2cbe\u2cbe\u2cc0\u2cc0"+
"\u2cc2\u2cc2\u2cc4\u2cc4\u2cc6\u2cc6\u2cc8\u2cc8\u2cca\u2cca\u2ccc\u2ccc"+
"\u2cce\u2cce\u2cd0\u2cd0\u2cd2\u2cd2\u2cd4\u2cd4\u2cd6\u2cd6\u2cd8\u2cd8"+
"\u2cda\u2cda\u2cdc\u2cdc\u2cde\u2cde\u2ce0\u2ce0\u2ce2\u2ce2\u2ce4\u2ce4"+
"\u2ced\u2ced\u2cef\u2cef\u2cf4\u2cf4\ua642\ua642\ua644\ua644\ua646\ua646"+
"\ua648\ua648\ua64a\ua64a\ua64c\ua64c\ua64e\ua64e\ua650\ua650\ua652\ua652"+
"\ua654\ua654\ua656\ua656\ua658\ua658\ua65a\ua65a\ua65c\ua65c\ua65e\ua65e"+
"\ua660\ua660\ua662\ua662\ua664\ua664\ua666\ua666\ua668\ua668\ua66a\ua66a"+
"\ua66c\ua66c\ua66e\ua66e\ua682\ua682\ua684\ua684\ua686\ua686\ua688\ua688"+
"\ua68a\ua68a\ua68c\ua68c\ua68e\ua68e\ua690\ua690\ua692\ua692\ua694\ua694"+
"\ua696\ua696\ua698\ua698\ua724\ua724\ua726\ua726\ua728\ua728\ua72a\ua72a"+
"\ua72c\ua72c\ua72e\ua72e\ua730\ua730\ua734\ua734\ua736\ua736\ua738\ua738"+
"\ua73a\ua73a\ua73c\ua73c\ua73e\ua73e\ua740\ua740\ua742\ua742\ua744\ua744"+
"\ua746\ua746\ua748\ua748\ua74a\ua74a\ua74c\ua74c\ua74e\ua74e\ua750\ua750"+
"\ua752\ua752\ua754\ua754\ua756\ua756\ua758\ua758\ua75a\ua75a\ua75c\ua75c"+
"\ua75e\ua75e\ua760\ua760\ua762\ua762\ua764\ua764\ua766\ua766\ua768\ua768"+
"\ua76a\ua76a\ua76c\ua76c\ua76e\ua76e\ua770\ua770\ua77b\ua77b\ua77d\ua77d"+
"\ua77f\ua780\ua782\ua782\ua784\ua784\ua786\ua786\ua788\ua788\ua78d\ua78d"+
"\ua78f\ua78f\ua792\ua792\ua794\ua794\ua7a2\ua7a2\ua7a4\ua7a4\ua7a6\ua7a6"+
"\ua7a8\ua7a8\ua7aa\ua7aa\ua7ac\ua7ac\uff23\uff3c%\2\62;\u0662\u066b\u06f2"+
"\u06fb\u07c2\u07cb\u0968\u0971\u09e8\u09f1\u0a68\u0a71\u0ae8\u0af1\u0b68"+
"\u0b71\u0be8\u0bf1\u0c68\u0c71\u0ce8\u0cf1\u0d68\u0d71\u0e52\u0e5b\u0ed2"+
"\u0edb\u0f22\u0f2b\u1042\u104b\u1092\u109b\u17e2\u17eb\u1812\u181b\u1948"+
"\u1951\u19d2\u19db\u1a82\u1a8b\u1a92\u1a9b\u1b52\u1b5b\u1bb2\u1bbb\u1c42"+
"\u1c4b\u1c52\u1c5b\ua622\ua62b\ua8d2\ua8db\ua902\ua90b\ua9d2\ua9db\uaa52"+
"\uaa5b\uabf2\uabfb\uff12\uff1b\t\2\u16f0\u16f2\u2162\u2184\u2187\u218a"+
"\u3009\u3009\u3023\u302b\u303a\u303c\ua6e8\ua6f1\2\36\2\3\3\2\2\2\2\5"+
"\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2"+
"\3\21\3\2\2\2\5\23\3\2\2\2\7\25\3\2\2\2\t\27\3\2\2\2\13\31\3\2\2\2\r\33"+
"\3\2\2\2\17\35\3\2\2\2\21\22\t\2\2\2\22\4\3\2\2\2\23\24\t\3\2\2\24\6\3"+
"\2\2\2\25\26\t\4\2\2\26\b\3\2\2\2\27\30\t\5\2\2\30\n\3\2\2\2\31\32\t\6"+
"\2\2\32\f\3\2\2\2\33\34\t\7\2\2\34\16\3\2\2\2\35\36\t\b\2\2\36\20\3\2"+
"\2\2\3\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
}
@@ -1,5 +1,4 @@
// Generated from
// D:/Projects/AndroidStudioProjects/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/xml\XMLLexer.g4 by ANTLR 4.9.2
// Generated from XMLLexer.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.xml;
import org.antlr.v4.runtime.CharStream;
@@ -15,12 +14,6 @@ import org.antlr.v4.runtime.dfa.DFA;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class XMLLexer extends Lexer {
static {
RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION);
}
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
public static final int COLON = 1,
COMMENT = 2,
CDATA = 3,
@@ -42,146 +35,11 @@ public class XMLLexer extends Lexer {
S = 19,
PI = 20;
public static final int INSIDE = 1, PROC_INSTR = 2;
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE", "INSIDE", "PROC_INSTR"};
private static String[] makeRuleNames() {
return new String[] {
"COLON",
"COMMENT",
"CDATA",
"DTD",
"EntityRef",
"CharRef",
"SEA_WS",
"OPEN",
"OPEN_SLASH",
"XMLDeclOpen",
"SPECIAL_OPEN",
"TEXT",
"CLOSE",
"SPECIAL_CLOSE",
"SLASH_CLOSE",
"SLASH",
"EQUALS",
"STRING",
"Name",
"S",
"HEXDIGIT",
"DIGIT",
"NameChar",
"NameStartChar",
"PI",
"IGNORE"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
null, "':'", null, null, null, null, null, null, "'<'", "'</'", null, null, "'>'", null,
"'/>'", "'/'", "'='"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null,
"COLON",
"COMMENT",
"CDATA",
"DTD",
"EntityRef",
"CharRef",
"SEA_WS",
"OPEN",
"OPEN_SLASH",
"XMLDeclOpen",
"TEXT",
"CLOSE",
"SPECIAL_CLOSE",
"SLASH_CLOSE",
"SLASH",
"EQUALS",
"STRING",
"Name",
"S",
"PI"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public XMLLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
@Override
public String getGrammarFileName() {
return "XMLLexer.g4";
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
public ATN getATN() {
return _ATN;
}
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\26\u00f4\b\1\b\1"
+ "\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4"
@@ -264,6 +122,31 @@ public class XMLLexer extends Lexer {
+ "8\3\2\2\2\25\2\3\4CWdu\u0080\u0084\u0088\u008b\u008d\u00ad\u00c5\u00cd"
+ "\u00d1\u00d7\u00e6\u00e9\7\b\2\2\7\3\2\5\2\2\7\4\2\6\2\2";
public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray());
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
public static String[] channelNames = {"DEFAULT_TOKEN_CHANNEL", "HIDDEN"};
public static String[] modeNames = {"DEFAULT_MODE", "INSIDE", "PROC_INSTR"};
static {
RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION);
}
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
@@ -271,4 +154,114 @@ public class XMLLexer extends Lexer {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
public XMLLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
}
private static String[] makeRuleNames() {
return new String[] {
"COLON",
"COMMENT",
"CDATA",
"DTD",
"EntityRef",
"CharRef",
"SEA_WS",
"OPEN",
"OPEN_SLASH",
"XMLDeclOpen",
"SPECIAL_OPEN",
"TEXT",
"CLOSE",
"SPECIAL_CLOSE",
"SLASH_CLOSE",
"SLASH",
"EQUALS",
"STRING",
"Name",
"S",
"HEXDIGIT",
"DIGIT",
"NameChar",
"NameStartChar",
"PI",
"IGNORE"
};
}
private static String[] makeLiteralNames() {
return new String[] {
null, "':'", null, null, null, null, null, null, "'<'", "'</'", null, null, "'>'", null,
"'/>'", "'/'", "'='"
};
}
private static String[] makeSymbolicNames() {
return new String[] {
null,
"COLON",
"COMMENT",
"CDATA",
"DTD",
"EntityRef",
"CharRef",
"SEA_WS",
"OPEN",
"OPEN_SLASH",
"XMLDeclOpen",
"TEXT",
"CLOSE",
"SPECIAL_CLOSE",
"SLASH_CLOSE",
"SLASH",
"EQUALS",
"STRING",
"Name",
"S",
"PI"
};
}
@Override
public String[] getRuleNames() {
return ruleNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
@Override
public String getSerializedATN() {
return _serializedATN;
}
@Override
public String getGrammarFileName() {
return "XMLLexer.g4";
}
@Override
public ATN getATN() {
return _ATN;
}
@Override
public String[] getChannelNames() {
return channelNames;
}
@Override
public String[] getModeNames() {
return modeNames;
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
}
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,4 @@
// Generated from
// D:/Projects/AndroidStudioProjects/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/xml\XMLParser.g4 by ANTLR 4.9.2
// Generated from XMLParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.xml;
import org.antlr.v4.runtime.ParserRuleContext;
@@ -166,20 +165,6 @@ public class XMLParserBaseListener implements XMLParserListener {
@Override
public void exitMisc(XMLParser.MiscContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void enterEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void exitEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
@@ -187,6 +172,7 @@ public class XMLParserBaseListener implements XMLParserListener {
*/
@Override
public void visitTerminal(TerminalNode node) {}
/**
* {@inheritDoc}
*
@@ -194,4 +180,20 @@ public class XMLParserBaseListener implements XMLParserListener {
*/
@Override
public void visitErrorNode(ErrorNode node) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void enterEveryRule(ParserRuleContext ctx) {}
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.
*/
@Override
public void exitEveryRule(ParserRuleContext ctx) {}
}
@@ -1,5 +1,4 @@
// Generated from
// D:/Projects/AndroidStudioProjects/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/xml\XMLParser.g4 by ANTLR 4.9.2
// Generated from XMLParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.xml;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
@@ -1,5 +1,4 @@
// Generated from
// D:/Projects/AndroidStudioProjects/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/xml\XMLParser.g4 by ANTLR 4.9.2
// Generated from XMLParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.xml;
import org.antlr.v4.runtime.tree.ParseTreeListener;
@@ -1,5 +1,4 @@
// Generated from
// D:/Projects/AndroidStudioProjects/AndroidIDE/lexers/src/main/java/com/itsaky/androidide/lexers/xml\XMLParser.g4 by ANTLR 4.9.2
// Generated from XMLParser.g4 by ANTLR 4.9.3
package com.itsaky.androidide.lexers.xml;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
@@ -29,7 +29,8 @@ import com.sun.tools.javac.util.Context;
public class CancelService {
/** The context key for the parameter name resolver. */
protected static final Context.Key<CancelService> cancelServiceKey = new Context.Key<>();
protected static final Context.Key<CancelService> cancelServiceKey =
new Context.Key<>();
@NonNull
public static CancelService instance(@NonNull Context context) {
@@ -43,9 +43,7 @@ import com.sun.tools.javac.util.Position;
public class NBParserFactory extends ParserFactory {
public static void preRegister(Context context) {
context.put(
parserFactoryKey,
(Context.Factory<ParserFactory>) NBParserFactory::new);
context.put(parserFactoryKey, (Context.Factory<ParserFactory>) NBParserFactory::new);
}
private final ScannerFactory scannerFactory;