mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
Added Cpp/C highlighting
This commit is contained in:
@@ -0,0 +1,248 @@
|
||||
package com.itsaky.androidide.language.cpp;
|
||||
|
||||
import static com.itsaky.androidide.lexers.cpp.CPP14Lexer.*;
|
||||
import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.LITERAL;
|
||||
import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.OPERATOR;
|
||||
import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TEXT_NORMAL;
|
||||
import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TYPE_NAME;
|
||||
import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forComment;
|
||||
import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forKeyword;
|
||||
import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forString;
|
||||
import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.get;
|
||||
|
||||
import com.itsaky.androidide.lexers.cpp.CPP14Lexer;
|
||||
import com.itsaky.androidide.lexers.cpp.CPP14Parser;
|
||||
import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE;
|
||||
import com.itsaky.androidide.utils.CharSequenceReader;
|
||||
import com.itsaky.androidide.utils.ILogger;
|
||||
|
||||
import io.github.rosemoe.sora.lang.analysis.SimpleAnalyzeManager;
|
||||
import io.github.rosemoe.sora.lang.styling.CodeBlock;
|
||||
import io.github.rosemoe.sora.lang.styling.MappedSpans;
|
||||
import io.github.rosemoe.sora.lang.styling.Styles;
|
||||
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.CodePointCharStream;
|
||||
import org.antlr.v4.runtime.CommonTokenStream;
|
||||
import org.antlr.v4.runtime.Token;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Stack;
|
||||
|
||||
public class CppAnalyzer extends SimpleAnalyzeManager<Void> {
|
||||
|
||||
private static final ILogger LOG = ILogger.newInstance("CppAnalyzer");
|
||||
|
||||
@Override
|
||||
protected Styles analyze(StringBuilder text, Delegate<Void> delegate) {
|
||||
final var styles = new Styles();
|
||||
final var colors = new MappedSpans.Builder();
|
||||
final CodePointCharStream stream;
|
||||
try {
|
||||
stream = CharStreams.fromReader(new CharSequenceReader(text));
|
||||
} catch (IOException e) {
|
||||
LOG.error("Unable to read text to analyze", e);
|
||||
return styles;
|
||||
}
|
||||
|
||||
final var lexer = new CPP14Lexer(stream);
|
||||
// final var parser = new CPP14Parser(new CommonTokenStream(lexer));
|
||||
final var stack = new Stack<CodeBlock>();
|
||||
Token token;
|
||||
int line, column, lastLine = 1, currSwitch = 0, maxSwitch = 0, type, previous = 0;
|
||||
boolean isFirst = true;
|
||||
|
||||
while (!delegate.isCancelled()) {
|
||||
token = lexer.nextToken();
|
||||
if (token == null) {
|
||||
break;
|
||||
}
|
||||
|
||||
line = token.getLine() - 1;
|
||||
column = token.getCharPositionInLine();
|
||||
type = token.getType();
|
||||
|
||||
if (type == CPP14Lexer.EOF) {
|
||||
lastLine = line;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case Whitespace:
|
||||
if (isFirst) {
|
||||
colors.addNormalIfNull();
|
||||
}
|
||||
break;
|
||||
case Alignas:
|
||||
case Alignof:
|
||||
case Asm:
|
||||
case Auto:
|
||||
case Break:
|
||||
case Class:
|
||||
case Const:
|
||||
case Catch:
|
||||
case Case:
|
||||
case Constexpr:
|
||||
case Const_cast:
|
||||
case Continue:
|
||||
case Decltype:
|
||||
case Default:
|
||||
case Delete:
|
||||
case Do:
|
||||
case Dynamic_cast:
|
||||
case Else:
|
||||
case Enum:
|
||||
case Explicit:
|
||||
case Export:
|
||||
case Extern:
|
||||
case Final:
|
||||
case For:
|
||||
case Friend:
|
||||
case Goto:
|
||||
case If:
|
||||
case Inline:
|
||||
case Mutable:
|
||||
case Namespace:
|
||||
case New:
|
||||
case Noexcept:
|
||||
case Operator:
|
||||
case Override:
|
||||
case Private:
|
||||
case Protected:
|
||||
case Public:
|
||||
case Register:
|
||||
case Reinterpret_cast:
|
||||
case Return:
|
||||
case Sizeof:
|
||||
case Signed:
|
||||
case Static:
|
||||
case Static_cast:
|
||||
case Static_assert:
|
||||
case Struct:
|
||||
case Switch:
|
||||
case Template:
|
||||
case This:
|
||||
case Throw:
|
||||
case Thread_local:
|
||||
case Try:
|
||||
case Typedef:
|
||||
case Typeid_:
|
||||
case Typename_:
|
||||
case Unsigned:
|
||||
case Union:
|
||||
case Using:
|
||||
case Virtual:
|
||||
case Volatile:
|
||||
case While:
|
||||
case Void:
|
||||
colors.addIfNeeded(line, column, forKeyword());
|
||||
break;
|
||||
case Bool:
|
||||
case Char:
|
||||
case Char16:
|
||||
case Char32:
|
||||
case Double:
|
||||
case Float:
|
||||
case Int:
|
||||
case Long:
|
||||
case Short:
|
||||
case Wchar:
|
||||
colors.addIfNeeded(line, column, get(TYPE_NAME));
|
||||
break;
|
||||
case LeftParen:
|
||||
case LeftBracket:
|
||||
case LeftBrace:
|
||||
case Dot:
|
||||
case RightParen:
|
||||
case RightBracket:
|
||||
case RightBrace:
|
||||
case Semi:
|
||||
case Comma:
|
||||
colors.addIfNeeded(line, column, get(OPERATOR));
|
||||
break;
|
||||
case Plus:
|
||||
case Minus:
|
||||
case Star:
|
||||
case Div:
|
||||
case Mod:
|
||||
case Caret:
|
||||
case And:
|
||||
case Or:
|
||||
case Tilde:
|
||||
case Not:
|
||||
case Assign:
|
||||
case Less:
|
||||
case Greater:
|
||||
case PlusAssign:
|
||||
case MinusAssign:
|
||||
case StarAssign:
|
||||
case DivAssign:
|
||||
case ModAssign:
|
||||
case XorAssign:
|
||||
case AndAssign:
|
||||
case OrAssign:
|
||||
case RightShiftAssign:
|
||||
case LeftShiftAssign:
|
||||
case Equal:
|
||||
case NotEqual:
|
||||
case LessEqual:
|
||||
case GreaterEqual:
|
||||
case AndAnd:
|
||||
case OrOr:
|
||||
case PlusPlus:
|
||||
case MinusMinus:
|
||||
case Arrow:
|
||||
case ArrowStar:
|
||||
case Question:
|
||||
case Colon:
|
||||
case Doublecolon:
|
||||
case DotStar:
|
||||
case Ellipsis:
|
||||
colors.addIfNeeded(line, column, get(OPERATOR));
|
||||
break;
|
||||
case IntegerLiteral:
|
||||
case DecimalLiteral:
|
||||
case OctalLiteral:
|
||||
case HexadecimalLiteral:
|
||||
case BinaryLiteral:
|
||||
case Integersuffix:
|
||||
case CharacterLiteral:
|
||||
case FloatingLiteral:
|
||||
case StringLiteral:
|
||||
case BooleanLiteral:
|
||||
case Nullptr:
|
||||
case True_:
|
||||
case False_:
|
||||
colors.addIfNeeded(line, column, get(LITERAL));
|
||||
break;
|
||||
case BlockComment:
|
||||
case LineComment:
|
||||
colors.addIfNeeded(line, column, get(SchemeAndroidIDE.COMMENT));
|
||||
break;
|
||||
case MultiLineMacro:
|
||||
case Directive:
|
||||
colors.addIfNeeded(line, column, forString());
|
||||
break;
|
||||
|
||||
default:
|
||||
colors.addIfNeeded(line, column, get(TEXT_NORMAL));
|
||||
break;
|
||||
}
|
||||
|
||||
isFirst = false;
|
||||
if (type != Whitespace) {
|
||||
previous = type;
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.isEmpty() && currSwitch > maxSwitch) {
|
||||
maxSwitch = currSwitch;
|
||||
}
|
||||
|
||||
colors.determine(lastLine);
|
||||
styles.setSuppressSwitch(maxSwitch + 10);
|
||||
styles.spans = colors.build();
|
||||
|
||||
return styles;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
/************************************************************************************
|
||||
* 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.cpp;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.itsaky.androidide.language.IDELanguage;
|
||||
|
||||
import com.itsaky.androidide.language.java.JavaLanguage;
|
||||
import com.itsaky.androidide.utils.CharSequenceReader;
|
||||
import com.itsaky.androidide.utils.ILogger;
|
||||
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.Token;
|
||||
|
||||
import java.io.StringReader;
|
||||
import com.itsaky.androidide.lexers.cpp.CPP14Lexer;
|
||||
|
||||
import io.github.rosemoe.sora.lang.analysis.AnalyzeManager;
|
||||
import io.github.rosemoe.sora.lang.completion.CompletionCancelledException;
|
||||
import io.github.rosemoe.sora.lang.completion.CompletionPublisher;
|
||||
import io.github.rosemoe.sora.lang.smartEnter.NewlineHandleResult;
|
||||
import io.github.rosemoe.sora.lang.smartEnter.NewlineHandler;
|
||||
import io.github.rosemoe.sora.text.CharPosition;
|
||||
import io.github.rosemoe.sora.text.ContentReference;
|
||||
import io.github.rosemoe.sora.text.TextUtils;
|
||||
import io.github.rosemoe.sora.widget.SymbolPairMatch;
|
||||
|
||||
public class CppLanguage extends IDELanguage {
|
||||
|
||||
private static final ILogger LOG = ILogger.newInstance("CppLanguage");
|
||||
private CppAnalyzer analyzer;
|
||||
private final NewlineHandler[] newlineHandlers = new NewlineHandler[] {new BraceHandler()};
|
||||
|
||||
public CppLanguage() {
|
||||
analyzer = new CppAnalyzer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIndentAdvance(@NonNull String line) {
|
||||
try {
|
||||
CPP14Lexer lexer = new CPP14Lexer(CharStreams.fromReader(new StringReader(line)));
|
||||
Token token;
|
||||
int advance = 0;
|
||||
while (((token = lexer.nextToken()) != null && token.getType() != token.EOF)) {
|
||||
switch (token.getType()) {
|
||||
case CPP14Lexer.LeftBrace:
|
||||
advance++;
|
||||
break;
|
||||
case CPP14Lexer.RightBrace:
|
||||
advance--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
advance = Math.max(0, advance);
|
||||
return advance * getTabSize();
|
||||
} catch (Throwable e) {
|
||||
LOG.error("Error calculating indent advance", e);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SymbolPairMatch getSymbolPairs() {
|
||||
return new CppSymbolPairs();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public AnalyzeManager getAnalyzeManager() {
|
||||
return analyzer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInterruptionLevel() {
|
||||
return INTERRUPTION_LEVEL_STRONG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void requireAutoComplete(
|
||||
@NonNull ContentReference content,
|
||||
@NonNull CharPosition position,
|
||||
@NonNull CompletionPublisher publisher,
|
||||
@NonNull Bundle extraArguments)
|
||||
throws CompletionCancelledException {
|
||||
|
||||
// completer.complete(content, position, publisher, extraArguments);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIndentAdvance(@NonNull ContentReference content, int line, int column) {
|
||||
return getIndentAdvance(content.getLine(line).substring(0, column));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence format(CharSequence content) {
|
||||
return content;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NewlineHandler[] getNewlineHandlers() {
|
||||
return newlineHandlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
analyzer = null;
|
||||
}
|
||||
|
||||
private static class CppSymbolPairs extends SymbolPairMatch {
|
||||
public CppSymbolPairs() {
|
||||
super.putPair('{', new Replacement("{}", 1));
|
||||
super.putPair('(', new Replacement("()", 1));
|
||||
super.putPair('[', new Replacement("[]", 1));
|
||||
super.putPair('"', new Replacement("\"\"", 1));
|
||||
super.putPair('\'', new Replacement("''", 1));
|
||||
super.putPair('<', new Replacement("<>", 1));
|
||||
}
|
||||
}
|
||||
|
||||
class BraceHandler implements NewlineHandler {
|
||||
|
||||
@Override
|
||||
public boolean matchesRequirement(String beforeText, String afterText) {
|
||||
beforeText = beforeText.trim();
|
||||
afterText = afterText.trim();
|
||||
return beforeText.endsWith("{") && afterText.startsWith("}");
|
||||
}
|
||||
|
||||
@Override
|
||||
public NewlineHandleResult handleNewline(String beforeText, String afterText, int tabSize) {
|
||||
int count = TextUtils.countLeadingSpaceCount(beforeText, tabSize);
|
||||
int advanceBefore = getIndentAdvance(beforeText);
|
||||
int advanceAfter = getIndentAdvance(afterText);
|
||||
String text;
|
||||
StringBuilder sb =
|
||||
new StringBuilder("\n")
|
||||
.append(
|
||||
TextUtils.createIndent(
|
||||
count + advanceBefore, tabSize, useTab()))
|
||||
.append('\n')
|
||||
.append(
|
||||
text =
|
||||
TextUtils.createIndent(
|
||||
count + advanceAfter, tabSize, useTab()));
|
||||
int shiftLeft = text.length() + 1;
|
||||
return new NewlineHandleResult(sb, shiftLeft);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,10 +44,12 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.blankj.utilcode.util.FileIOUtils;
|
||||
import com.blankj.utilcode.util.FileUtils;
|
||||
import com.blankj.utilcode.util.SizeUtils;
|
||||
import com.itsaky.androidide.adapters.CompletionListAdapter;
|
||||
import com.itsaky.androidide.app.StudioApp;
|
||||
import com.itsaky.androidide.databinding.LayoutCodeEditorBinding;
|
||||
import com.itsaky.androidide.language.cpp.CppLanguage;
|
||||
import com.itsaky.androidide.language.groovy.GroovyLanguage;
|
||||
import com.itsaky.androidide.language.java.JavaLanguage;
|
||||
import com.itsaky.androidide.language.xml.XMLLanguage;
|
||||
@@ -61,8 +63,10 @@ import com.itsaky.androidide.utils.ILogger;
|
||||
import com.itsaky.androidide.utils.LSPUtils;
|
||||
import com.itsaky.androidide.utils.TypefaceUtils;
|
||||
import com.itsaky.inflater.values.ValuesTableFactory;
|
||||
import com.itsaky.lsp.api.ILanguageServer;
|
||||
import com.itsaky.lsp.models.Range;
|
||||
|
||||
import io.github.rosemoe.sora.lang.Language;
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.Token;
|
||||
|
||||
@@ -87,357 +91,386 @@ import io.github.rosemoe.sora.widget.component.Magnifier;
|
||||
@SuppressLint("ViewConstructor") // This view is always dynamically created.
|
||||
public class CodeEditorView extends FrameLayout {
|
||||
|
||||
private static final ILogger LOG = ILogger.newInstance("CodeEditorView");
|
||||
private final File file;
|
||||
private final LayoutCodeEditorBinding binding;
|
||||
private boolean isModified;
|
||||
private boolean isFirstCreate;
|
||||
private static final ILogger LOG = ILogger.newInstance("CodeEditorView");
|
||||
private final File file;
|
||||
private final LayoutCodeEditorBinding binding;
|
||||
private boolean isModified;
|
||||
private boolean isFirstCreate;
|
||||
|
||||
public CodeEditorView(
|
||||
@NonNull Context context, @NonNull File file, final @NonNull Range selection) {
|
||||
super(context);
|
||||
this.file = file;
|
||||
this.isModified = false;
|
||||
this.isFirstCreate = true;
|
||||
public CodeEditorView(
|
||||
@NonNull Context context, @NonNull File file, final @NonNull Range selection) {
|
||||
super(context);
|
||||
this.file = file;
|
||||
this.isModified = false;
|
||||
this.isFirstCreate = true;
|
||||
|
||||
this.binding = LayoutCodeEditorBinding.inflate(LayoutInflater.from(context));
|
||||
this.binding.editor.setTypefaceText(TypefaceUtils.jetbrainsMono());
|
||||
this.binding.editor.setHighlightCurrentBlock(true);
|
||||
this.binding.editor.getProps().autoCompletionOnComposing = true;
|
||||
this.binding.editor.setAutoCompletionItemAdapter(new CompletionListAdapter());
|
||||
this.binding.editor.setDividerWidth(SizeUtils.dp2px(1));
|
||||
this.binding.editor.setColorScheme(new SchemeAndroidIDE());
|
||||
this.binding.editor.subscribeEvent(
|
||||
ContentChangeEvent.class, ((event, unsubscribe) -> handleContentChange(event)));
|
||||
this.binding = LayoutCodeEditorBinding.inflate(LayoutInflater.from(context));
|
||||
this.binding.editor.setTypefaceText(TypefaceUtils.jetbrainsMono());
|
||||
this.binding.editor.setHighlightCurrentBlock(true);
|
||||
this.binding.editor.getProps().autoCompletionOnComposing = true;
|
||||
this.binding.editor.setAutoCompletionItemAdapter(new CompletionListAdapter());
|
||||
this.binding.editor.setDividerWidth(SizeUtils.dp2px(1));
|
||||
this.binding.editor.setColorScheme(new SchemeAndroidIDE());
|
||||
this.binding.editor.subscribeEvent(
|
||||
ContentChangeEvent.class, ((event, unsubscribe) -> handleContentChange(event)));
|
||||
|
||||
this.binding.diagnosticTextContainer.setVisibility(GONE);
|
||||
this.binding.diagnosticTextContainer.setVisibility(GONE);
|
||||
|
||||
removeAllViews();
|
||||
addView(this.binding.getRoot());
|
||||
removeAllViews();
|
||||
addView(this.binding.getRoot());
|
||||
|
||||
selection.validate();
|
||||
CompletableFuture.runAsync(
|
||||
() -> {
|
||||
final var contents = FileIOUtils.readFile2String(file);
|
||||
binding.editor.post(
|
||||
() -> {
|
||||
binding.editor.setText(contents, createEditorArgs());
|
||||
postRead();
|
||||
if (LSPUtils.isEqual(selection.getStart(), selection.getEnd())) {
|
||||
getEditor()
|
||||
.setSelection(
|
||||
selection.getStart().getLine(), selection.getStart().getColumn());
|
||||
} else {
|
||||
getEditor().setSelection(selection);
|
||||
selection.validate();
|
||||
CompletableFuture.runAsync(
|
||||
() -> {
|
||||
final var contents = FileIOUtils.readFile2String(file);
|
||||
binding.editor.post(
|
||||
() -> {
|
||||
binding.editor.setText(contents, createEditorArgs());
|
||||
postRead();
|
||||
if (LSPUtils.isEqual(selection.getStart(), selection.getEnd())) {
|
||||
getEditor()
|
||||
.setSelection(
|
||||
selection.getStart().getLine(),
|
||||
selection.getStart().getColumn());
|
||||
} else {
|
||||
getEditor().setSelection(selection);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
configureEditorIfNeeded();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private Bundle createEditorArgs() {
|
||||
var bundle = new Bundle();
|
||||
if (getFile() == null) {
|
||||
return bundle;
|
||||
}
|
||||
|
||||
bundle.putString(IDEEditor.KEY_FILE, getFile().getAbsolutePath());
|
||||
return bundle;
|
||||
}
|
||||
|
||||
private void handleContentChange(@NonNull ContentChangeEvent event) {
|
||||
isModified = true;
|
||||
|
||||
if (event.getAction() == ContentChangeEvent.ACTION_INSERT) {
|
||||
final var editor = event.getEditor();
|
||||
final var content = event.getChangedText();
|
||||
final var endLine = event.getChangeEnd().line;
|
||||
final var endColumn = event.getChangeEnd().column;
|
||||
if (file.getName().endsWith(".xml")) {
|
||||
boolean isOpen = false;
|
||||
try {
|
||||
isOpen = editor.getText().charAt(editor.getCursor().getLeft() - 2) == '<';
|
||||
} catch (Throwable th) {
|
||||
LOG.error(th);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
configureEditorIfNeeded();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private Bundle createEditorArgs() {
|
||||
var bundle = new Bundle();
|
||||
if (getFile() == null) {
|
||||
return bundle;
|
||||
if (isOpen && "/".contentEquals(content)) {
|
||||
closeCurrentTag(editor.getText().toString(), endLine, endColumn);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bundle.putString(IDEEditor.KEY_FILE, getFile().getAbsolutePath());
|
||||
return bundle;
|
||||
}
|
||||
public boolean save() {
|
||||
final var file = getFile();
|
||||
if (file == null) {
|
||||
LOG.error("Cannot save file. File instance is null.");
|
||||
return false;
|
||||
}
|
||||
|
||||
private void handleContentChange(@NonNull ContentChangeEvent event) {
|
||||
isModified = true;
|
||||
if (!isModified() && file.exists()) {
|
||||
LOG.info(file.getName());
|
||||
LOG.info("File was not modified. Skipping save operation.");
|
||||
return false;
|
||||
}
|
||||
|
||||
final var text = getEditor().getText().toString();
|
||||
|
||||
if (event.getAction() == ContentChangeEvent.ACTION_INSERT) {
|
||||
final var editor = event.getEditor();
|
||||
final var content = event.getChangedText();
|
||||
final var endLine = event.getChangeEnd().line;
|
||||
final var endColumn = event.getChangeEnd().column;
|
||||
if (file.getName().endsWith(".xml")) {
|
||||
boolean isOpen = false;
|
||||
try {
|
||||
isOpen = editor.getText().charAt(editor.getCursor().getLeft() - 2) == '<';
|
||||
FileUtil.writeFile(file, text);
|
||||
notifySaved();
|
||||
isModified = false;
|
||||
return true;
|
||||
} catch (IOException io) {
|
||||
LOG.error("Failed to save file", file, io);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private List<CharSequence> getLines(Content text) {
|
||||
final var count = text.getLineCount();
|
||||
final var result = new ArrayList<CharSequence>();
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
result.add(text.getLine(i));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public IDEEditor getEditor() {
|
||||
return binding.editor;
|
||||
}
|
||||
|
||||
public LayoutCodeEditorBinding getBinding() {
|
||||
return binding;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public File getFile() {
|
||||
return file;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return binding.editor.getText().toString();
|
||||
}
|
||||
|
||||
public boolean isModified() {
|
||||
return isModified;
|
||||
}
|
||||
|
||||
public void onPause() {
|
||||
// unimplemented
|
||||
}
|
||||
|
||||
public void onResume() {
|
||||
configureEditorIfNeeded();
|
||||
}
|
||||
|
||||
public void onEditorSelected() {
|
||||
final var editor = getEditor();
|
||||
if (editor != null) {
|
||||
editor.onEditorSelected();
|
||||
}
|
||||
}
|
||||
|
||||
public void undo() {
|
||||
if (binding.editor.canUndo()) {
|
||||
binding.editor.undo();
|
||||
}
|
||||
}
|
||||
|
||||
public void redo() {
|
||||
if (binding.editor.canRedo()) {
|
||||
binding.editor.redo();
|
||||
}
|
||||
}
|
||||
|
||||
public void findDefinition() {
|
||||
binding.editor.findDefinition();
|
||||
}
|
||||
|
||||
public void findReferences() {
|
||||
binding.editor.findReferences();
|
||||
}
|
||||
|
||||
public void commentLine() {
|
||||
binding.editor.commentLine();
|
||||
}
|
||||
|
||||
public void uncommentLine() {
|
||||
binding.editor.uncommentLine();
|
||||
}
|
||||
|
||||
public void beginSearch() {
|
||||
binding.editor.beginSearchMode();
|
||||
}
|
||||
|
||||
protected void postRead() {
|
||||
binding.editor.setEditorLanguage(createLanguage(file));
|
||||
binding.editor.setLanguageServer(createLanguageServer(file));
|
||||
// File must be set only after setting the language server
|
||||
// This will make sure that textDocument/didOpen is sent
|
||||
binding.editor.setFile(getFile());
|
||||
|
||||
if (getContext() instanceof Activity) {
|
||||
((Activity) getContext()).invalidateOptionsMenu();
|
||||
}
|
||||
}
|
||||
|
||||
private ILanguageServer createLanguageServer(File file) {
|
||||
if (file.isFile()) {
|
||||
String ext = FileUtils.getFileExtension(file);
|
||||
switch (ext) {
|
||||
case "java":
|
||||
return StudioApp.getInstance().getJavaLanguageServer();
|
||||
case "xml":
|
||||
return StudioApp.getInstance().getXMLLanguageServer();
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Language createLanguage(File file) {
|
||||
if (file.isFile()) {
|
||||
String ext = FileUtils.getFileExtension(file);
|
||||
switch (ext) {
|
||||
case "java":
|
||||
return new JavaLanguage();
|
||||
case "xml":
|
||||
return new XMLLanguage();
|
||||
case "gradle":
|
||||
return new GroovyLanguage();
|
||||
case "kt":
|
||||
return new KotlinLanguage();
|
||||
case "c":
|
||||
case "h":
|
||||
case "cc":
|
||||
case "cpp":
|
||||
case "cxx":
|
||||
return new CppLanguage();
|
||||
default:
|
||||
return new EmptyLanguage();
|
||||
}
|
||||
}
|
||||
return new EmptyLanguage();
|
||||
}
|
||||
|
||||
private void configureEditorIfNeeded() {
|
||||
boolean sizeChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_SIZE_CHANGED;
|
||||
boolean ligaturesChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED;
|
||||
boolean flagsChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED;
|
||||
boolean drawHexChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED;
|
||||
boolean inputFlagsChanged =
|
||||
isFirstCreate || ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED;
|
||||
boolean wordWrapChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_WORD_WRAP_CHANGED;
|
||||
boolean magnifierChanged =
|
||||
isFirstCreate || ConstantsBridge.EDITOR_PREF_USE_MAGNIFIER_CHANGED;
|
||||
|
||||
final PreferenceManager prefs = StudioApp.getInstance().getPrefManager();
|
||||
|
||||
if (sizeChanged) {
|
||||
float textSize = prefs.getFloat(PreferenceManager.KEY_EDITOR_FONT_SIZE);
|
||||
if (textSize < 6 || textSize > 32) {
|
||||
textSize = 14;
|
||||
}
|
||||
|
||||
binding.editor.setTextSize(textSize);
|
||||
ConstantsBridge.EDITOR_PREF_SIZE_CHANGED = false;
|
||||
}
|
||||
|
||||
if (ligaturesChanged) {
|
||||
var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_FONT_LIGATURES, true);
|
||||
binding.editor.setLigatureEnabled(enabled);
|
||||
ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED = false;
|
||||
}
|
||||
|
||||
if (flagsChanged) {
|
||||
int flags = 0;
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_LEADING, true)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_WHITESPACE_LEADING;
|
||||
}
|
||||
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_TRAILING, false)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_WHITESPACE_TRAILING;
|
||||
}
|
||||
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_INNER, true)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_WHITESPACE_INNER;
|
||||
}
|
||||
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_EMPTY_LINE, true)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_WHITESPACE_FOR_EMPTY_LINE;
|
||||
}
|
||||
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_LINE_BREAK, true)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_LINE_SEPARATOR;
|
||||
}
|
||||
|
||||
binding.editor.setNonPrintablePaintingFlags(flags);
|
||||
ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED = false;
|
||||
}
|
||||
|
||||
if (inputFlagsChanged) {
|
||||
binding.editor.setInputType(IDEEditor.createInputFlags());
|
||||
ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED = false;
|
||||
}
|
||||
|
||||
if (drawHexChanged) {
|
||||
// TODO Do something about this
|
||||
// Maybe use spans...
|
||||
// binding.editor.setLineColorsEnabled (prefs.getBoolean
|
||||
// (PreferenceManager.KEY_EDITOR_DRAW_HEX, true));
|
||||
ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED = false;
|
||||
}
|
||||
|
||||
if (wordWrapChanged) {
|
||||
var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_WORD_WRAP, false);
|
||||
binding.editor.setWordwrap(enabled);
|
||||
ConstantsBridge.EDITOR_PREF_WORD_WRAP_CHANGED = false;
|
||||
}
|
||||
|
||||
if (magnifierChanged) {
|
||||
var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_USE_MAGNIFER, true);
|
||||
binding.editor.getComponent(Magnifier.class).setEnabled(enabled);
|
||||
ConstantsBridge.EDITOR_PREF_USE_MAGNIFIER_CHANGED = false;
|
||||
}
|
||||
|
||||
isFirstCreate = false;
|
||||
}
|
||||
|
||||
private void closeCurrentTag(String text, int line, int col) {
|
||||
try {
|
||||
XMLLexer lexer = new XMLLexer(CharStreams.fromReader(new StringReader(text)));
|
||||
Token token;
|
||||
boolean wasSlash = false, wasOpen = false;
|
||||
ArrayList<String> currentNames = new ArrayList<>();
|
||||
while (((token = lexer.nextToken()) != null && token.getType() != token.EOF)) {
|
||||
final int type = token.getType();
|
||||
if (type == XMLLexer.OPEN) {
|
||||
wasOpen = true;
|
||||
} else if (type == XMLLexer.Name) {
|
||||
if (wasOpen && wasSlash && currentNames.size() > 0) {
|
||||
currentNames.remove(0);
|
||||
} else if (wasOpen) {
|
||||
currentNames.add(0, token.getText());
|
||||
wasOpen = false;
|
||||
}
|
||||
} else if (type == XMLLexer.OPEN_SLASH) {
|
||||
int l = token.getLine() - 1;
|
||||
int c = token.getCharPositionInLine();
|
||||
if (l == line && c == col) {
|
||||
break;
|
||||
} else if (currentNames.size() > 0) {
|
||||
currentNames.remove(0);
|
||||
}
|
||||
} else if (type == XMLLexer.SLASH_CLOSE || type == XMLLexer.SPECIAL_CLOSE) {
|
||||
if (currentNames.size() > 0 && token.getText().trim().endsWith("/>")) {
|
||||
currentNames.remove(0);
|
||||
}
|
||||
} else if (type == XMLLexer.SLASH) {
|
||||
wasSlash = true;
|
||||
} else {
|
||||
wasOpen = wasSlash = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (currentNames.size() > 0) {
|
||||
binding.editor.getText().insert(line, col + 2, currentNames.get(0));
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
LOG.error(th);
|
||||
LOG.error("Unable to close current tag", th);
|
||||
}
|
||||
}
|
||||
|
||||
if (isOpen && "/".contentEquals(content)) {
|
||||
closeCurrentTag(editor.getText().toString(), endLine, endColumn);
|
||||
private void notifySaved() {
|
||||
binding.editor.didSave();
|
||||
|
||||
if (Objects.requireNonNull(getFile()).getName().endsWith(".xml")) {
|
||||
ValuesTableFactory.syncWithFile(getFile());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean save() {
|
||||
final var file = getFile();
|
||||
if (file == null) {
|
||||
LOG.error("Cannot save file. File instance is null.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!isModified() && file.exists()) {
|
||||
LOG.info(file.getName());
|
||||
LOG.info("File was not modified. Skipping save operation.");
|
||||
return false;
|
||||
/** Mark this files as saved. Even if it not saved. */
|
||||
public void markAsSaved() {
|
||||
isModified = false;
|
||||
notifySaved();
|
||||
}
|
||||
|
||||
final var text = getEditor().getText().toString();
|
||||
|
||||
try {
|
||||
FileUtil.writeFile(file, text);
|
||||
notifySaved();
|
||||
isModified = false;
|
||||
return true;
|
||||
} catch (IOException io) {
|
||||
LOG.error("Failed to save file", file, io);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private List<CharSequence> getLines(Content text) {
|
||||
final var count = text.getLineCount();
|
||||
final var result = new ArrayList<CharSequence>();
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
result.add(text.getLine(i));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public IDEEditor getEditor() {
|
||||
return binding.editor;
|
||||
}
|
||||
|
||||
public LayoutCodeEditorBinding getBinding() {
|
||||
return binding;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public File getFile() {
|
||||
return file;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return binding.editor.getText().toString();
|
||||
}
|
||||
|
||||
public boolean isModified() {
|
||||
return isModified;
|
||||
}
|
||||
|
||||
public void onPause() {
|
||||
// unimplemented
|
||||
}
|
||||
|
||||
public void onResume() {
|
||||
configureEditorIfNeeded();
|
||||
}
|
||||
|
||||
public void onEditorSelected() {
|
||||
final var editor = getEditor();
|
||||
if (editor != null) {
|
||||
editor.onEditorSelected();
|
||||
}
|
||||
}
|
||||
|
||||
public void undo() {
|
||||
if (binding.editor.canUndo()) {
|
||||
binding.editor.undo();
|
||||
}
|
||||
}
|
||||
|
||||
public void redo() {
|
||||
if (binding.editor.canRedo()) {
|
||||
binding.editor.redo();
|
||||
}
|
||||
}
|
||||
|
||||
public void findDefinition() {
|
||||
binding.editor.findDefinition();
|
||||
}
|
||||
|
||||
public void findReferences() {
|
||||
binding.editor.findReferences();
|
||||
}
|
||||
|
||||
public void commentLine() {
|
||||
binding.editor.commentLine();
|
||||
}
|
||||
|
||||
public void uncommentLine() {
|
||||
binding.editor.uncommentLine();
|
||||
}
|
||||
|
||||
public void beginSearch() {
|
||||
binding.editor.beginSearchMode();
|
||||
}
|
||||
|
||||
protected void postRead() {
|
||||
if (file.isFile() && file.getName().endsWith(".java")) {
|
||||
binding.editor.setEditorLanguage(new JavaLanguage());
|
||||
binding.editor.setLanguageServer(StudioApp.getInstance().getJavaLanguageServer());
|
||||
} else if (file.isFile() && file.getName().endsWith(".xml")) {
|
||||
binding.editor.setEditorLanguage(new XMLLanguage());
|
||||
binding.editor.setLanguageServer(StudioApp.getInstance().getXMLLanguageServer());
|
||||
} else if (file.isFile() && file.getName().endsWith(".gradle")) {
|
||||
binding.editor.setEditorLanguage(new GroovyLanguage());
|
||||
} else if (file.isFile() && file.getName().endsWith(".kt")) {
|
||||
binding.editor.setEditorLanguage(new KotlinLanguage());
|
||||
}
|
||||
else {
|
||||
binding.editor.setEditorLanguage(new EmptyLanguage());
|
||||
}
|
||||
|
||||
// File must be set only after setting the language server
|
||||
// This will make sure that textDocument/didOpen is sent
|
||||
binding.editor.setFile(getFile());
|
||||
|
||||
if (getContext() instanceof Activity) {
|
||||
((Activity) getContext()).invalidateOptionsMenu();
|
||||
}
|
||||
}
|
||||
|
||||
private void configureEditorIfNeeded() {
|
||||
boolean sizeChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_SIZE_CHANGED;
|
||||
boolean ligaturesChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED;
|
||||
boolean flagsChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED;
|
||||
boolean drawHexChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED;
|
||||
boolean inputFlagsChanged =
|
||||
isFirstCreate || ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED;
|
||||
boolean wordWrapChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_WORD_WRAP_CHANGED;
|
||||
boolean magnifierChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_USE_MAGNIFIER_CHANGED;
|
||||
|
||||
final PreferenceManager prefs = StudioApp.getInstance().getPrefManager();
|
||||
|
||||
if (sizeChanged) {
|
||||
float textSize = prefs.getFloat(PreferenceManager.KEY_EDITOR_FONT_SIZE);
|
||||
if (textSize < 6 || textSize > 32) {
|
||||
textSize = 14;
|
||||
}
|
||||
|
||||
binding.editor.setTextSize(textSize);
|
||||
ConstantsBridge.EDITOR_PREF_SIZE_CHANGED = false;
|
||||
}
|
||||
|
||||
if (ligaturesChanged) {
|
||||
var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_FONT_LIGATURES, true);
|
||||
binding.editor.setLigatureEnabled(enabled);
|
||||
ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED = false;
|
||||
}
|
||||
|
||||
if (flagsChanged) {
|
||||
int flags = 0;
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_LEADING, true)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_WHITESPACE_LEADING;
|
||||
}
|
||||
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_TRAILING, false)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_WHITESPACE_TRAILING;
|
||||
}
|
||||
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_INNER, true)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_WHITESPACE_INNER;
|
||||
}
|
||||
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_EMPTY_LINE, true)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_WHITESPACE_FOR_EMPTY_LINE;
|
||||
}
|
||||
|
||||
if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_LINE_BREAK, true)) {
|
||||
flags |= IDEEditor.FLAG_DRAW_LINE_SEPARATOR;
|
||||
}
|
||||
|
||||
binding.editor.setNonPrintablePaintingFlags(flags);
|
||||
ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED = false;
|
||||
}
|
||||
|
||||
if (inputFlagsChanged) {
|
||||
binding.editor.setInputType(IDEEditor.createInputFlags());
|
||||
ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED = false;
|
||||
}
|
||||
|
||||
if (drawHexChanged) {
|
||||
// TODO Do something about this
|
||||
// Maybe use spans...
|
||||
// binding.editor.setLineColorsEnabled (prefs.getBoolean
|
||||
// (PreferenceManager.KEY_EDITOR_DRAW_HEX, true));
|
||||
ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED = false;
|
||||
}
|
||||
|
||||
if (wordWrapChanged) {
|
||||
var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_WORD_WRAP, false);
|
||||
binding.editor.setWordwrap(enabled);
|
||||
ConstantsBridge.EDITOR_PREF_WORD_WRAP_CHANGED = false;
|
||||
}
|
||||
|
||||
if (magnifierChanged) {
|
||||
var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_USE_MAGNIFER, true);
|
||||
binding.editor.getComponent(Magnifier.class).setEnabled(enabled);
|
||||
ConstantsBridge.EDITOR_PREF_USE_MAGNIFIER_CHANGED = false;
|
||||
}
|
||||
|
||||
isFirstCreate = false;
|
||||
}
|
||||
|
||||
private void closeCurrentTag(String text, int line, int col) {
|
||||
try {
|
||||
XMLLexer lexer = new XMLLexer(CharStreams.fromReader(new StringReader(text)));
|
||||
Token token;
|
||||
boolean wasSlash = false, wasOpen = false;
|
||||
ArrayList<String> currentNames = new ArrayList<>();
|
||||
while (((token = lexer.nextToken()) != null && token.getType() != token.EOF)) {
|
||||
final int type = token.getType();
|
||||
if (type == XMLLexer.OPEN) {
|
||||
wasOpen = true;
|
||||
} else if (type == XMLLexer.Name) {
|
||||
if (wasOpen && wasSlash && currentNames.size() > 0) {
|
||||
currentNames.remove(0);
|
||||
} else if (wasOpen) {
|
||||
currentNames.add(0, token.getText());
|
||||
wasOpen = false;
|
||||
}
|
||||
} else if (type == XMLLexer.OPEN_SLASH) {
|
||||
int l = token.getLine() - 1;
|
||||
int c = token.getCharPositionInLine();
|
||||
if (l == line && c == col) {
|
||||
break;
|
||||
} else if (currentNames.size() > 0) {
|
||||
currentNames.remove(0);
|
||||
}
|
||||
} else if (type == XMLLexer.SLASH_CLOSE || type == XMLLexer.SPECIAL_CLOSE) {
|
||||
if (currentNames.size() > 0 && token.getText().trim().endsWith("/>")) {
|
||||
currentNames.remove(0);
|
||||
}
|
||||
} else if (type == XMLLexer.SLASH) {
|
||||
wasSlash = true;
|
||||
} else {
|
||||
wasOpen = wasSlash = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (currentNames.size() > 0) {
|
||||
binding.editor.getText().insert(line, col + 2, currentNames.get(0));
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
LOG.error("Unable to close current tag", th);
|
||||
}
|
||||
}
|
||||
|
||||
private void notifySaved() {
|
||||
binding.editor.didSave();
|
||||
|
||||
if (Objects.requireNonNull(getFile()).getName().endsWith(".xml")) {
|
||||
ValuesTableFactory.syncWithFile(getFile());
|
||||
}
|
||||
}
|
||||
|
||||
/** Mark this files as saved. Even if it not saved. */
|
||||
public void markAsSaved() {
|
||||
isModified = false;
|
||||
notifySaved();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,409 @@
|
||||
lexer grammar CPP14Lexer;
|
||||
|
||||
IntegerLiteral:
|
||||
DecimalLiteral Integersuffix?
|
||||
| OctalLiteral Integersuffix?
|
||||
| HexadecimalLiteral Integersuffix?
|
||||
| BinaryLiteral Integersuffix?;
|
||||
|
||||
CharacterLiteral:
|
||||
('u' | 'U' | 'L')? '\'' Cchar+ '\'';
|
||||
|
||||
FloatingLiteral:
|
||||
Fractionalconstant Exponentpart? Floatingsuffix?
|
||||
| Digitsequence Exponentpart Floatingsuffix?;
|
||||
|
||||
StringLiteral:
|
||||
Encodingprefix?
|
||||
(Rawstring
|
||||
|'"' Schar* '"');
|
||||
|
||||
BooleanLiteral: False_ | True_;
|
||||
|
||||
PointerLiteral: Nullptr;
|
||||
|
||||
UserDefinedLiteral:
|
||||
UserDefinedIntegerLiteral
|
||||
| UserDefinedFloatingLiteral
|
||||
| UserDefinedStringLiteral
|
||||
| UserDefinedCharacterLiteral;
|
||||
|
||||
MultiLineMacro:
|
||||
'#' (~[\n]*? '\\' '\r'? '\n')+ ~ [\n]+ -> channel (HIDDEN);
|
||||
|
||||
Directive: '#' ~ [\n]* -> channel (HIDDEN);
|
||||
/*Keywords*/
|
||||
|
||||
Alignas: 'alignas';
|
||||
|
||||
Alignof: 'alignof';
|
||||
|
||||
Asm: 'asm';
|
||||
|
||||
Auto: 'auto';
|
||||
|
||||
Bool: 'bool';
|
||||
|
||||
Break: 'break';
|
||||
|
||||
Case: 'case';
|
||||
|
||||
Catch: 'catch';
|
||||
|
||||
Char: 'char';
|
||||
|
||||
Char16: 'char16_t';
|
||||
|
||||
Char32: 'char32_t';
|
||||
|
||||
Class: 'class';
|
||||
|
||||
Const: 'const';
|
||||
|
||||
Constexpr: 'constexpr';
|
||||
|
||||
Const_cast: 'const_cast';
|
||||
|
||||
Continue: 'continue';
|
||||
|
||||
Decltype: 'decltype';
|
||||
|
||||
Default: 'default';
|
||||
|
||||
Delete: 'delete';
|
||||
|
||||
Do: 'do';
|
||||
|
||||
Double: 'double';
|
||||
|
||||
Dynamic_cast: 'dynamic_cast';
|
||||
|
||||
Else: 'else';
|
||||
|
||||
Enum: 'enum';
|
||||
|
||||
Explicit: 'explicit';
|
||||
|
||||
Export: 'export';
|
||||
|
||||
Extern: 'extern';
|
||||
|
||||
//DO NOT RENAME - PYTHON NEEDS True and False
|
||||
False_: 'false';
|
||||
|
||||
Final: 'final';
|
||||
|
||||
Float: 'float';
|
||||
|
||||
For: 'for';
|
||||
|
||||
Friend: 'friend';
|
||||
|
||||
Goto: 'goto';
|
||||
|
||||
If: 'if';
|
||||
|
||||
Inline: 'inline';
|
||||
|
||||
Int: 'int';
|
||||
|
||||
Long: 'long';
|
||||
|
||||
Mutable: 'mutable';
|
||||
|
||||
Namespace: 'namespace';
|
||||
|
||||
New: 'new';
|
||||
|
||||
Noexcept: 'noexcept';
|
||||
|
||||
Nullptr: 'nullptr';
|
||||
|
||||
Operator: 'operator';
|
||||
|
||||
Override: 'override';
|
||||
|
||||
Private: 'private';
|
||||
|
||||
Protected: 'protected';
|
||||
|
||||
Public: 'public';
|
||||
|
||||
Register: 'register';
|
||||
|
||||
Reinterpret_cast: 'reinterpret_cast';
|
||||
|
||||
Return: 'return';
|
||||
|
||||
Short: 'short';
|
||||
|
||||
Signed: 'signed';
|
||||
|
||||
Sizeof: 'sizeof';
|
||||
|
||||
Static: 'static';
|
||||
|
||||
Static_assert: 'static_assert';
|
||||
|
||||
Static_cast: 'static_cast';
|
||||
|
||||
Struct: 'struct';
|
||||
|
||||
Switch: 'switch';
|
||||
|
||||
Template: 'template';
|
||||
|
||||
This: 'this';
|
||||
|
||||
Thread_local: 'thread_local';
|
||||
|
||||
Throw: 'throw';
|
||||
|
||||
//DO NOT RENAME - PYTHON NEEDS True and False
|
||||
True_: 'true';
|
||||
|
||||
Try: 'try';
|
||||
|
||||
Typedef: 'typedef';
|
||||
|
||||
Typeid_: 'typeid';
|
||||
|
||||
Typename_: 'typename';
|
||||
|
||||
Union: 'union';
|
||||
|
||||
Unsigned: 'unsigned';
|
||||
|
||||
Using: 'using';
|
||||
|
||||
Virtual: 'virtual';
|
||||
|
||||
Void: 'void';
|
||||
|
||||
Volatile: 'volatile';
|
||||
|
||||
Wchar: 'wchar_t';
|
||||
|
||||
While: 'while';
|
||||
/*Operators*/
|
||||
|
||||
LeftParen: '(';
|
||||
|
||||
RightParen: ')';
|
||||
|
||||
LeftBracket: '[';
|
||||
|
||||
RightBracket: ']';
|
||||
|
||||
LeftBrace: '{';
|
||||
|
||||
RightBrace: '}';
|
||||
|
||||
Plus: '+';
|
||||
|
||||
Minus: '-';
|
||||
|
||||
Star: '*';
|
||||
|
||||
Div: '/';
|
||||
|
||||
Mod: '%';
|
||||
|
||||
Caret: '^';
|
||||
|
||||
And: '&';
|
||||
|
||||
Or: '|';
|
||||
|
||||
Tilde: '~';
|
||||
|
||||
Not: '!' | 'not';
|
||||
|
||||
Assign: '=';
|
||||
|
||||
Less: '<';
|
||||
|
||||
Greater: '>';
|
||||
|
||||
PlusAssign: '+=';
|
||||
|
||||
MinusAssign: '-=';
|
||||
|
||||
StarAssign: '*=';
|
||||
|
||||
DivAssign: '/=';
|
||||
|
||||
ModAssign: '%=';
|
||||
|
||||
XorAssign: '^=';
|
||||
|
||||
AndAssign: '&=';
|
||||
|
||||
OrAssign: '|=';
|
||||
|
||||
LeftShiftAssign: '<<=';
|
||||
|
||||
RightShiftAssign: '>>=';
|
||||
|
||||
Equal: '==';
|
||||
|
||||
NotEqual: '!=';
|
||||
|
||||
LessEqual: '<=';
|
||||
|
||||
GreaterEqual: '>=';
|
||||
|
||||
AndAnd: '&&' | 'and';
|
||||
|
||||
OrOr: '||' | 'or';
|
||||
|
||||
PlusPlus: '++';
|
||||
|
||||
MinusMinus: '--';
|
||||
|
||||
Comma: ',';
|
||||
|
||||
ArrowStar: '->*';
|
||||
|
||||
Arrow: '->';
|
||||
|
||||
Question: '?';
|
||||
|
||||
Colon: ':';
|
||||
|
||||
Doublecolon: '::';
|
||||
|
||||
Semi: ';';
|
||||
|
||||
Dot: '.';
|
||||
|
||||
DotStar: '.*';
|
||||
|
||||
Ellipsis: '...';
|
||||
|
||||
fragment Hexquad:
|
||||
HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT;
|
||||
|
||||
fragment Universalcharactername:
|
||||
'\\u' Hexquad
|
||||
| '\\U' Hexquad Hexquad;
|
||||
|
||||
Identifier:
|
||||
/*
|
||||
Identifiernondigit | Identifier Identifiernondigit | Identifier DIGIT
|
||||
*/
|
||||
Identifiernondigit (Identifiernondigit | DIGIT)*;
|
||||
|
||||
fragment Identifiernondigit: NONDIGIT | Universalcharactername;
|
||||
|
||||
fragment NONDIGIT: [a-zA-Z_];
|
||||
|
||||
fragment DIGIT: [0-9];
|
||||
|
||||
DecimalLiteral: NONZERODIGIT ('\''? DIGIT)*;
|
||||
|
||||
OctalLiteral: '0' ('\''? OCTALDIGIT)*;
|
||||
|
||||
HexadecimalLiteral: ('0x' | '0X') HEXADECIMALDIGIT (
|
||||
'\''? HEXADECIMALDIGIT
|
||||
)*;
|
||||
|
||||
BinaryLiteral: ('0b' | '0B') BINARYDIGIT ('\''? BINARYDIGIT)*;
|
||||
|
||||
fragment NONZERODIGIT: [1-9];
|
||||
|
||||
fragment OCTALDIGIT: [0-7];
|
||||
|
||||
fragment HEXADECIMALDIGIT: [0-9a-fA-F];
|
||||
|
||||
fragment BINARYDIGIT: [01];
|
||||
|
||||
Integersuffix:
|
||||
Unsignedsuffix Longsuffix?
|
||||
| Unsignedsuffix Longlongsuffix?
|
||||
| Longsuffix Unsignedsuffix?
|
||||
| Longlongsuffix Unsignedsuffix?;
|
||||
|
||||
fragment Unsignedsuffix: [uU];
|
||||
|
||||
fragment Longsuffix: [lL];
|
||||
|
||||
fragment Longlongsuffix: 'll' | 'LL';
|
||||
|
||||
fragment Cchar:
|
||||
~ ['\\\r\n]
|
||||
| Escapesequence
|
||||
| Universalcharactername;
|
||||
|
||||
fragment Escapesequence:
|
||||
Simpleescapesequence
|
||||
| Octalescapesequence
|
||||
| Hexadecimalescapesequence;
|
||||
|
||||
fragment Simpleescapesequence:
|
||||
'\\\''
|
||||
| '\\"'
|
||||
| '\\?'
|
||||
| '\\\\'
|
||||
| '\\a'
|
||||
| '\\b'
|
||||
| '\\f'
|
||||
| '\\n'
|
||||
| '\\r'
|
||||
| ('\\' ('\r' '\n'? | '\n'))
|
||||
| '\\t'
|
||||
| '\\v';
|
||||
|
||||
fragment Octalescapesequence:
|
||||
'\\' OCTALDIGIT
|
||||
| '\\' OCTALDIGIT OCTALDIGIT
|
||||
| '\\' OCTALDIGIT OCTALDIGIT OCTALDIGIT;
|
||||
|
||||
fragment Hexadecimalescapesequence: '\\x' HEXADECIMALDIGIT+;
|
||||
|
||||
fragment Fractionalconstant:
|
||||
Digitsequence? '.' Digitsequence
|
||||
| Digitsequence '.';
|
||||
|
||||
fragment Exponentpart:
|
||||
'e' SIGN? Digitsequence
|
||||
| 'E' SIGN? Digitsequence;
|
||||
|
||||
fragment SIGN: [+-];
|
||||
|
||||
fragment Digitsequence: DIGIT ('\''? DIGIT)*;
|
||||
|
||||
fragment Floatingsuffix: [flFL];
|
||||
|
||||
fragment Encodingprefix: 'u8' | 'u' | 'U' | 'L';
|
||||
|
||||
fragment Schar:
|
||||
~ ["\\\r\n]
|
||||
| Escapesequence
|
||||
| Universalcharactername;
|
||||
|
||||
fragment Rawstring: 'R"' (( '\\' ["()] )|~[\r\n (])*? '(' ~[)]*? ')' (( '\\' ["()]) | ~[\r\n "])*? '"';
|
||||
|
||||
UserDefinedIntegerLiteral:
|
||||
DecimalLiteral Udsuffix
|
||||
| OctalLiteral Udsuffix
|
||||
| HexadecimalLiteral Udsuffix
|
||||
| BinaryLiteral Udsuffix;
|
||||
|
||||
UserDefinedFloatingLiteral:
|
||||
Fractionalconstant Exponentpart? Udsuffix
|
||||
| Digitsequence Exponentpart Udsuffix;
|
||||
|
||||
UserDefinedStringLiteral: StringLiteral Udsuffix;
|
||||
|
||||
UserDefinedCharacterLiteral: CharacterLiteral Udsuffix;
|
||||
|
||||
fragment Udsuffix: Identifier;
|
||||
|
||||
Whitespace: [ \t]+ -> skip;
|
||||
|
||||
Newline: ('\r' '\n'? | '\n') -> skip;
|
||||
|
||||
BlockComment: '/*' .*? '*/' -> skip;
|
||||
|
||||
LineComment: '//' ~ [\r\n]* -> skip;
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,757 @@
|
||||
// Generated from /home/syu/workspace/MSCCD_ALL/Project/grammarDefinations/CPP14/CPP14Lexer.g4 by ANTLR 4.8
|
||||
package com.itsaky.androidide.lexers.cpp;
|
||||
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 CPP14Lexer extends Lexer {
|
||||
static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); }
|
||||
|
||||
protected static final DFA[] _decisionToDFA;
|
||||
protected static final PredictionContextCache _sharedContextCache =
|
||||
new PredictionContextCache();
|
||||
public static final int
|
||||
IntegerLiteral=1, CharacterLiteral=2, FloatingLiteral=3, StringLiteral=4,
|
||||
BooleanLiteral=5, PointerLiteral=6, UserDefinedLiteral=7, MultiLineMacro=8,
|
||||
Directive=9, Alignas=10, Alignof=11, Asm=12, Auto=13, Bool=14, Break=15,
|
||||
Case=16, Catch=17, Char=18, Char16=19, Char32=20, Class=21, Const=22,
|
||||
Constexpr=23, Const_cast=24, Continue=25, Decltype=26, Default=27, Delete=28,
|
||||
Do=29, Double=30, Dynamic_cast=31, Else=32, Enum=33, Explicit=34, Export=35,
|
||||
Extern=36, False_=37, Final=38, Float=39, For=40, Friend=41, Goto=42,
|
||||
If=43, Inline=44, Int=45, Long=46, Mutable=47, Namespace=48, New=49, Noexcept=50,
|
||||
Nullptr=51, Operator=52, Override=53, Private=54, Protected=55, Public=56,
|
||||
Register=57, Reinterpret_cast=58, Return=59, Short=60, Signed=61, Sizeof=62,
|
||||
Static=63, Static_assert=64, Static_cast=65, Struct=66, Switch=67, Template=68,
|
||||
This=69, Thread_local=70, Throw=71, True_=72, Try=73, Typedef=74, Typeid_=75,
|
||||
Typename_=76, Union=77, Unsigned=78, Using=79, Virtual=80, Void=81, Volatile=82,
|
||||
Wchar=83, While=84, LeftParen=85, RightParen=86, LeftBracket=87, RightBracket=88,
|
||||
LeftBrace=89, RightBrace=90, Plus=91, Minus=92, Star=93, Div=94, Mod=95,
|
||||
Caret=96, And=97, Or=98, Tilde=99, Not=100, Assign=101, Less=102, Greater=103,
|
||||
PlusAssign=104, MinusAssign=105, StarAssign=106, DivAssign=107, ModAssign=108,
|
||||
XorAssign=109, AndAssign=110, OrAssign=111, LeftShiftAssign=112, RightShiftAssign=113,
|
||||
Equal=114, NotEqual=115, LessEqual=116, GreaterEqual=117, AndAnd=118,
|
||||
OrOr=119, PlusPlus=120, MinusMinus=121, Comma=122, ArrowStar=123, Arrow=124,
|
||||
Question=125, Colon=126, Doublecolon=127, Semi=128, Dot=129, DotStar=130,
|
||||
Ellipsis=131, Identifier=132, DecimalLiteral=133, OctalLiteral=134, HexadecimalLiteral=135,
|
||||
BinaryLiteral=136, Integersuffix=137, UserDefinedIntegerLiteral=138, UserDefinedFloatingLiteral=139,
|
||||
UserDefinedStringLiteral=140, UserDefinedCharacterLiteral=141, Whitespace=142,
|
||||
Newline=143, BlockComment=144, LineComment=145;
|
||||
public static String[] channelNames = {
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||
};
|
||||
|
||||
public static String[] modeNames = {
|
||||
"DEFAULT_MODE"
|
||||
};
|
||||
|
||||
private static String[] makeRuleNames() {
|
||||
return new String[] {
|
||||
"IntegerLiteral", "CharacterLiteral", "FloatingLiteral", "StringLiteral",
|
||||
"BooleanLiteral", "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro",
|
||||
"Directive", "Alignas", "Alignof", "Asm", "Auto", "Bool", "Break", "Case",
|
||||
"Catch", "Char", "Char16", "Char32", "Class", "Const", "Constexpr", "Const_cast",
|
||||
"Continue", "Decltype", "Default", "Delete", "Do", "Double", "Dynamic_cast",
|
||||
"Else", "Enum", "Explicit", "Export", "Extern", "False_", "Final", "Float",
|
||||
"For", "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", "Namespace",
|
||||
"New", "Noexcept", "Nullptr", "Operator", "Override", "Private", "Protected",
|
||||
"Public", "Register", "Reinterpret_cast", "Return", "Short", "Signed",
|
||||
"Sizeof", "Static", "Static_assert", "Static_cast", "Struct", "Switch",
|
||||
"Template", "This", "Thread_local", "Throw", "True_", "Try", "Typedef",
|
||||
"Typeid_", "Typename_", "Union", "Unsigned", "Using", "Virtual", "Void",
|
||||
"Volatile", "Wchar", "While", "LeftParen", "RightParen", "LeftBracket",
|
||||
"RightBracket", "LeftBrace", "RightBrace", "Plus", "Minus", "Star", "Div",
|
||||
"Mod", "Caret", "And", "Or", "Tilde", "Not", "Assign", "Less", "Greater",
|
||||
"PlusAssign", "MinusAssign", "StarAssign", "DivAssign", "ModAssign",
|
||||
"XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", "RightShiftAssign",
|
||||
"Equal", "NotEqual", "LessEqual", "GreaterEqual", "AndAnd", "OrOr", "PlusPlus",
|
||||
"MinusMinus", "Comma", "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon",
|
||||
"Semi", "Dot", "DotStar", "Ellipsis", "Hexquad", "Universalcharactername",
|
||||
"Identifier", "Identifiernondigit", "NONDIGIT", "DIGIT", "DecimalLiteral",
|
||||
"OctalLiteral", "HexadecimalLiteral", "BinaryLiteral", "NONZERODIGIT",
|
||||
"OCTALDIGIT", "HEXADECIMALDIGIT", "BINARYDIGIT", "Integersuffix", "Unsignedsuffix",
|
||||
"Longsuffix", "Longlongsuffix", "Cchar", "Escapesequence", "Simpleescapesequence",
|
||||
"Octalescapesequence", "Hexadecimalescapesequence", "Fractionalconstant",
|
||||
"Exponentpart", "SIGN", "Digitsequence", "Floatingsuffix", "Encodingprefix",
|
||||
"Schar", "Rawstring", "UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral",
|
||||
"UserDefinedStringLiteral", "UserDefinedCharacterLiteral", "Udsuffix",
|
||||
"Whitespace", "Newline", "BlockComment", "LineComment"
|
||||
};
|
||||
}
|
||||
public static final String[] ruleNames = makeRuleNames();
|
||||
|
||||
private static String[] makeLiteralNames() {
|
||||
return new String[] {
|
||||
null, null, null, null, null, null, null, null, null, null, "'alignas'",
|
||||
"'alignof'", "'asm'", "'auto'", "'bool'", "'break'", "'case'", "'catch'",
|
||||
"'char'", "'char16_t'", "'char32_t'", "'class'", "'const'", "'constexpr'",
|
||||
"'const_cast'", "'continue'", "'decltype'", "'default'", "'delete'",
|
||||
"'do'", "'double'", "'dynamic_cast'", "'else'", "'enum'", "'explicit'",
|
||||
"'export'", "'extern'", "'false'", "'final'", "'float'", "'for'", "'friend'",
|
||||
"'goto'", "'if'", "'inline'", "'int'", "'long'", "'mutable'", "'namespace'",
|
||||
"'new'", "'noexcept'", "'nullptr'", "'operator'", "'override'", "'private'",
|
||||
"'protected'", "'public'", "'register'", "'reinterpret_cast'", "'return'",
|
||||
"'short'", "'signed'", "'sizeof'", "'static'", "'static_assert'", "'static_cast'",
|
||||
"'struct'", "'switch'", "'template'", "'this'", "'thread_local'", "'throw'",
|
||||
"'true'", "'try'", "'typedef'", "'typeid'", "'typename'", "'union'",
|
||||
"'unsigned'", "'using'", "'virtual'", "'void'", "'volatile'", "'wchar_t'",
|
||||
"'while'", "'('", "')'", "'['", "']'", "'{'", "'}'", "'+'", "'-'", "'*'",
|
||||
"'/'", "'%'", "'^'", "'&'", "'|'", "'~'", null, "'='", "'<'", "'>'",
|
||||
"'+='", "'-='", "'*='", "'/='", "'%='", "'^='", "'&='", "'|='", "'<<='",
|
||||
"'>>='", "'=='", "'!='", "'<='", "'>='", null, null, "'++'", "'--'",
|
||||
"','", "'->*'", "'->'", "'?'", "':'", "'::'", "';'", "'.'", "'.*'", "'...'"
|
||||
};
|
||||
}
|
||||
private static final String[] _LITERAL_NAMES = makeLiteralNames();
|
||||
private static String[] makeSymbolicNames() {
|
||||
return new String[] {
|
||||
null, "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", "StringLiteral",
|
||||
"BooleanLiteral", "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro",
|
||||
"Directive", "Alignas", "Alignof", "Asm", "Auto", "Bool", "Break", "Case",
|
||||
"Catch", "Char", "Char16", "Char32", "Class", "Const", "Constexpr", "Const_cast",
|
||||
"Continue", "Decltype", "Default", "Delete", "Do", "Double", "Dynamic_cast",
|
||||
"Else", "Enum", "Explicit", "Export", "Extern", "False_", "Final", "Float",
|
||||
"For", "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", "Namespace",
|
||||
"New", "Noexcept", "Nullptr", "Operator", "Override", "Private", "Protected",
|
||||
"Public", "Register", "Reinterpret_cast", "Return", "Short", "Signed",
|
||||
"Sizeof", "Static", "Static_assert", "Static_cast", "Struct", "Switch",
|
||||
"Template", "This", "Thread_local", "Throw", "True_", "Try", "Typedef",
|
||||
"Typeid_", "Typename_", "Union", "Unsigned", "Using", "Virtual", "Void",
|
||||
"Volatile", "Wchar", "While", "LeftParen", "RightParen", "LeftBracket",
|
||||
"RightBracket", "LeftBrace", "RightBrace", "Plus", "Minus", "Star", "Div",
|
||||
"Mod", "Caret", "And", "Or", "Tilde", "Not", "Assign", "Less", "Greater",
|
||||
"PlusAssign", "MinusAssign", "StarAssign", "DivAssign", "ModAssign",
|
||||
"XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", "RightShiftAssign",
|
||||
"Equal", "NotEqual", "LessEqual", "GreaterEqual", "AndAnd", "OrOr", "PlusPlus",
|
||||
"MinusMinus", "Comma", "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon",
|
||||
"Semi", "Dot", "DotStar", "Ellipsis", "Identifier", "DecimalLiteral",
|
||||
"OctalLiteral", "HexadecimalLiteral", "BinaryLiteral", "Integersuffix",
|
||||
"UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral", "UserDefinedStringLiteral",
|
||||
"UserDefinedCharacterLiteral", "Whitespace", "Newline", "BlockComment",
|
||||
"LineComment"
|
||||
};
|
||||
}
|
||||
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 CPP14Lexer(CharStream input) {
|
||||
super(input);
|
||||
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGrammarFileName() { return "CPP14Lexer.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\u0093\u05b4\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\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
|
||||
"\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
|
||||
"\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+
|
||||
" \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+
|
||||
"+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64"+
|
||||
"\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t"+
|
||||
"=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4"+
|
||||
"I\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\t"+
|
||||
"T\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_"+
|
||||
"\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k"+
|
||||
"\tk\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv"+
|
||||
"\4w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t"+
|
||||
"\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084"+
|
||||
"\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089"+
|
||||
"\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d"+
|
||||
"\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092"+
|
||||
"\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096"+
|
||||
"\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b"+
|
||||
"\t\u009b\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f"+
|
||||
"\4\u00a0\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4"+
|
||||
"\t\u00a4\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8"+
|
||||
"\4\u00a9\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\3\2\3"+
|
||||
"\2\5\2\u015c\n\2\3\2\3\2\5\2\u0160\n\2\3\2\3\2\5\2\u0164\n\2\3\2\3\2\5"+
|
||||
"\2\u0168\n\2\5\2\u016a\n\2\3\3\5\3\u016d\n\3\3\3\3\3\6\3\u0171\n\3\r\3"+
|
||||
"\16\3\u0172\3\3\3\3\3\4\3\4\5\4\u0179\n\4\3\4\5\4\u017c\n\4\3\4\3\4\3"+
|
||||
"\4\5\4\u0181\n\4\5\4\u0183\n\4\3\5\5\5\u0186\n\5\3\5\3\5\7\5\u018a\n\5"+
|
||||
"\f\5\16\5\u018d\13\5\3\5\3\5\5\5\u0191\n\5\3\5\3\5\5\5\u0195\n\5\3\6\3"+
|
||||
"\6\5\6\u0199\n\6\3\7\3\7\3\b\3\b\3\b\3\b\5\b\u01a1\n\b\3\t\3\t\7\t\u01a5"+
|
||||
"\n\t\f\t\16\t\u01a8\13\t\3\t\3\t\5\t\u01ac\n\t\3\t\6\t\u01af\n\t\r\t\16"+
|
||||
"\t\u01b0\3\t\6\t\u01b4\n\t\r\t\16\t\u01b5\3\t\3\t\3\n\3\n\7\n\u01bc\n"+
|
||||
"\n\f\n\16\n\u01bf\13\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13"+
|
||||
"\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3"+
|
||||
"\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3"+
|
||||
"\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3"+
|
||||
"\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3"+
|
||||
"\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3"+
|
||||
"\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3"+
|
||||
"\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3"+
|
||||
"\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3"+
|
||||
"\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3"+
|
||||
"\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 "+
|
||||
"\3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3"+
|
||||
"#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3"+
|
||||
"&\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3*\3"+
|
||||
"*\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3-\3-\3-\3-\3-\3-\3-\3.\3.\3.\3.\3/\3"+
|
||||
"/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61"+
|
||||
"\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63"+
|
||||
"\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\65"+
|
||||
"\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66"+
|
||||
"\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\3"+
|
||||
"8\38\38\38\38\38\39\39\39\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3;\3"+
|
||||
";\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3"+
|
||||
"=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3@\3@\3@\3"+
|
||||
"@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3"+
|
||||
"B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3E\3E\3"+
|
||||
"E\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3"+
|
||||
"G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3I\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3"+
|
||||
"K\3K\3L\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3"+
|
||||
"N\3O\3O\3O\3O\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3"+
|
||||
"Q\3R\3R\3R\3R\3R\3S\3S\3S\3S\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3T\3T\3T\3"+
|
||||
"U\3U\3U\3U\3U\3U\3V\3V\3W\3W\3X\3X\3Y\3Y\3Z\3Z\3[\3[\3\\\3\\\3]\3]\3^"+
|
||||
"\3^\3_\3_\3`\3`\3a\3a\3b\3b\3c\3c\3d\3d\3e\3e\3e\3e\5e\u040b\ne\3f\3f"+
|
||||
"\3g\3g\3h\3h\3i\3i\3i\3j\3j\3j\3k\3k\3k\3l\3l\3l\3m\3m\3m\3n\3n\3n\3o"+
|
||||
"\3o\3o\3p\3p\3p\3q\3q\3q\3q\3r\3r\3r\3r\3s\3s\3s\3t\3t\3t\3u\3u\3u\3v"+
|
||||
"\3v\3v\3w\3w\3w\3w\3w\5w\u0444\nw\3x\3x\3x\3x\5x\u044a\nx\3y\3y\3y\3z"+
|
||||
"\3z\3z\3{\3{\3|\3|\3|\3|\3}\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080\3"+
|
||||
"\u0080\3\u0081\3\u0081\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084"+
|
||||
"\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0086"+
|
||||
"\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
|
||||
"\5\u0086\u047c\n\u0086\3\u0087\3\u0087\3\u0087\7\u0087\u0481\n\u0087\f"+
|
||||
"\u0087\16\u0087\u0484\13\u0087\3\u0088\3\u0088\5\u0088\u0488\n\u0088\3"+
|
||||
"\u0089\3\u0089\3\u008a\3\u008a\3\u008b\3\u008b\5\u008b\u0490\n\u008b\3"+
|
||||
"\u008b\7\u008b\u0493\n\u008b\f\u008b\16\u008b\u0496\13\u008b\3\u008c\3"+
|
||||
"\u008c\5\u008c\u049a\n\u008c\3\u008c\7\u008c\u049d\n\u008c\f\u008c\16"+
|
||||
"\u008c\u04a0\13\u008c\3\u008d\3\u008d\3\u008d\3\u008d\5\u008d\u04a6\n"+
|
||||
"\u008d\3\u008d\3\u008d\5\u008d\u04aa\n\u008d\3\u008d\7\u008d\u04ad\n\u008d"+
|
||||
"\f\u008d\16\u008d\u04b0\13\u008d\3\u008e\3\u008e\3\u008e\3\u008e\5\u008e"+
|
||||
"\u04b6\n\u008e\3\u008e\3\u008e\5\u008e\u04ba\n\u008e\3\u008e\7\u008e\u04bd"+
|
||||
"\n\u008e\f\u008e\16\u008e\u04c0\13\u008e\3\u008f\3\u008f\3\u0090\3\u0090"+
|
||||
"\3\u0091\3\u0091\3\u0092\3\u0092\3\u0093\3\u0093\5\u0093\u04cc\n\u0093"+
|
||||
"\3\u0093\3\u0093\5\u0093\u04d0\n\u0093\3\u0093\3\u0093\5\u0093\u04d4\n"+
|
||||
"\u0093\3\u0093\3\u0093\5\u0093\u04d8\n\u0093\5\u0093\u04da\n\u0093\3\u0094"+
|
||||
"\3\u0094\3\u0095\3\u0095\3\u0096\3\u0096\3\u0096\3\u0096\5\u0096\u04e4"+
|
||||
"\n\u0096\3\u0097\3\u0097\3\u0097\5\u0097\u04e9\n\u0097\3\u0098\3\u0098"+
|
||||
"\3\u0098\5\u0098\u04ee\n\u0098\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+
|
||||
"\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+
|
||||
"\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\5\u0099\u0505"+
|
||||
"\n\u0099\3\u0099\5\u0099\u0508\n\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+
|
||||
"\5\u0099\u050e\n\u0099\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a"+
|
||||
"\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\5\u009a\u051b\n\u009a\3\u009b"+
|
||||
"\3\u009b\3\u009b\3\u009b\6\u009b\u0521\n\u009b\r\u009b\16\u009b\u0522"+
|
||||
"\3\u009c\5\u009c\u0526\n\u009c\3\u009c\3\u009c\3\u009c\3\u009c\3\u009c"+
|
||||
"\5\u009c\u052d\n\u009c\3\u009d\3\u009d\5\u009d\u0531\n\u009d\3\u009d\3"+
|
||||
"\u009d\3\u009d\5\u009d\u0536\n\u009d\3\u009d\5\u009d\u0539\n\u009d\3\u009e"+
|
||||
"\3\u009e\3\u009f\3\u009f\5\u009f\u053f\n\u009f\3\u009f\7\u009f\u0542\n"+
|
||||
"\u009f\f\u009f\16\u009f\u0545\13\u009f\3\u00a0\3\u00a0\3\u00a1\3\u00a1"+
|
||||
"\3\u00a1\5\u00a1\u054c\n\u00a1\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u0551\n"+
|
||||
"\u00a2\3\u00a3\3\u00a3\7\u00a3\u0555\n\u00a3\f\u00a3\16\u00a3\u0558\13"+
|
||||
"\u00a3\3\u00a3\3\u00a3\7\u00a3\u055c\n\u00a3\f\u00a3\16\u00a3\u055f\13"+
|
||||
"\u00a3\3\u00a3\3\u00a3\7\u00a3\u0563\n\u00a3\f\u00a3\16\u00a3\u0566\13"+
|
||||
"\u00a3\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4"+
|
||||
"\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\5\u00a4\u0576\n\u00a4"+
|
||||
"\3\u00a5\3\u00a5\5\u00a5\u057a\n\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5"+
|
||||
"\3\u00a5\3\u00a5\5\u00a5\u0582\n\u00a5\3\u00a6\3\u00a6\3\u00a6\3\u00a7"+
|
||||
"\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a9\6\u00a9\u058d\n\u00a9\r\u00a9"+
|
||||
"\16\u00a9\u058e\3\u00a9\3\u00a9\3\u00aa\3\u00aa\5\u00aa\u0595\n\u00aa"+
|
||||
"\3\u00aa\5\u00aa\u0598\n\u00aa\3\u00aa\3\u00aa\3\u00ab\3\u00ab\3\u00ab"+
|
||||
"\3\u00ab\7\u00ab\u05a0\n\u00ab\f\u00ab\16\u00ab\u05a3\13\u00ab\3\u00ab"+
|
||||
"\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ac\3\u00ac\3\u00ac\3\u00ac\7\u00ac"+
|
||||
"\u05ae\n\u00ac\f\u00ac\16\u00ac\u05b1\13\u00ac\3\u00ac\3\u00ac\4\u01a6"+
|
||||
"\u05a1\2\u00ad\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16"+
|
||||
"\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34"+
|
||||
"\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g"+
|
||||
"\65i\66k\67m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F"+
|
||||
"\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009d"+
|
||||
"P\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1"+
|
||||
"Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5"+
|
||||
"d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9"+
|
||||
"n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00ed"+
|
||||
"x\u00efy\u00f1z\u00f3{\u00f5|\u00f7}\u00f9~\u00fb\177\u00fd\u0080\u00ff"+
|
||||
"\u0081\u0101\u0082\u0103\u0083\u0105\u0084\u0107\u0085\u0109\2\u010b\2"+
|
||||
"\u010d\u0086\u010f\2\u0111\2\u0113\2\u0115\u0087\u0117\u0088\u0119\u0089"+
|
||||
"\u011b\u008a\u011d\2\u011f\2\u0121\2\u0123\2\u0125\u008b\u0127\2\u0129"+
|
||||
"\2\u012b\2\u012d\2\u012f\2\u0131\2\u0133\2\u0135\2\u0137\2\u0139\2\u013b"+
|
||||
"\2\u013d\2\u013f\2\u0141\2\u0143\2\u0145\2\u0147\u008c\u0149\u008d\u014b"+
|
||||
"\u008e\u014d\u008f\u014f\2\u0151\u0090\u0153\u0091\u0155\u0092\u0157\u0093"+
|
||||
"\3\2\25\5\2NNWWww\3\2\f\f\5\2C\\aac|\3\2\62;\3\2\63;\3\2\629\5\2\62;C"+
|
||||
"Hch\3\2\62\63\4\2WWww\4\2NNnn\6\2\f\f\17\17))^^\4\2--//\6\2HHNNhhnn\6"+
|
||||
"\2\f\f\17\17$$^^\5\2\f\f\17\17**\5\2\f\f\17\17++\5\2\f\f\17\17$$\4\2\13"+
|
||||
"\13\"\"\4\2\f\f\17\17\2\u05f7\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\2\21\3\2\2\2\2\23\3\2\2"+
|
||||
"\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2"+
|
||||
"\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2"+
|
||||
"+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2"+
|
||||
"\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2"+
|
||||
"C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3"+
|
||||
"\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2"+
|
||||
"\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2"+
|
||||
"i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3"+
|
||||
"\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081"+
|
||||
"\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2"+
|
||||
"\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093"+
|
||||
"\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2"+
|
||||
"\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5"+
|
||||
"\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2"+
|
||||
"\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7"+
|
||||
"\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2"+
|
||||
"\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9"+
|
||||
"\3\2\2\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2"+
|
||||
"\2\2\u00d3\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00db"+
|
||||
"\3\2\2\2\2\u00dd\3\2\2\2\2\u00df\3\2\2\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2"+
|
||||
"\2\2\u00e5\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed"+
|
||||
"\3\2\2\2\2\u00ef\3\2\2\2\2\u00f1\3\2\2\2\2\u00f3\3\2\2\2\2\u00f5\3\2\2"+
|
||||
"\2\2\u00f7\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2\2\2\u00fd\3\2\2\2\2\u00ff"+
|
||||
"\3\2\2\2\2\u0101\3\2\2\2\2\u0103\3\2\2\2\2\u0105\3\2\2\2\2\u0107\3\2\2"+
|
||||
"\2\2\u010d\3\2\2\2\2\u0115\3\2\2\2\2\u0117\3\2\2\2\2\u0119\3\2\2\2\2\u011b"+
|
||||
"\3\2\2\2\2\u0125\3\2\2\2\2\u0147\3\2\2\2\2\u0149\3\2\2\2\2\u014b\3\2\2"+
|
||||
"\2\2\u014d\3\2\2\2\2\u0151\3\2\2\2\2\u0153\3\2\2\2\2\u0155\3\2\2\2\2\u0157"+
|
||||
"\3\2\2\2\3\u0169\3\2\2\2\5\u016c\3\2\2\2\7\u0182\3\2\2\2\t\u0194\3\2\2"+
|
||||
"\2\13\u0198\3\2\2\2\r\u019a\3\2\2\2\17\u01a0\3\2\2\2\21\u01a2\3\2\2\2"+
|
||||
"\23\u01b9\3\2\2\2\25\u01c2\3\2\2\2\27\u01ca\3\2\2\2\31\u01d2\3\2\2\2\33"+
|
||||
"\u01d6\3\2\2\2\35\u01db\3\2\2\2\37\u01e0\3\2\2\2!\u01e6\3\2\2\2#\u01eb"+
|
||||
"\3\2\2\2%\u01f1\3\2\2\2\'\u01f6\3\2\2\2)\u01ff\3\2\2\2+\u0208\3\2\2\2"+
|
||||
"-\u020e\3\2\2\2/\u0214\3\2\2\2\61\u021e\3\2\2\2\63\u0229\3\2\2\2\65\u0232"+
|
||||
"\3\2\2\2\67\u023b\3\2\2\29\u0243\3\2\2\2;\u024a\3\2\2\2=\u024d\3\2\2\2"+
|
||||
"?\u0254\3\2\2\2A\u0261\3\2\2\2C\u0266\3\2\2\2E\u026b\3\2\2\2G\u0274\3"+
|
||||
"\2\2\2I\u027b\3\2\2\2K\u0282\3\2\2\2M\u0288\3\2\2\2O\u028e\3\2\2\2Q\u0294"+
|
||||
"\3\2\2\2S\u0298\3\2\2\2U\u029f\3\2\2\2W\u02a4\3\2\2\2Y\u02a7\3\2\2\2["+
|
||||
"\u02ae\3\2\2\2]\u02b2\3\2\2\2_\u02b7\3\2\2\2a\u02bf\3\2\2\2c\u02c9\3\2"+
|
||||
"\2\2e\u02cd\3\2\2\2g\u02d6\3\2\2\2i\u02de\3\2\2\2k\u02e7\3\2\2\2m\u02f0"+
|
||||
"\3\2\2\2o\u02f8\3\2\2\2q\u0302\3\2\2\2s\u0309\3\2\2\2u\u0312\3\2\2\2w"+
|
||||
"\u0323\3\2\2\2y\u032a\3\2\2\2{\u0330\3\2\2\2}\u0337\3\2\2\2\177\u033e"+
|
||||
"\3\2\2\2\u0081\u0345\3\2\2\2\u0083\u0353\3\2\2\2\u0085\u035f\3\2\2\2\u0087"+
|
||||
"\u0366\3\2\2\2\u0089\u036d\3\2\2\2\u008b\u0376\3\2\2\2\u008d\u037b\3\2"+
|
||||
"\2\2\u008f\u0388\3\2\2\2\u0091\u038e\3\2\2\2\u0093\u0393\3\2\2\2\u0095"+
|
||||
"\u0397\3\2\2\2\u0097\u039f\3\2\2\2\u0099\u03a6\3\2\2\2\u009b\u03af\3\2"+
|
||||
"\2\2\u009d\u03b5\3\2\2\2\u009f\u03be\3\2\2\2\u00a1\u03c4\3\2\2\2\u00a3"+
|
||||
"\u03cc\3\2\2\2\u00a5\u03d1\3\2\2\2\u00a7\u03da\3\2\2\2\u00a9\u03e2\3\2"+
|
||||
"\2\2\u00ab\u03e8\3\2\2\2\u00ad\u03ea\3\2\2\2\u00af\u03ec\3\2\2\2\u00b1"+
|
||||
"\u03ee\3\2\2\2\u00b3\u03f0\3\2\2\2\u00b5\u03f2\3\2\2\2\u00b7\u03f4\3\2"+
|
||||
"\2\2\u00b9\u03f6\3\2\2\2\u00bb\u03f8\3\2\2\2\u00bd\u03fa\3\2\2\2\u00bf"+
|
||||
"\u03fc\3\2\2\2\u00c1\u03fe\3\2\2\2\u00c3\u0400\3\2\2\2\u00c5\u0402\3\2"+
|
||||
"\2\2\u00c7\u0404\3\2\2\2\u00c9\u040a\3\2\2\2\u00cb\u040c\3\2\2\2\u00cd"+
|
||||
"\u040e\3\2\2\2\u00cf\u0410\3\2\2\2\u00d1\u0412\3\2\2\2\u00d3\u0415\3\2"+
|
||||
"\2\2\u00d5\u0418\3\2\2\2\u00d7\u041b\3\2\2\2\u00d9\u041e\3\2\2\2\u00db"+
|
||||
"\u0421\3\2\2\2\u00dd\u0424\3\2\2\2\u00df\u0427\3\2\2\2\u00e1\u042a\3\2"+
|
||||
"\2\2\u00e3\u042e\3\2\2\2\u00e5\u0432\3\2\2\2\u00e7\u0435\3\2\2\2\u00e9"+
|
||||
"\u0438\3\2\2\2\u00eb\u043b\3\2\2\2\u00ed\u0443\3\2\2\2\u00ef\u0449\3\2"+
|
||||
"\2\2\u00f1\u044b\3\2\2\2\u00f3\u044e\3\2\2\2\u00f5\u0451\3\2\2\2\u00f7"+
|
||||
"\u0453\3\2\2\2\u00f9\u0457\3\2\2\2\u00fb\u045a\3\2\2\2\u00fd\u045c\3\2"+
|
||||
"\2\2\u00ff\u045e\3\2\2\2\u0101\u0461\3\2\2\2\u0103\u0463\3\2\2\2\u0105"+
|
||||
"\u0465\3\2\2\2\u0107\u0468\3\2\2\2\u0109\u046c\3\2\2\2\u010b\u047b\3\2"+
|
||||
"\2\2\u010d\u047d\3\2\2\2\u010f\u0487\3\2\2\2\u0111\u0489\3\2\2\2\u0113"+
|
||||
"\u048b\3\2\2\2\u0115\u048d\3\2\2\2\u0117\u0497\3\2\2\2\u0119\u04a5\3\2"+
|
||||
"\2\2\u011b\u04b5\3\2\2\2\u011d\u04c1\3\2\2\2\u011f\u04c3\3\2\2\2\u0121"+
|
||||
"\u04c5\3\2\2\2\u0123\u04c7\3\2\2\2\u0125\u04d9\3\2\2\2\u0127\u04db\3\2"+
|
||||
"\2\2\u0129\u04dd\3\2\2\2\u012b\u04e3\3\2\2\2\u012d\u04e8\3\2\2\2\u012f"+
|
||||
"\u04ed\3\2\2\2\u0131\u050d\3\2\2\2\u0133\u051a\3\2\2\2\u0135\u051c\3\2"+
|
||||
"\2\2\u0137\u052c\3\2\2\2\u0139\u0538\3\2\2\2\u013b\u053a\3\2\2\2\u013d"+
|
||||
"\u053c\3\2\2\2\u013f\u0546\3\2\2\2\u0141\u054b\3\2\2\2\u0143\u0550\3\2"+
|
||||
"\2\2\u0145\u0552\3\2\2\2\u0147\u0575\3\2\2\2\u0149\u0581\3\2\2\2\u014b"+
|
||||
"\u0583\3\2\2\2\u014d\u0586\3\2\2\2\u014f\u0589\3\2\2\2\u0151\u058c\3\2"+
|
||||
"\2\2\u0153\u0597\3\2\2\2\u0155\u059b\3\2\2\2\u0157\u05a9\3\2\2\2\u0159"+
|
||||
"\u015b\5\u0115\u008b\2\u015a\u015c\5\u0125\u0093\2\u015b\u015a\3\2\2\2"+
|
||||
"\u015b\u015c\3\2\2\2\u015c\u016a\3\2\2\2\u015d\u015f\5\u0117\u008c\2\u015e"+
|
||||
"\u0160\5\u0125\u0093\2\u015f\u015e\3\2\2\2\u015f\u0160\3\2\2\2\u0160\u016a"+
|
||||
"\3\2\2\2\u0161\u0163\5\u0119\u008d\2\u0162\u0164\5\u0125\u0093\2\u0163"+
|
||||
"\u0162\3\2\2\2\u0163\u0164\3\2\2\2\u0164\u016a\3\2\2\2\u0165\u0167\5\u011b"+
|
||||
"\u008e\2\u0166\u0168\5\u0125\u0093\2\u0167\u0166\3\2\2\2\u0167\u0168\3"+
|
||||
"\2\2\2\u0168\u016a\3\2\2\2\u0169\u0159\3\2\2\2\u0169\u015d\3\2\2\2\u0169"+
|
||||
"\u0161\3\2\2\2\u0169\u0165\3\2\2\2\u016a\4\3\2\2\2\u016b\u016d\t\2\2\2"+
|
||||
"\u016c\u016b\3\2\2\2\u016c\u016d\3\2\2\2\u016d\u016e\3\2\2\2\u016e\u0170"+
|
||||
"\7)\2\2\u016f\u0171\5\u012d\u0097\2\u0170\u016f\3\2\2\2\u0171\u0172\3"+
|
||||
"\2\2\2\u0172\u0170\3\2\2\2\u0172\u0173\3\2\2\2\u0173\u0174\3\2\2\2\u0174"+
|
||||
"\u0175\7)\2\2\u0175\6\3\2\2\2\u0176\u0178\5\u0137\u009c\2\u0177\u0179"+
|
||||
"\5\u0139\u009d\2\u0178\u0177\3\2\2\2\u0178\u0179\3\2\2\2\u0179\u017b\3"+
|
||||
"\2\2\2\u017a\u017c\5\u013f\u00a0\2\u017b\u017a\3\2\2\2\u017b\u017c\3\2"+
|
||||
"\2\2\u017c\u0183\3\2\2\2\u017d\u017e\5\u013d\u009f\2\u017e\u0180\5\u0139"+
|
||||
"\u009d\2\u017f\u0181\5\u013f\u00a0\2\u0180\u017f\3\2\2\2\u0180\u0181\3"+
|
||||
"\2\2\2\u0181\u0183\3\2\2\2\u0182\u0176\3\2\2\2\u0182\u017d\3\2\2\2\u0183"+
|
||||
"\b\3\2\2\2\u0184\u0186\5\u0141\u00a1\2\u0185\u0184\3\2\2\2\u0185\u0186"+
|
||||
"\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u018b\7$\2\2\u0188\u018a\5\u0143\u00a2"+
|
||||
"\2\u0189\u0188\3\2\2\2\u018a\u018d\3\2\2\2\u018b\u0189\3\2\2\2\u018b\u018c"+
|
||||
"\3\2\2\2\u018c\u018e\3\2\2\2\u018d\u018b\3\2\2\2\u018e\u0195\7$\2\2\u018f"+
|
||||
"\u0191\5\u0141\u00a1\2\u0190\u018f\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u0192"+
|
||||
"\3\2\2\2\u0192\u0193\7T\2\2\u0193\u0195\5\u0145\u00a3\2\u0194\u0185\3"+
|
||||
"\2\2\2\u0194\u0190\3\2\2\2\u0195\n\3\2\2\2\u0196\u0199\5K&\2\u0197\u0199"+
|
||||
"\5\u0091I\2\u0198\u0196\3\2\2\2\u0198\u0197\3\2\2\2\u0199\f\3\2\2\2\u019a"+
|
||||
"\u019b\5g\64\2\u019b\16\3\2\2\2\u019c\u01a1\5\u0147\u00a4\2\u019d\u01a1"+
|
||||
"\5\u0149\u00a5\2\u019e\u01a1\5\u014b\u00a6\2\u019f\u01a1\5\u014d\u00a7"+
|
||||
"\2\u01a0\u019c\3\2\2\2\u01a0\u019d\3\2\2\2\u01a0\u019e\3\2\2\2\u01a0\u019f"+
|
||||
"\3\2\2\2\u01a1\20\3\2\2\2\u01a2\u01ae\7%\2\2\u01a3\u01a5\n\3\2\2\u01a4"+
|
||||
"\u01a3\3\2\2\2\u01a5\u01a8\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a6\u01a4\3\2"+
|
||||
"\2\2\u01a7\u01a9\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a9\u01ab\7^\2\2\u01aa"+
|
||||
"\u01ac\7\17\2\2\u01ab\u01aa\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ad\3"+
|
||||
"\2\2\2\u01ad\u01af\7\f\2\2\u01ae\u01a6\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0"+
|
||||
"\u01ae\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1\u01b3\3\2\2\2\u01b2\u01b4\n\3"+
|
||||
"\2\2\u01b3\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5"+
|
||||
"\u01b6\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b7\u01b8\b\t\2\2\u01b8\22\3\2\2"+
|
||||
"\2\u01b9\u01bd\7%\2\2\u01ba\u01bc\n\3\2\2\u01bb\u01ba\3\2\2\2\u01bc\u01bf"+
|
||||
"\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd\u01be\3\2\2\2\u01be\u01c0\3\2\2\2\u01bf"+
|
||||
"\u01bd\3\2\2\2\u01c0\u01c1\b\n\2\2\u01c1\24\3\2\2\2\u01c2\u01c3\7c\2\2"+
|
||||
"\u01c3\u01c4\7n\2\2\u01c4\u01c5\7k\2\2\u01c5\u01c6\7i\2\2\u01c6\u01c7"+
|
||||
"\7p\2\2\u01c7\u01c8\7c\2\2\u01c8\u01c9\7u\2\2\u01c9\26\3\2\2\2\u01ca\u01cb"+
|
||||
"\7c\2\2\u01cb\u01cc\7n\2\2\u01cc\u01cd\7k\2\2\u01cd\u01ce\7i\2\2\u01ce"+
|
||||
"\u01cf\7p\2\2\u01cf\u01d0\7q\2\2\u01d0\u01d1\7h\2\2\u01d1\30\3\2\2\2\u01d2"+
|
||||
"\u01d3\7c\2\2\u01d3\u01d4\7u\2\2\u01d4\u01d5\7o\2\2\u01d5\32\3\2\2\2\u01d6"+
|
||||
"\u01d7\7c\2\2\u01d7\u01d8\7w\2\2\u01d8\u01d9\7v\2\2\u01d9\u01da\7q\2\2"+
|
||||
"\u01da\34\3\2\2\2\u01db\u01dc\7d\2\2\u01dc\u01dd\7q\2\2\u01dd\u01de\7"+
|
||||
"q\2\2\u01de\u01df\7n\2\2\u01df\36\3\2\2\2\u01e0\u01e1\7d\2\2\u01e1\u01e2"+
|
||||
"\7t\2\2\u01e2\u01e3\7g\2\2\u01e3\u01e4\7c\2\2\u01e4\u01e5\7m\2\2\u01e5"+
|
||||
" \3\2\2\2\u01e6\u01e7\7e\2\2\u01e7\u01e8\7c\2\2\u01e8\u01e9\7u\2\2\u01e9"+
|
||||
"\u01ea\7g\2\2\u01ea\"\3\2\2\2\u01eb\u01ec\7e\2\2\u01ec\u01ed\7c\2\2\u01ed"+
|
||||
"\u01ee\7v\2\2\u01ee\u01ef\7e\2\2\u01ef\u01f0\7j\2\2\u01f0$\3\2\2\2\u01f1"+
|
||||
"\u01f2\7e\2\2\u01f2\u01f3\7j\2\2\u01f3\u01f4\7c\2\2\u01f4\u01f5\7t\2\2"+
|
||||
"\u01f5&\3\2\2\2\u01f6\u01f7\7e\2\2\u01f7\u01f8\7j\2\2\u01f8\u01f9\7c\2"+
|
||||
"\2\u01f9\u01fa\7t\2\2\u01fa\u01fb\7\63\2\2\u01fb\u01fc\78\2\2\u01fc\u01fd"+
|
||||
"\7a\2\2\u01fd\u01fe\7v\2\2\u01fe(\3\2\2\2\u01ff\u0200\7e\2\2\u0200\u0201"+
|
||||
"\7j\2\2\u0201\u0202\7c\2\2\u0202\u0203\7t\2\2\u0203\u0204\7\65\2\2\u0204"+
|
||||
"\u0205\7\64\2\2\u0205\u0206\7a\2\2\u0206\u0207\7v\2\2\u0207*\3\2\2\2\u0208"+
|
||||
"\u0209\7e\2\2\u0209\u020a\7n\2\2\u020a\u020b\7c\2\2\u020b\u020c\7u\2\2"+
|
||||
"\u020c\u020d\7u\2\2\u020d,\3\2\2\2\u020e\u020f\7e\2\2\u020f\u0210\7q\2"+
|
||||
"\2\u0210\u0211\7p\2\2\u0211\u0212\7u\2\2\u0212\u0213\7v\2\2\u0213.\3\2"+
|
||||
"\2\2\u0214\u0215\7e\2\2\u0215\u0216\7q\2\2\u0216\u0217\7p\2\2\u0217\u0218"+
|
||||
"\7u\2\2\u0218\u0219\7v\2\2\u0219\u021a\7g\2\2\u021a\u021b\7z\2\2\u021b"+
|
||||
"\u021c\7r\2\2\u021c\u021d\7t\2\2\u021d\60\3\2\2\2\u021e\u021f\7e\2\2\u021f"+
|
||||
"\u0220\7q\2\2\u0220\u0221\7p\2\2\u0221\u0222\7u\2\2\u0222\u0223\7v\2\2"+
|
||||
"\u0223\u0224\7a\2\2\u0224\u0225\7e\2\2\u0225\u0226\7c\2\2\u0226\u0227"+
|
||||
"\7u\2\2\u0227\u0228\7v\2\2\u0228\62\3\2\2\2\u0229\u022a\7e\2\2\u022a\u022b"+
|
||||
"\7q\2\2\u022b\u022c\7p\2\2\u022c\u022d\7v\2\2\u022d\u022e\7k\2\2\u022e"+
|
||||
"\u022f\7p\2\2\u022f\u0230\7w\2\2\u0230\u0231\7g\2\2\u0231\64\3\2\2\2\u0232"+
|
||||
"\u0233\7f\2\2\u0233\u0234\7g\2\2\u0234\u0235\7e\2\2\u0235\u0236\7n\2\2"+
|
||||
"\u0236\u0237\7v\2\2\u0237\u0238\7{\2\2\u0238\u0239\7r\2\2\u0239\u023a"+
|
||||
"\7g\2\2\u023a\66\3\2\2\2\u023b\u023c\7f\2\2\u023c\u023d\7g\2\2\u023d\u023e"+
|
||||
"\7h\2\2\u023e\u023f\7c\2\2\u023f\u0240\7w\2\2\u0240\u0241\7n\2\2\u0241"+
|
||||
"\u0242\7v\2\2\u02428\3\2\2\2\u0243\u0244\7f\2\2\u0244\u0245\7g\2\2\u0245"+
|
||||
"\u0246\7n\2\2\u0246\u0247\7g\2\2\u0247\u0248\7v\2\2\u0248\u0249\7g\2\2"+
|
||||
"\u0249:\3\2\2\2\u024a\u024b\7f\2\2\u024b\u024c\7q\2\2\u024c<\3\2\2\2\u024d"+
|
||||
"\u024e\7f\2\2\u024e\u024f\7q\2\2\u024f\u0250\7w\2\2\u0250\u0251\7d\2\2"+
|
||||
"\u0251\u0252\7n\2\2\u0252\u0253\7g\2\2\u0253>\3\2\2\2\u0254\u0255\7f\2"+
|
||||
"\2\u0255\u0256\7{\2\2\u0256\u0257\7p\2\2\u0257\u0258\7c\2\2\u0258\u0259"+
|
||||
"\7o\2\2\u0259\u025a\7k\2\2\u025a\u025b\7e\2\2\u025b\u025c\7a\2\2\u025c"+
|
||||
"\u025d\7e\2\2\u025d\u025e\7c\2\2\u025e\u025f\7u\2\2\u025f\u0260\7v\2\2"+
|
||||
"\u0260@\3\2\2\2\u0261\u0262\7g\2\2\u0262\u0263\7n\2\2\u0263\u0264\7u\2"+
|
||||
"\2\u0264\u0265\7g\2\2\u0265B\3\2\2\2\u0266\u0267\7g\2\2\u0267\u0268\7"+
|
||||
"p\2\2\u0268\u0269\7w\2\2\u0269\u026a\7o\2\2\u026aD\3\2\2\2\u026b\u026c"+
|
||||
"\7g\2\2\u026c\u026d\7z\2\2\u026d\u026e\7r\2\2\u026e\u026f\7n\2\2\u026f"+
|
||||
"\u0270\7k\2\2\u0270\u0271\7e\2\2\u0271\u0272\7k\2\2\u0272\u0273\7v\2\2"+
|
||||
"\u0273F\3\2\2\2\u0274\u0275\7g\2\2\u0275\u0276\7z\2\2\u0276\u0277\7r\2"+
|
||||
"\2\u0277\u0278\7q\2\2\u0278\u0279\7t\2\2\u0279\u027a\7v\2\2\u027aH\3\2"+
|
||||
"\2\2\u027b\u027c\7g\2\2\u027c\u027d\7z\2\2\u027d\u027e\7v\2\2\u027e\u027f"+
|
||||
"\7g\2\2\u027f\u0280\7t\2\2\u0280\u0281\7p\2\2\u0281J\3\2\2\2\u0282\u0283"+
|
||||
"\7h\2\2\u0283\u0284\7c\2\2\u0284\u0285\7n\2\2\u0285\u0286\7u\2\2\u0286"+
|
||||
"\u0287\7g\2\2\u0287L\3\2\2\2\u0288\u0289\7h\2\2\u0289\u028a\7k\2\2\u028a"+
|
||||
"\u028b\7p\2\2\u028b\u028c\7c\2\2\u028c\u028d\7n\2\2\u028dN\3\2\2\2\u028e"+
|
||||
"\u028f\7h\2\2\u028f\u0290\7n\2\2\u0290\u0291\7q\2\2\u0291\u0292\7c\2\2"+
|
||||
"\u0292\u0293\7v\2\2\u0293P\3\2\2\2\u0294\u0295\7h\2\2\u0295\u0296\7q\2"+
|
||||
"\2\u0296\u0297\7t\2\2\u0297R\3\2\2\2\u0298\u0299\7h\2\2\u0299\u029a\7"+
|
||||
"t\2\2\u029a\u029b\7k\2\2\u029b\u029c\7g\2\2\u029c\u029d\7p\2\2\u029d\u029e"+
|
||||
"\7f\2\2\u029eT\3\2\2\2\u029f\u02a0\7i\2\2\u02a0\u02a1\7q\2\2\u02a1\u02a2"+
|
||||
"\7v\2\2\u02a2\u02a3\7q\2\2\u02a3V\3\2\2\2\u02a4\u02a5\7k\2\2\u02a5\u02a6"+
|
||||
"\7h\2\2\u02a6X\3\2\2\2\u02a7\u02a8\7k\2\2\u02a8\u02a9\7p\2\2\u02a9\u02aa"+
|
||||
"\7n\2\2\u02aa\u02ab\7k\2\2\u02ab\u02ac\7p\2\2\u02ac\u02ad\7g\2\2\u02ad"+
|
||||
"Z\3\2\2\2\u02ae\u02af\7k\2\2\u02af\u02b0\7p\2\2\u02b0\u02b1\7v\2\2\u02b1"+
|
||||
"\\\3\2\2\2\u02b2\u02b3\7n\2\2\u02b3\u02b4\7q\2\2\u02b4\u02b5\7p\2\2\u02b5"+
|
||||
"\u02b6\7i\2\2\u02b6^\3\2\2\2\u02b7\u02b8\7o\2\2\u02b8\u02b9\7w\2\2\u02b9"+
|
||||
"\u02ba\7v\2\2\u02ba\u02bb\7c\2\2\u02bb\u02bc\7d\2\2\u02bc\u02bd\7n\2\2"+
|
||||
"\u02bd\u02be\7g\2\2\u02be`\3\2\2\2\u02bf\u02c0\7p\2\2\u02c0\u02c1\7c\2"+
|
||||
"\2\u02c1\u02c2\7o\2\2\u02c2\u02c3\7g\2\2\u02c3\u02c4\7u\2\2\u02c4\u02c5"+
|
||||
"\7r\2\2\u02c5\u02c6\7c\2\2\u02c6\u02c7\7e\2\2\u02c7\u02c8\7g\2\2\u02c8"+
|
||||
"b\3\2\2\2\u02c9\u02ca\7p\2\2\u02ca\u02cb\7g\2\2\u02cb\u02cc\7y\2\2\u02cc"+
|
||||
"d\3\2\2\2\u02cd\u02ce\7p\2\2\u02ce\u02cf\7q\2\2\u02cf\u02d0\7g\2\2\u02d0"+
|
||||
"\u02d1\7z\2\2\u02d1\u02d2\7e\2\2\u02d2\u02d3\7g\2\2\u02d3\u02d4\7r\2\2"+
|
||||
"\u02d4\u02d5\7v\2\2\u02d5f\3\2\2\2\u02d6\u02d7\7p\2\2\u02d7\u02d8\7w\2"+
|
||||
"\2\u02d8\u02d9\7n\2\2\u02d9\u02da\7n\2\2\u02da\u02db\7r\2\2\u02db\u02dc"+
|
||||
"\7v\2\2\u02dc\u02dd\7t\2\2\u02ddh\3\2\2\2\u02de\u02df\7q\2\2\u02df\u02e0"+
|
||||
"\7r\2\2\u02e0\u02e1\7g\2\2\u02e1\u02e2\7t\2\2\u02e2\u02e3\7c\2\2\u02e3"+
|
||||
"\u02e4\7v\2\2\u02e4\u02e5\7q\2\2\u02e5\u02e6\7t\2\2\u02e6j\3\2\2\2\u02e7"+
|
||||
"\u02e8\7q\2\2\u02e8\u02e9\7x\2\2\u02e9\u02ea\7g\2\2\u02ea\u02eb\7t\2\2"+
|
||||
"\u02eb\u02ec\7t\2\2\u02ec\u02ed\7k\2\2\u02ed\u02ee\7f\2\2\u02ee\u02ef"+
|
||||
"\7g\2\2\u02efl\3\2\2\2\u02f0\u02f1\7r\2\2\u02f1\u02f2\7t\2\2\u02f2\u02f3"+
|
||||
"\7k\2\2\u02f3\u02f4\7x\2\2\u02f4\u02f5\7c\2\2\u02f5\u02f6\7v\2\2\u02f6"+
|
||||
"\u02f7\7g\2\2\u02f7n\3\2\2\2\u02f8\u02f9\7r\2\2\u02f9\u02fa\7t\2\2\u02fa"+
|
||||
"\u02fb\7q\2\2\u02fb\u02fc\7v\2\2\u02fc\u02fd\7g\2\2\u02fd\u02fe\7e\2\2"+
|
||||
"\u02fe\u02ff\7v\2\2\u02ff\u0300\7g\2\2\u0300\u0301\7f\2\2\u0301p\3\2\2"+
|
||||
"\2\u0302\u0303\7r\2\2\u0303\u0304\7w\2\2\u0304\u0305\7d\2\2\u0305\u0306"+
|
||||
"\7n\2\2\u0306\u0307\7k\2\2\u0307\u0308\7e\2\2\u0308r\3\2\2\2\u0309\u030a"+
|
||||
"\7t\2\2\u030a\u030b\7g\2\2\u030b\u030c\7i\2\2\u030c\u030d\7k\2\2\u030d"+
|
||||
"\u030e\7u\2\2\u030e\u030f\7v\2\2\u030f\u0310\7g\2\2\u0310\u0311\7t\2\2"+
|
||||
"\u0311t\3\2\2\2\u0312\u0313\7t\2\2\u0313\u0314\7g\2\2\u0314\u0315\7k\2"+
|
||||
"\2\u0315\u0316\7p\2\2\u0316\u0317\7v\2\2\u0317\u0318\7g\2\2\u0318\u0319"+
|
||||
"\7t\2\2\u0319\u031a\7r\2\2\u031a\u031b\7t\2\2\u031b\u031c\7g\2\2\u031c"+
|
||||
"\u031d\7v\2\2\u031d\u031e\7a\2\2\u031e\u031f\7e\2\2\u031f\u0320\7c\2\2"+
|
||||
"\u0320\u0321\7u\2\2\u0321\u0322\7v\2\2\u0322v\3\2\2\2\u0323\u0324\7t\2"+
|
||||
"\2\u0324\u0325\7g\2\2\u0325\u0326\7v\2\2\u0326\u0327\7w\2\2\u0327\u0328"+
|
||||
"\7t\2\2\u0328\u0329\7p\2\2\u0329x\3\2\2\2\u032a\u032b\7u\2\2\u032b\u032c"+
|
||||
"\7j\2\2\u032c\u032d\7q\2\2\u032d\u032e\7t\2\2\u032e\u032f\7v\2\2\u032f"+
|
||||
"z\3\2\2\2\u0330\u0331\7u\2\2\u0331\u0332\7k\2\2\u0332\u0333\7i\2\2\u0333"+
|
||||
"\u0334\7p\2\2\u0334\u0335\7g\2\2\u0335\u0336\7f\2\2\u0336|\3\2\2\2\u0337"+
|
||||
"\u0338\7u\2\2\u0338\u0339\7k\2\2\u0339\u033a\7|\2\2\u033a\u033b\7g\2\2"+
|
||||
"\u033b\u033c\7q\2\2\u033c\u033d\7h\2\2\u033d~\3\2\2\2\u033e\u033f\7u\2"+
|
||||
"\2\u033f\u0340\7v\2\2\u0340\u0341\7c\2\2\u0341\u0342\7v\2\2\u0342\u0343"+
|
||||
"\7k\2\2\u0343\u0344\7e\2\2\u0344\u0080\3\2\2\2\u0345\u0346\7u\2\2\u0346"+
|
||||
"\u0347\7v\2\2\u0347\u0348\7c\2\2\u0348\u0349\7v\2\2\u0349\u034a\7k\2\2"+
|
||||
"\u034a\u034b\7e\2\2\u034b\u034c\7a\2\2\u034c\u034d\7c\2\2\u034d\u034e"+
|
||||
"\7u\2\2\u034e\u034f\7u\2\2\u034f\u0350\7g\2\2\u0350\u0351\7t\2\2\u0351"+
|
||||
"\u0352\7v\2\2\u0352\u0082\3\2\2\2\u0353\u0354\7u\2\2\u0354\u0355\7v\2"+
|
||||
"\2\u0355\u0356\7c\2\2\u0356\u0357\7v\2\2\u0357\u0358\7k\2\2\u0358\u0359"+
|
||||
"\7e\2\2\u0359\u035a\7a\2\2\u035a\u035b\7e\2\2\u035b\u035c\7c\2\2\u035c"+
|
||||
"\u035d\7u\2\2\u035d\u035e\7v\2\2\u035e\u0084\3\2\2\2\u035f\u0360\7u\2"+
|
||||
"\2\u0360\u0361\7v\2\2\u0361\u0362\7t\2\2\u0362\u0363\7w\2\2\u0363\u0364"+
|
||||
"\7e\2\2\u0364\u0365\7v\2\2\u0365\u0086\3\2\2\2\u0366\u0367\7u\2\2\u0367"+
|
||||
"\u0368\7y\2\2\u0368\u0369\7k\2\2\u0369\u036a\7v\2\2\u036a\u036b\7e\2\2"+
|
||||
"\u036b\u036c\7j\2\2\u036c\u0088\3\2\2\2\u036d\u036e\7v\2\2\u036e\u036f"+
|
||||
"\7g\2\2\u036f\u0370\7o\2\2\u0370\u0371\7r\2\2\u0371\u0372\7n\2\2\u0372"+
|
||||
"\u0373\7c\2\2\u0373\u0374\7v\2\2\u0374\u0375\7g\2\2\u0375\u008a\3\2\2"+
|
||||
"\2\u0376\u0377\7v\2\2\u0377\u0378\7j\2\2\u0378\u0379\7k\2\2\u0379\u037a"+
|
||||
"\7u\2\2\u037a\u008c\3\2\2\2\u037b\u037c\7v\2\2\u037c\u037d\7j\2\2\u037d"+
|
||||
"\u037e\7t\2\2\u037e\u037f\7g\2\2\u037f\u0380\7c\2\2\u0380\u0381\7f\2\2"+
|
||||
"\u0381\u0382\7a\2\2\u0382\u0383\7n\2\2\u0383\u0384\7q\2\2\u0384\u0385"+
|
||||
"\7e\2\2\u0385\u0386\7c\2\2\u0386\u0387\7n\2\2\u0387\u008e\3\2\2\2\u0388"+
|
||||
"\u0389\7v\2\2\u0389\u038a\7j\2\2\u038a\u038b\7t\2\2\u038b\u038c\7q\2\2"+
|
||||
"\u038c\u038d\7y\2\2\u038d\u0090\3\2\2\2\u038e\u038f\7v\2\2\u038f\u0390"+
|
||||
"\7t\2\2\u0390\u0391\7w\2\2\u0391\u0392\7g\2\2\u0392\u0092\3\2\2\2\u0393"+
|
||||
"\u0394\7v\2\2\u0394\u0395\7t\2\2\u0395\u0396\7{\2\2\u0396\u0094\3\2\2"+
|
||||
"\2\u0397\u0398\7v\2\2\u0398\u0399\7{\2\2\u0399\u039a\7r\2\2\u039a\u039b"+
|
||||
"\7g\2\2\u039b\u039c\7f\2\2\u039c\u039d\7g\2\2\u039d\u039e\7h\2\2\u039e"+
|
||||
"\u0096\3\2\2\2\u039f\u03a0\7v\2\2\u03a0\u03a1\7{\2\2\u03a1\u03a2\7r\2"+
|
||||
"\2\u03a2\u03a3\7g\2\2\u03a3\u03a4\7k\2\2\u03a4\u03a5\7f\2\2\u03a5\u0098"+
|
||||
"\3\2\2\2\u03a6\u03a7\7v\2\2\u03a7\u03a8\7{\2\2\u03a8\u03a9\7r\2\2\u03a9"+
|
||||
"\u03aa\7g\2\2\u03aa\u03ab\7p\2\2\u03ab\u03ac\7c\2\2\u03ac\u03ad\7o\2\2"+
|
||||
"\u03ad\u03ae\7g\2\2\u03ae\u009a\3\2\2\2\u03af\u03b0\7w\2\2\u03b0\u03b1"+
|
||||
"\7p\2\2\u03b1\u03b2\7k\2\2\u03b2\u03b3\7q\2\2\u03b3\u03b4\7p\2\2\u03b4"+
|
||||
"\u009c\3\2\2\2\u03b5\u03b6\7w\2\2\u03b6\u03b7\7p\2\2\u03b7\u03b8\7u\2"+
|
||||
"\2\u03b8\u03b9\7k\2\2\u03b9\u03ba\7i\2\2\u03ba\u03bb\7p\2\2\u03bb\u03bc"+
|
||||
"\7g\2\2\u03bc\u03bd\7f\2\2\u03bd\u009e\3\2\2\2\u03be\u03bf\7w\2\2\u03bf"+
|
||||
"\u03c0\7u\2\2\u03c0\u03c1\7k\2\2\u03c1\u03c2\7p\2\2\u03c2\u03c3\7i\2\2"+
|
||||
"\u03c3\u00a0\3\2\2\2\u03c4\u03c5\7x\2\2\u03c5\u03c6\7k\2\2\u03c6\u03c7"+
|
||||
"\7t\2\2\u03c7\u03c8\7v\2\2\u03c8\u03c9\7w\2\2\u03c9\u03ca\7c\2\2\u03ca"+
|
||||
"\u03cb\7n\2\2\u03cb\u00a2\3\2\2\2\u03cc\u03cd\7x\2\2\u03cd\u03ce\7q\2"+
|
||||
"\2\u03ce\u03cf\7k\2\2\u03cf\u03d0\7f\2\2\u03d0\u00a4\3\2\2\2\u03d1\u03d2"+
|
||||
"\7x\2\2\u03d2\u03d3\7q\2\2\u03d3\u03d4\7n\2\2\u03d4\u03d5\7c\2\2\u03d5"+
|
||||
"\u03d6\7v\2\2\u03d6\u03d7\7k\2\2\u03d7\u03d8\7n\2\2\u03d8\u03d9\7g\2\2"+
|
||||
"\u03d9\u00a6\3\2\2\2\u03da\u03db\7y\2\2\u03db\u03dc\7e\2\2\u03dc\u03dd"+
|
||||
"\7j\2\2\u03dd\u03de\7c\2\2\u03de\u03df\7t\2\2\u03df\u03e0\7a\2\2\u03e0"+
|
||||
"\u03e1\7v\2\2\u03e1\u00a8\3\2\2\2\u03e2\u03e3\7y\2\2\u03e3\u03e4\7j\2"+
|
||||
"\2\u03e4\u03e5\7k\2\2\u03e5\u03e6\7n\2\2\u03e6\u03e7\7g\2\2\u03e7\u00aa"+
|
||||
"\3\2\2\2\u03e8\u03e9\7*\2\2\u03e9\u00ac\3\2\2\2\u03ea\u03eb\7+\2\2\u03eb"+
|
||||
"\u00ae\3\2\2\2\u03ec\u03ed\7]\2\2\u03ed\u00b0\3\2\2\2\u03ee\u03ef\7_\2"+
|
||||
"\2\u03ef\u00b2\3\2\2\2\u03f0\u03f1\7}\2\2\u03f1\u00b4\3\2\2\2\u03f2\u03f3"+
|
||||
"\7\177\2\2\u03f3\u00b6\3\2\2\2\u03f4\u03f5\7-\2\2\u03f5\u00b8\3\2\2\2"+
|
||||
"\u03f6\u03f7\7/\2\2\u03f7\u00ba\3\2\2\2\u03f8\u03f9\7,\2\2\u03f9\u00bc"+
|
||||
"\3\2\2\2\u03fa\u03fb\7\61\2\2\u03fb\u00be\3\2\2\2\u03fc\u03fd\7\'\2\2"+
|
||||
"\u03fd\u00c0\3\2\2\2\u03fe\u03ff\7`\2\2\u03ff\u00c2\3\2\2\2\u0400\u0401"+
|
||||
"\7(\2\2\u0401\u00c4\3\2\2\2\u0402\u0403\7~\2\2\u0403\u00c6\3\2\2\2\u0404"+
|
||||
"\u0405\7\u0080\2\2\u0405\u00c8\3\2\2\2\u0406\u040b\7#\2\2\u0407\u0408"+
|
||||
"\7p\2\2\u0408\u0409\7q\2\2\u0409\u040b\7v\2\2\u040a\u0406\3\2\2\2\u040a"+
|
||||
"\u0407\3\2\2\2\u040b\u00ca\3\2\2\2\u040c\u040d\7?\2\2\u040d\u00cc\3\2"+
|
||||
"\2\2\u040e\u040f\7>\2\2\u040f\u00ce\3\2\2\2\u0410\u0411\7@\2\2\u0411\u00d0"+
|
||||
"\3\2\2\2\u0412\u0413\7-\2\2\u0413\u0414\7?\2\2\u0414\u00d2\3\2\2\2\u0415"+
|
||||
"\u0416\7/\2\2\u0416\u0417\7?\2\2\u0417\u00d4\3\2\2\2\u0418\u0419\7,\2"+
|
||||
"\2\u0419\u041a\7?\2\2\u041a\u00d6\3\2\2\2\u041b\u041c\7\61\2\2\u041c\u041d"+
|
||||
"\7?\2\2\u041d\u00d8\3\2\2\2\u041e\u041f\7\'\2\2\u041f\u0420\7?\2\2\u0420"+
|
||||
"\u00da\3\2\2\2\u0421\u0422\7`\2\2\u0422\u0423\7?\2\2\u0423\u00dc\3\2\2"+
|
||||
"\2\u0424\u0425\7(\2\2\u0425\u0426\7?\2\2\u0426\u00de\3\2\2\2\u0427\u0428"+
|
||||
"\7~\2\2\u0428\u0429\7?\2\2\u0429\u00e0\3\2\2\2\u042a\u042b\7>\2\2\u042b"+
|
||||
"\u042c\7>\2\2\u042c\u042d\7?\2\2\u042d\u00e2\3\2\2\2\u042e\u042f\7@\2"+
|
||||
"\2\u042f\u0430\7@\2\2\u0430\u0431\7?\2\2\u0431\u00e4\3\2\2\2\u0432\u0433"+
|
||||
"\7?\2\2\u0433\u0434\7?\2\2\u0434\u00e6\3\2\2\2\u0435\u0436\7#\2\2\u0436"+
|
||||
"\u0437\7?\2\2\u0437\u00e8\3\2\2\2\u0438\u0439\7>\2\2\u0439\u043a\7?\2"+
|
||||
"\2\u043a\u00ea\3\2\2\2\u043b\u043c\7@\2\2\u043c\u043d\7?\2\2\u043d\u00ec"+
|
||||
"\3\2\2\2\u043e\u043f\7(\2\2\u043f\u0444\7(\2\2\u0440\u0441\7c\2\2\u0441"+
|
||||
"\u0442\7p\2\2\u0442\u0444\7f\2\2\u0443\u043e\3\2\2\2\u0443\u0440\3\2\2"+
|
||||
"\2\u0444\u00ee\3\2\2\2\u0445\u0446\7~\2\2\u0446\u044a\7~\2\2\u0447\u0448"+
|
||||
"\7q\2\2\u0448\u044a\7t\2\2\u0449\u0445\3\2\2\2\u0449\u0447\3\2\2\2\u044a"+
|
||||
"\u00f0\3\2\2\2\u044b\u044c\7-\2\2\u044c\u044d\7-\2\2\u044d\u00f2\3\2\2"+
|
||||
"\2\u044e\u044f\7/\2\2\u044f\u0450\7/\2\2\u0450\u00f4\3\2\2\2\u0451\u0452"+
|
||||
"\7.\2\2\u0452\u00f6\3\2\2\2\u0453\u0454\7/\2\2\u0454\u0455\7@\2\2\u0455"+
|
||||
"\u0456\7,\2\2\u0456\u00f8\3\2\2\2\u0457\u0458\7/\2\2\u0458\u0459\7@\2"+
|
||||
"\2\u0459\u00fa\3\2\2\2\u045a\u045b\7A\2\2\u045b\u00fc\3\2\2\2\u045c\u045d"+
|
||||
"\7<\2\2\u045d\u00fe\3\2\2\2\u045e\u045f\7<\2\2\u045f\u0460\7<\2\2\u0460"+
|
||||
"\u0100\3\2\2\2\u0461\u0462\7=\2\2\u0462\u0102\3\2\2\2\u0463\u0464\7\60"+
|
||||
"\2\2\u0464\u0104\3\2\2\2\u0465\u0466\7\60\2\2\u0466\u0467\7,\2\2\u0467"+
|
||||
"\u0106\3\2\2\2\u0468\u0469\7\60\2\2\u0469\u046a\7\60\2\2\u046a\u046b\7"+
|
||||
"\60\2\2\u046b\u0108\3\2\2\2\u046c\u046d\5\u0121\u0091\2\u046d\u046e\5"+
|
||||
"\u0121\u0091\2\u046e\u046f\5\u0121\u0091\2\u046f\u0470\5\u0121\u0091\2"+
|
||||
"\u0470\u010a\3\2\2\2\u0471\u0472\7^\2\2\u0472\u0473\7w\2\2\u0473\u0474"+
|
||||
"\3\2\2\2\u0474\u047c\5\u0109\u0085\2\u0475\u0476\7^\2\2\u0476\u0477\7"+
|
||||
"W\2\2\u0477\u0478\3\2\2\2\u0478\u0479\5\u0109\u0085\2\u0479\u047a\5\u0109"+
|
||||
"\u0085\2\u047a\u047c\3\2\2\2\u047b\u0471\3\2\2\2\u047b\u0475\3\2\2\2\u047c"+
|
||||
"\u010c\3\2\2\2\u047d\u0482\5\u010f\u0088\2\u047e\u0481\5\u010f\u0088\2"+
|
||||
"\u047f\u0481\5\u0113\u008a\2\u0480\u047e\3\2\2\2\u0480\u047f\3\2\2\2\u0481"+
|
||||
"\u0484\3\2\2\2\u0482\u0480\3\2\2\2\u0482\u0483\3\2\2\2\u0483\u010e\3\2"+
|
||||
"\2\2\u0484\u0482\3\2\2\2\u0485\u0488\5\u0111\u0089\2\u0486\u0488\5\u010b"+
|
||||
"\u0086\2\u0487\u0485\3\2\2\2\u0487\u0486\3\2\2\2\u0488\u0110\3\2\2\2\u0489"+
|
||||
"\u048a\t\4\2\2\u048a\u0112\3\2\2\2\u048b\u048c\t\5\2\2\u048c\u0114\3\2"+
|
||||
"\2\2\u048d\u0494\5\u011d\u008f\2\u048e\u0490\7)\2\2\u048f\u048e\3\2\2"+
|
||||
"\2\u048f\u0490\3\2\2\2\u0490\u0491\3\2\2\2\u0491\u0493\5\u0113\u008a\2"+
|
||||
"\u0492\u048f\3\2\2\2\u0493\u0496\3\2\2\2\u0494\u0492\3\2\2\2\u0494\u0495"+
|
||||
"\3\2\2\2\u0495\u0116\3\2\2\2\u0496\u0494\3\2\2\2\u0497\u049e\7\62\2\2"+
|
||||
"\u0498\u049a\7)\2\2\u0499\u0498\3\2\2\2\u0499\u049a\3\2\2\2\u049a\u049b"+
|
||||
"\3\2\2\2\u049b\u049d\5\u011f\u0090\2\u049c\u0499\3\2\2\2\u049d\u04a0\3"+
|
||||
"\2\2\2\u049e\u049c\3\2\2\2\u049e\u049f\3\2\2\2\u049f\u0118\3\2\2\2\u04a0"+
|
||||
"\u049e\3\2\2\2\u04a1\u04a2\7\62\2\2\u04a2\u04a6\7z\2\2\u04a3\u04a4\7\62"+
|
||||
"\2\2\u04a4\u04a6\7Z\2\2\u04a5\u04a1\3\2\2\2\u04a5\u04a3\3\2\2\2\u04a6"+
|
||||
"\u04a7\3\2\2\2\u04a7\u04ae\5\u0121\u0091\2\u04a8\u04aa\7)\2\2\u04a9\u04a8"+
|
||||
"\3\2\2\2\u04a9\u04aa\3\2\2\2\u04aa\u04ab\3\2\2\2\u04ab\u04ad\5\u0121\u0091"+
|
||||
"\2\u04ac\u04a9\3\2\2\2\u04ad\u04b0\3\2\2\2\u04ae\u04ac\3\2\2\2\u04ae\u04af"+
|
||||
"\3\2\2\2\u04af\u011a\3\2\2\2\u04b0\u04ae\3\2\2\2\u04b1\u04b2\7\62\2\2"+
|
||||
"\u04b2\u04b6\7d\2\2\u04b3\u04b4\7\62\2\2\u04b4\u04b6\7D\2\2\u04b5\u04b1"+
|
||||
"\3\2\2\2\u04b5\u04b3\3\2\2\2\u04b6\u04b7\3\2\2\2\u04b7\u04be\5\u0123\u0092"+
|
||||
"\2\u04b8\u04ba\7)\2\2\u04b9\u04b8\3\2\2\2\u04b9\u04ba\3\2\2\2\u04ba\u04bb"+
|
||||
"\3\2\2\2\u04bb\u04bd\5\u0123\u0092\2\u04bc\u04b9\3\2\2\2\u04bd\u04c0\3"+
|
||||
"\2\2\2\u04be\u04bc\3\2\2\2\u04be\u04bf\3\2\2\2\u04bf\u011c\3\2\2\2\u04c0"+
|
||||
"\u04be\3\2\2\2\u04c1\u04c2\t\6\2\2\u04c2\u011e\3\2\2\2\u04c3\u04c4\t\7"+
|
||||
"\2\2\u04c4\u0120\3\2\2\2\u04c5\u04c6\t\b\2\2\u04c6\u0122\3\2\2\2\u04c7"+
|
||||
"\u04c8\t\t\2\2\u04c8\u0124\3\2\2\2\u04c9\u04cb\5\u0127\u0094\2\u04ca\u04cc"+
|
||||
"\5\u0129\u0095\2\u04cb\u04ca\3\2\2\2\u04cb\u04cc\3\2\2\2\u04cc\u04da\3"+
|
||||
"\2\2\2\u04cd\u04cf\5\u0127\u0094\2\u04ce\u04d0\5\u012b\u0096\2\u04cf\u04ce"+
|
||||
"\3\2\2\2\u04cf\u04d0\3\2\2\2\u04d0\u04da\3\2\2\2\u04d1\u04d3\5\u0129\u0095"+
|
||||
"\2\u04d2\u04d4\5\u0127\u0094\2\u04d3\u04d2\3\2\2\2\u04d3\u04d4\3\2\2\2"+
|
||||
"\u04d4\u04da\3\2\2\2\u04d5\u04d7\5\u012b\u0096\2\u04d6\u04d8\5\u0127\u0094"+
|
||||
"\2\u04d7\u04d6\3\2\2\2\u04d7\u04d8\3\2\2\2\u04d8\u04da\3\2\2\2\u04d9\u04c9"+
|
||||
"\3\2\2\2\u04d9\u04cd\3\2\2\2\u04d9\u04d1\3\2\2\2\u04d9\u04d5\3\2\2\2\u04da"+
|
||||
"\u0126\3\2\2\2\u04db\u04dc\t\n\2\2\u04dc\u0128\3\2\2\2\u04dd\u04de\t\13"+
|
||||
"\2\2\u04de\u012a\3\2\2\2\u04df\u04e0\7n\2\2\u04e0\u04e4\7n\2\2\u04e1\u04e2"+
|
||||
"\7N\2\2\u04e2\u04e4\7N\2\2\u04e3\u04df\3\2\2\2\u04e3\u04e1\3\2\2\2\u04e4"+
|
||||
"\u012c\3\2\2\2\u04e5\u04e9\n\f\2\2\u04e6\u04e9\5\u012f\u0098\2\u04e7\u04e9"+
|
||||
"\5\u010b\u0086\2\u04e8\u04e5\3\2\2\2\u04e8\u04e6\3\2\2\2\u04e8\u04e7\3"+
|
||||
"\2\2\2\u04e9\u012e\3\2\2\2\u04ea\u04ee\5\u0131\u0099\2\u04eb\u04ee\5\u0133"+
|
||||
"\u009a\2\u04ec\u04ee\5\u0135\u009b\2\u04ed\u04ea\3\2\2\2\u04ed\u04eb\3"+
|
||||
"\2\2\2\u04ed\u04ec\3\2\2\2\u04ee\u0130\3\2\2\2\u04ef\u04f0\7^\2\2\u04f0"+
|
||||
"\u050e\7)\2\2\u04f1\u04f2\7^\2\2\u04f2\u050e\7$\2\2\u04f3\u04f4\7^\2\2"+
|
||||
"\u04f4\u050e\7A\2\2\u04f5\u04f6\7^\2\2\u04f6\u050e\7^\2\2\u04f7\u04f8"+
|
||||
"\7^\2\2\u04f8\u050e\7c\2\2\u04f9\u04fa\7^\2\2\u04fa\u050e\7d\2\2\u04fb"+
|
||||
"\u04fc\7^\2\2\u04fc\u050e\7h\2\2\u04fd\u04fe\7^\2\2\u04fe\u050e\7p\2\2"+
|
||||
"\u04ff\u0500\7^\2\2\u0500\u050e\7t\2\2\u0501\u0507\7^\2\2\u0502\u0504"+
|
||||
"\7\17\2\2\u0503\u0505\7\f\2\2\u0504\u0503\3\2\2\2\u0504\u0505\3\2\2\2"+
|
||||
"\u0505\u0508\3\2\2\2\u0506\u0508\7\f\2\2\u0507\u0502\3\2\2\2\u0507\u0506"+
|
||||
"\3\2\2\2\u0508\u050e\3\2\2\2\u0509\u050a\7^\2\2\u050a\u050e\7v\2\2\u050b"+
|
||||
"\u050c\7^\2\2\u050c\u050e\7x\2\2\u050d\u04ef\3\2\2\2\u050d\u04f1\3\2\2"+
|
||||
"\2\u050d\u04f3\3\2\2\2\u050d\u04f5\3\2\2\2\u050d\u04f7\3\2\2\2\u050d\u04f9"+
|
||||
"\3\2\2\2\u050d\u04fb\3\2\2\2\u050d\u04fd\3\2\2\2\u050d\u04ff\3\2\2\2\u050d"+
|
||||
"\u0501\3\2\2\2\u050d\u0509\3\2\2\2\u050d\u050b\3\2\2\2\u050e\u0132\3\2"+
|
||||
"\2\2\u050f\u0510\7^\2\2\u0510\u051b\5\u011f\u0090\2\u0511\u0512\7^\2\2"+
|
||||
"\u0512\u0513\5\u011f\u0090\2\u0513\u0514\5\u011f\u0090\2\u0514\u051b\3"+
|
||||
"\2\2\2\u0515\u0516\7^\2\2\u0516\u0517\5\u011f\u0090\2\u0517\u0518\5\u011f"+
|
||||
"\u0090\2\u0518\u0519\5\u011f\u0090\2\u0519\u051b\3\2\2\2\u051a\u050f\3"+
|
||||
"\2\2\2\u051a\u0511\3\2\2\2\u051a\u0515\3\2\2\2\u051b\u0134\3\2\2\2\u051c"+
|
||||
"\u051d\7^\2\2\u051d\u051e\7z\2\2\u051e\u0520\3\2\2\2\u051f\u0521\5\u0121"+
|
||||
"\u0091\2\u0520\u051f\3\2\2\2\u0521\u0522\3\2\2\2\u0522\u0520\3\2\2\2\u0522"+
|
||||
"\u0523\3\2\2\2\u0523\u0136\3\2\2\2\u0524\u0526\5\u013d\u009f\2\u0525\u0524"+
|
||||
"\3\2\2\2\u0525\u0526\3\2\2\2\u0526\u0527\3\2\2\2\u0527\u0528\7\60\2\2"+
|
||||
"\u0528\u052d\5\u013d\u009f\2\u0529\u052a\5\u013d\u009f\2\u052a\u052b\7"+
|
||||
"\60\2\2\u052b\u052d\3\2\2\2\u052c\u0525\3\2\2\2\u052c\u0529\3\2\2\2\u052d"+
|
||||
"\u0138\3\2\2\2\u052e\u0530\7g\2\2\u052f\u0531\5\u013b\u009e\2\u0530\u052f"+
|
||||
"\3\2\2\2\u0530\u0531\3\2\2\2\u0531\u0532\3\2\2\2\u0532\u0539\5\u013d\u009f"+
|
||||
"\2\u0533\u0535\7G\2\2\u0534\u0536\5\u013b\u009e\2\u0535\u0534\3\2\2\2"+
|
||||
"\u0535\u0536\3\2\2\2\u0536\u0537\3\2\2\2\u0537\u0539\5\u013d\u009f\2\u0538"+
|
||||
"\u052e\3\2\2\2\u0538\u0533\3\2\2\2\u0539\u013a\3\2\2\2\u053a\u053b\t\r"+
|
||||
"\2\2\u053b\u013c\3\2\2\2\u053c\u0543\5\u0113\u008a\2\u053d\u053f\7)\2"+
|
||||
"\2\u053e\u053d\3\2\2\2\u053e\u053f\3\2\2\2\u053f\u0540\3\2\2\2\u0540\u0542"+
|
||||
"\5\u0113\u008a\2\u0541\u053e\3\2\2\2\u0542\u0545\3\2\2\2\u0543\u0541\3"+
|
||||
"\2\2\2\u0543\u0544\3\2\2\2\u0544\u013e\3\2\2\2\u0545\u0543\3\2\2\2\u0546"+
|
||||
"\u0547\t\16\2\2\u0547\u0140\3\2\2\2\u0548\u0549\7w\2\2\u0549\u054c\7:"+
|
||||
"\2\2\u054a\u054c\t\2\2\2\u054b\u0548\3\2\2\2\u054b\u054a\3\2\2\2\u054c"+
|
||||
"\u0142\3\2\2\2\u054d\u0551\n\17\2\2\u054e\u0551\5\u012f\u0098\2\u054f"+
|
||||
"\u0551\5\u010b\u0086\2\u0550\u054d\3\2\2\2\u0550\u054e\3\2\2\2\u0550\u054f"+
|
||||
"\3\2\2\2\u0551\u0144\3\2\2\2\u0552\u0556\7$\2\2\u0553\u0555\n\20\2\2\u0554"+
|
||||
"\u0553\3\2\2\2\u0555\u0558\3\2\2\2\u0556\u0554\3\2\2\2\u0556\u0557\3\2"+
|
||||
"\2\2\u0557\u0559\3\2\2\2\u0558\u0556\3\2\2\2\u0559\u055d\7*\2\2\u055a"+
|
||||
"\u055c\n\21\2\2\u055b\u055a\3\2\2\2\u055c\u055f\3\2\2\2\u055d\u055b\3"+
|
||||
"\2\2\2\u055d\u055e\3\2\2\2\u055e\u0560\3\2\2\2\u055f\u055d\3\2\2\2\u0560"+
|
||||
"\u0564\7+\2\2\u0561\u0563\n\22\2\2\u0562\u0561\3\2\2\2\u0563\u0566\3\2"+
|
||||
"\2\2\u0564\u0562\3\2\2\2\u0564\u0565\3\2\2\2\u0565\u0567\3\2\2\2\u0566"+
|
||||
"\u0564\3\2\2\2\u0567\u0568\7$\2\2\u0568\u0146\3\2\2\2\u0569\u056a\5\u0115"+
|
||||
"\u008b\2\u056a\u056b\5\u014f\u00a8\2\u056b\u0576\3\2\2\2\u056c\u056d\5"+
|
||||
"\u0117\u008c\2\u056d\u056e\5\u014f\u00a8\2\u056e\u0576\3\2\2\2\u056f\u0570"+
|
||||
"\5\u0119\u008d\2\u0570\u0571\5\u014f\u00a8\2\u0571\u0576\3\2\2\2\u0572"+
|
||||
"\u0573\5\u011b\u008e\2\u0573\u0574\5\u014f\u00a8\2\u0574\u0576\3\2\2\2"+
|
||||
"\u0575\u0569\3\2\2\2\u0575\u056c\3\2\2\2\u0575\u056f\3\2\2\2\u0575\u0572"+
|
||||
"\3\2\2\2\u0576\u0148\3\2\2\2\u0577\u0579\5\u0137\u009c\2\u0578\u057a\5"+
|
||||
"\u0139\u009d\2\u0579\u0578\3\2\2\2\u0579\u057a\3\2\2\2\u057a\u057b\3\2"+
|
||||
"\2\2\u057b\u057c\5\u014f\u00a8\2\u057c\u0582\3\2\2\2\u057d\u057e\5\u013d"+
|
||||
"\u009f\2\u057e\u057f\5\u0139\u009d\2\u057f\u0580\5\u014f\u00a8\2\u0580"+
|
||||
"\u0582\3\2\2\2\u0581\u0577\3\2\2\2\u0581\u057d\3\2\2\2\u0582\u014a\3\2"+
|
||||
"\2\2\u0583\u0584\5\t\5\2\u0584\u0585\5\u014f\u00a8\2\u0585\u014c\3\2\2"+
|
||||
"\2\u0586\u0587\5\5\3\2\u0587\u0588\5\u014f\u00a8\2\u0588\u014e\3\2\2\2"+
|
||||
"\u0589\u058a\5\u010d\u0087\2\u058a\u0150\3\2\2\2\u058b\u058d\t\23\2\2"+
|
||||
"\u058c\u058b\3\2\2\2\u058d\u058e\3\2\2\2\u058e\u058c\3\2\2\2\u058e\u058f"+
|
||||
"\3\2\2\2\u058f\u0590\3\2\2\2\u0590\u0591\b\u00a9\3\2\u0591\u0152\3\2\2"+
|
||||
"\2\u0592\u0594\7\17\2\2\u0593\u0595\7\f\2\2\u0594\u0593\3\2\2\2\u0594"+
|
||||
"\u0595\3\2\2\2\u0595\u0598\3\2\2\2\u0596\u0598\7\f\2\2\u0597\u0592\3\2"+
|
||||
"\2\2\u0597\u0596\3\2\2\2\u0598\u0599\3\2\2\2\u0599\u059a\b\u00aa\3\2\u059a"+
|
||||
"\u0154\3\2\2\2\u059b\u059c\7\61\2\2\u059c\u059d\7,\2\2\u059d\u05a1\3\2"+
|
||||
"\2\2\u059e\u05a0\13\2\2\2\u059f\u059e\3\2\2\2\u05a0\u05a3\3\2\2\2\u05a1"+
|
||||
"\u05a2\3\2\2\2\u05a1\u059f\3\2\2\2\u05a2\u05a4\3\2\2\2\u05a3\u05a1\3\2"+
|
||||
"\2\2\u05a4\u05a5\7,\2\2\u05a5\u05a6\7\61\2\2\u05a6\u05a7\3\2\2\2\u05a7"+
|
||||
"\u05a8\b\u00ab\3\2\u05a8\u0156\3\2\2\2\u05a9\u05aa\7\61\2\2\u05aa\u05ab"+
|
||||
"\7\61\2\2\u05ab\u05af\3\2\2\2\u05ac\u05ae\n\24\2\2\u05ad\u05ac\3\2\2\2"+
|
||||
"\u05ae\u05b1\3\2\2\2\u05af\u05ad\3\2\2\2\u05af\u05b0\3\2\2\2\u05b0\u05b2"+
|
||||
"\3\2\2\2\u05b1\u05af\3\2\2\2\u05b2\u05b3\b\u00ac\3\2\u05b3\u0158\3\2\2"+
|
||||
"\2K\2\u015b\u015f\u0163\u0167\u0169\u016c\u0172\u0178\u017b\u0180\u0182"+
|
||||
"\u0185\u018b\u0190\u0194\u0198\u01a0\u01a6\u01ab\u01b0\u01b5\u01bd\u040a"+
|
||||
"\u0443\u0449\u047b\u0480\u0482\u0487\u048f\u0494\u0499\u049e\u04a5\u04a9"+
|
||||
"\u04ae\u04b5\u04b9\u04be\u04cb\u04cf\u04d3\u04d7\u04d9\u04e3\u04e8\u04ed"+
|
||||
"\u0504\u0507\u050d\u051a\u0522\u0525\u052c\u0530\u0535\u0538\u053e\u0543"+
|
||||
"\u054b\u0550\u0556\u055d\u0564\u0575\u0579\u0581\u058e\u0594\u0597\u05a1"+
|
||||
"\u05af\4\2\3\2\b\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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,264 @@
|
||||
IntegerLiteral=1
|
||||
CharacterLiteral=2
|
||||
FloatingLiteral=3
|
||||
StringLiteral=4
|
||||
BooleanLiteral=5
|
||||
PointerLiteral=6
|
||||
UserDefinedLiteral=7
|
||||
MultiLineMacro=8
|
||||
Directive=9
|
||||
Alignas=10
|
||||
Alignof=11
|
||||
Asm=12
|
||||
Auto=13
|
||||
Bool=14
|
||||
Break=15
|
||||
Case=16
|
||||
Catch=17
|
||||
Char=18
|
||||
Char16=19
|
||||
Char32=20
|
||||
Class=21
|
||||
Const=22
|
||||
Constexpr=23
|
||||
Const_cast=24
|
||||
Continue=25
|
||||
Decltype=26
|
||||
Default=27
|
||||
Delete=28
|
||||
Do=29
|
||||
Double=30
|
||||
Dynamic_cast=31
|
||||
Else=32
|
||||
Enum=33
|
||||
Explicit=34
|
||||
Export=35
|
||||
Extern=36
|
||||
False_=37
|
||||
Final=38
|
||||
Float=39
|
||||
For=40
|
||||
Friend=41
|
||||
Goto=42
|
||||
If=43
|
||||
Inline=44
|
||||
Int=45
|
||||
Long=46
|
||||
Mutable=47
|
||||
Namespace=48
|
||||
New=49
|
||||
Noexcept=50
|
||||
Nullptr=51
|
||||
Operator=52
|
||||
Override=53
|
||||
Private=54
|
||||
Protected=55
|
||||
Public=56
|
||||
Register=57
|
||||
Reinterpret_cast=58
|
||||
Return=59
|
||||
Short=60
|
||||
Signed=61
|
||||
Sizeof=62
|
||||
Static=63
|
||||
Static_assert=64
|
||||
Static_cast=65
|
||||
Struct=66
|
||||
Switch=67
|
||||
Template=68
|
||||
This=69
|
||||
Thread_local=70
|
||||
Throw=71
|
||||
True_=72
|
||||
Try=73
|
||||
Typedef=74
|
||||
Typeid_=75
|
||||
Typename_=76
|
||||
Union=77
|
||||
Unsigned=78
|
||||
Using=79
|
||||
Virtual=80
|
||||
Void=81
|
||||
Volatile=82
|
||||
Wchar=83
|
||||
While=84
|
||||
LeftParen=85
|
||||
RightParen=86
|
||||
LeftBracket=87
|
||||
RightBracket=88
|
||||
LeftBrace=89
|
||||
RightBrace=90
|
||||
Plus=91
|
||||
Minus=92
|
||||
Star=93
|
||||
Div=94
|
||||
Mod=95
|
||||
Caret=96
|
||||
And=97
|
||||
Or=98
|
||||
Tilde=99
|
||||
Not=100
|
||||
Assign=101
|
||||
Less=102
|
||||
Greater=103
|
||||
PlusAssign=104
|
||||
MinusAssign=105
|
||||
StarAssign=106
|
||||
DivAssign=107
|
||||
ModAssign=108
|
||||
XorAssign=109
|
||||
AndAssign=110
|
||||
OrAssign=111
|
||||
LeftShiftAssign=112
|
||||
RightShiftAssign=113
|
||||
Equal=114
|
||||
NotEqual=115
|
||||
LessEqual=116
|
||||
GreaterEqual=117
|
||||
AndAnd=118
|
||||
OrOr=119
|
||||
PlusPlus=120
|
||||
MinusMinus=121
|
||||
Comma=122
|
||||
ArrowStar=123
|
||||
Arrow=124
|
||||
Question=125
|
||||
Colon=126
|
||||
Doublecolon=127
|
||||
Semi=128
|
||||
Dot=129
|
||||
DotStar=130
|
||||
Ellipsis=131
|
||||
Identifier=132
|
||||
DecimalLiteral=133
|
||||
OctalLiteral=134
|
||||
HexadecimalLiteral=135
|
||||
BinaryLiteral=136
|
||||
Integersuffix=137
|
||||
UserDefinedIntegerLiteral=138
|
||||
UserDefinedFloatingLiteral=139
|
||||
UserDefinedStringLiteral=140
|
||||
UserDefinedCharacterLiteral=141
|
||||
Whitespace=142
|
||||
Newline=143
|
||||
BlockComment=144
|
||||
LineComment=145
|
||||
'alignas'=10
|
||||
'alignof'=11
|
||||
'asm'=12
|
||||
'auto'=13
|
||||
'bool'=14
|
||||
'break'=15
|
||||
'case'=16
|
||||
'catch'=17
|
||||
'char'=18
|
||||
'char16_t'=19
|
||||
'char32_t'=20
|
||||
'class'=21
|
||||
'const'=22
|
||||
'constexpr'=23
|
||||
'const_cast'=24
|
||||
'continue'=25
|
||||
'decltype'=26
|
||||
'default'=27
|
||||
'delete'=28
|
||||
'do'=29
|
||||
'double'=30
|
||||
'dynamic_cast'=31
|
||||
'else'=32
|
||||
'enum'=33
|
||||
'explicit'=34
|
||||
'export'=35
|
||||
'extern'=36
|
||||
'false'=37
|
||||
'final'=38
|
||||
'float'=39
|
||||
'for'=40
|
||||
'friend'=41
|
||||
'goto'=42
|
||||
'if'=43
|
||||
'inline'=44
|
||||
'int'=45
|
||||
'long'=46
|
||||
'mutable'=47
|
||||
'namespace'=48
|
||||
'new'=49
|
||||
'noexcept'=50
|
||||
'nullptr'=51
|
||||
'operator'=52
|
||||
'override'=53
|
||||
'private'=54
|
||||
'protected'=55
|
||||
'public'=56
|
||||
'register'=57
|
||||
'reinterpret_cast'=58
|
||||
'return'=59
|
||||
'short'=60
|
||||
'signed'=61
|
||||
'sizeof'=62
|
||||
'static'=63
|
||||
'static_assert'=64
|
||||
'static_cast'=65
|
||||
'struct'=66
|
||||
'switch'=67
|
||||
'template'=68
|
||||
'this'=69
|
||||
'thread_local'=70
|
||||
'throw'=71
|
||||
'true'=72
|
||||
'try'=73
|
||||
'typedef'=74
|
||||
'typeid'=75
|
||||
'typename'=76
|
||||
'union'=77
|
||||
'unsigned'=78
|
||||
'using'=79
|
||||
'virtual'=80
|
||||
'void'=81
|
||||
'volatile'=82
|
||||
'wchar_t'=83
|
||||
'while'=84
|
||||
'('=85
|
||||
')'=86
|
||||
'['=87
|
||||
']'=88
|
||||
'{'=89
|
||||
'}'=90
|
||||
'+'=91
|
||||
'-'=92
|
||||
'*'=93
|
||||
'/'=94
|
||||
'%'=95
|
||||
'^'=96
|
||||
'&'=97
|
||||
'|'=98
|
||||
'~'=99
|
||||
'='=101
|
||||
'<'=102
|
||||
'>'=103
|
||||
'+='=104
|
||||
'-='=105
|
||||
'*='=106
|
||||
'/='=107
|
||||
'%='=108
|
||||
'^='=109
|
||||
'&='=110
|
||||
'|='=111
|
||||
'<<='=112
|
||||
'>>='=113
|
||||
'=='=114
|
||||
'!='=115
|
||||
'<='=116
|
||||
'>='=117
|
||||
'++'=120
|
||||
'--'=121
|
||||
','=122
|
||||
'->*'=123
|
||||
'->'=124
|
||||
'?'=125
|
||||
':'=126
|
||||
'::'=127
|
||||
';'=128
|
||||
'.'=129
|
||||
'.*'=130
|
||||
'...'=131
|
||||
@@ -0,0 +1,823 @@
|
||||
/*******************************************************************************
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2015 Camilo Sanchez (Camiloasc1) 2020 Martin Mirchev (Marti2203)
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
* including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
* sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
|
||||
* NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* ****************************************************************************
|
||||
*/
|
||||
parser grammar CPP14Parser;
|
||||
options {
|
||||
tokenVocab = CPP14Lexer;
|
||||
}
|
||||
/*Basic concepts*/
|
||||
|
||||
translationUnit: declarationseq? EOF;
|
||||
/*Expressions*/
|
||||
|
||||
primaryExpression:
|
||||
literal+
|
||||
| This
|
||||
| LeftParen expression RightParen
|
||||
| idExpression
|
||||
| lambdaExpression;
|
||||
|
||||
idExpression: unqualifiedId | qualifiedId;
|
||||
|
||||
unqualifiedId:
|
||||
Identifier
|
||||
| operatorFunctionId
|
||||
| conversionFunctionId
|
||||
| literalOperatorId
|
||||
| Tilde (className | decltypeSpecifier)
|
||||
| templateId;
|
||||
|
||||
qualifiedId: nestedNameSpecifier Template? unqualifiedId;
|
||||
|
||||
nestedNameSpecifier:
|
||||
(theTypeName | namespaceName | decltypeSpecifier)? Doublecolon
|
||||
| nestedNameSpecifier (
|
||||
Identifier
|
||||
| Template? simpleTemplateId
|
||||
) Doublecolon;
|
||||
lambdaExpression:
|
||||
lambdaIntroducer lambdaDeclarator? compoundStatement;
|
||||
|
||||
lambdaIntroducer: LeftBracket lambdaCapture? RightBracket;
|
||||
|
||||
lambdaCapture:
|
||||
captureList
|
||||
| captureDefault (Comma captureList)?;
|
||||
|
||||
captureDefault: And | Assign;
|
||||
|
||||
captureList: capture (Comma capture)* Ellipsis?;
|
||||
|
||||
capture: simpleCapture | initcapture;
|
||||
|
||||
simpleCapture: And? Identifier | This;
|
||||
|
||||
initcapture: And? Identifier initializer;
|
||||
|
||||
lambdaDeclarator:
|
||||
LeftParen parameterDeclarationClause? RightParen Mutable? exceptionSpecification?
|
||||
attributeSpecifierSeq? trailingReturnType?;
|
||||
|
||||
postfixExpression:
|
||||
primaryExpression
|
||||
| postfixExpression LeftBracket (expression | bracedInitList) RightBracket
|
||||
| postfixExpression LeftParen expressionList? RightParen
|
||||
| (simpleTypeSpecifier | typeNameSpecifier) (
|
||||
LeftParen expressionList? RightParen
|
||||
| bracedInitList
|
||||
)
|
||||
| postfixExpression (Dot | Arrow) (
|
||||
Template? idExpression
|
||||
| pseudoDestructorName
|
||||
)
|
||||
| postfixExpression (PlusPlus | MinusMinus)
|
||||
| (
|
||||
Dynamic_cast
|
||||
| Static_cast
|
||||
| Reinterpret_cast
|
||||
| Const_cast
|
||||
) Less theTypeId Greater LeftParen expression RightParen
|
||||
| typeIdOfTheTypeId LeftParen (expression | theTypeId) RightParen;
|
||||
/*
|
||||
add a middle layer to eliminate duplicated function declarations
|
||||
*/
|
||||
|
||||
typeIdOfTheTypeId: Typeid_;
|
||||
|
||||
expressionList: initializerList;
|
||||
|
||||
pseudoDestructorName:
|
||||
nestedNameSpecifier? (theTypeName Doublecolon)? Tilde theTypeName
|
||||
| nestedNameSpecifier Template simpleTemplateId Doublecolon Tilde theTypeName
|
||||
| Tilde decltypeSpecifier;
|
||||
|
||||
unaryExpression:
|
||||
postfixExpression
|
||||
| (PlusPlus | MinusMinus | unaryOperator | Sizeof) unaryExpression
|
||||
| Sizeof (
|
||||
LeftParen theTypeId RightParen
|
||||
| Ellipsis LeftParen Identifier RightParen
|
||||
)
|
||||
| Alignof LeftParen theTypeId RightParen
|
||||
| noExceptExpression
|
||||
| newExpression
|
||||
| deleteExpression;
|
||||
|
||||
unaryOperator: Or | Star | And | Plus | Tilde | Minus | Not;
|
||||
|
||||
newExpression:
|
||||
Doublecolon? New newPlacement? (
|
||||
newTypeId
|
||||
| (LeftParen theTypeId RightParen)
|
||||
) newInitializer?;
|
||||
|
||||
newPlacement: LeftParen expressionList RightParen;
|
||||
|
||||
newTypeId: typeSpecifierSeq newDeclarator?;
|
||||
|
||||
newDeclarator:
|
||||
pointerOperator newDeclarator?
|
||||
| noPointerNewDeclarator;
|
||||
|
||||
noPointerNewDeclarator:
|
||||
LeftBracket expression RightBracket attributeSpecifierSeq?
|
||||
| noPointerNewDeclarator LeftBracket constantExpression RightBracket attributeSpecifierSeq?;
|
||||
|
||||
newInitializer:
|
||||
LeftParen expressionList? RightParen
|
||||
| bracedInitList;
|
||||
|
||||
deleteExpression:
|
||||
Doublecolon? Delete (LeftBracket RightBracket)? castExpression;
|
||||
|
||||
noExceptExpression: Noexcept LeftParen expression RightParen;
|
||||
|
||||
castExpression:
|
||||
unaryExpression
|
||||
| LeftParen theTypeId RightParen castExpression;
|
||||
|
||||
pointerMemberExpression:
|
||||
castExpression ((DotStar | ArrowStar) castExpression)*;
|
||||
|
||||
multiplicativeExpression:
|
||||
pointerMemberExpression (
|
||||
(Star | Div | Mod) pointerMemberExpression
|
||||
)*;
|
||||
|
||||
additiveExpression:
|
||||
multiplicativeExpression (
|
||||
(Plus | Minus) multiplicativeExpression
|
||||
)*;
|
||||
|
||||
shiftExpression:
|
||||
additiveExpression (shiftOperator additiveExpression)*;
|
||||
|
||||
shiftOperator: Greater Greater | Less Less;
|
||||
|
||||
relationalExpression:
|
||||
shiftExpression (
|
||||
(Less | Greater | LessEqual | GreaterEqual) shiftExpression
|
||||
)*;
|
||||
|
||||
equalityExpression:
|
||||
relationalExpression (
|
||||
(Equal | NotEqual) relationalExpression
|
||||
)*;
|
||||
|
||||
andExpression: equalityExpression (And equalityExpression)*;
|
||||
|
||||
exclusiveOrExpression: andExpression (Caret andExpression)*;
|
||||
|
||||
inclusiveOrExpression:
|
||||
exclusiveOrExpression (Or exclusiveOrExpression)*;
|
||||
|
||||
logicalAndExpression:
|
||||
inclusiveOrExpression (AndAnd inclusiveOrExpression)*;
|
||||
|
||||
logicalOrExpression:
|
||||
logicalAndExpression (OrOr logicalAndExpression)*;
|
||||
|
||||
conditionalExpression:
|
||||
logicalOrExpression (
|
||||
Question expression Colon assignmentExpression
|
||||
)?;
|
||||
|
||||
assignmentExpression:
|
||||
conditionalExpression
|
||||
| logicalOrExpression assignmentOperator initializerClause
|
||||
| throwExpression;
|
||||
|
||||
assignmentOperator:
|
||||
Assign
|
||||
| StarAssign
|
||||
| DivAssign
|
||||
| ModAssign
|
||||
| PlusAssign
|
||||
| MinusAssign
|
||||
| RightShiftAssign
|
||||
| LeftShiftAssign
|
||||
| AndAssign
|
||||
| XorAssign
|
||||
| OrAssign;
|
||||
|
||||
expression: assignmentExpression (Comma assignmentExpression)*;
|
||||
|
||||
constantExpression: conditionalExpression;
|
||||
/*Statements*/
|
||||
|
||||
statement:
|
||||
labeledStatement
|
||||
| declarationStatement
|
||||
| attributeSpecifierSeq? (
|
||||
expressionStatement
|
||||
| compoundStatement
|
||||
| selectionStatement
|
||||
| iterationStatement
|
||||
| jumpStatement
|
||||
| tryBlock
|
||||
);
|
||||
|
||||
labeledStatement:
|
||||
attributeSpecifierSeq? (
|
||||
Identifier
|
||||
| Case constantExpression
|
||||
| Default
|
||||
) Colon statement;
|
||||
|
||||
expressionStatement: expression? Semi;
|
||||
|
||||
compoundStatement: LeftBrace statementSeq? RightBrace;
|
||||
|
||||
statementSeq: statement+;
|
||||
|
||||
selectionStatement:
|
||||
If LeftParen condition RightParen statement (Else statement)?
|
||||
| Switch LeftParen condition RightParen statement;
|
||||
|
||||
condition:
|
||||
expression
|
||||
| attributeSpecifierSeq? declSpecifierSeq declarator (
|
||||
Assign initializerClause
|
||||
| bracedInitList
|
||||
);
|
||||
|
||||
iterationStatement:
|
||||
While LeftParen condition RightParen statement
|
||||
| Do statement While LeftParen expression RightParen Semi
|
||||
| For LeftParen (
|
||||
forInitStatement condition? Semi expression?
|
||||
| forRangeDeclaration Colon forRangeInitializer
|
||||
) RightParen statement;
|
||||
|
||||
forInitStatement: expressionStatement | simpleDeclaration;
|
||||
|
||||
forRangeDeclaration:
|
||||
attributeSpecifierSeq? declSpecifierSeq declarator;
|
||||
|
||||
forRangeInitializer: expression | bracedInitList;
|
||||
|
||||
jumpStatement:
|
||||
(
|
||||
Break
|
||||
| Continue
|
||||
| Return (expression | bracedInitList)?
|
||||
| Goto Identifier
|
||||
) Semi;
|
||||
|
||||
declarationStatement: blockDeclaration;
|
||||
/*Declarations*/
|
||||
|
||||
declarationseq: declaration+;
|
||||
|
||||
declaration:
|
||||
blockDeclaration
|
||||
| functionDefinition
|
||||
| templateDeclaration
|
||||
| explicitInstantiation
|
||||
| explicitSpecialization
|
||||
| linkageSpecification
|
||||
| namespaceDefinition
|
||||
| emptyDeclaration
|
||||
| attributeDeclaration;
|
||||
|
||||
blockDeclaration:
|
||||
simpleDeclaration
|
||||
| asmDefinition
|
||||
| namespaceAliasDefinition
|
||||
| usingDeclaration
|
||||
| usingDirective
|
||||
| staticAssertDeclaration
|
||||
| aliasDeclaration
|
||||
| opaqueEnumDeclaration;
|
||||
|
||||
aliasDeclaration:
|
||||
Using Identifier attributeSpecifierSeq? Assign theTypeId Semi;
|
||||
|
||||
simpleDeclaration:
|
||||
declSpecifierSeq? initDeclaratorList? Semi
|
||||
| attributeSpecifierSeq declSpecifierSeq? initDeclaratorList Semi;
|
||||
|
||||
staticAssertDeclaration:
|
||||
Static_assert LeftParen constantExpression Comma StringLiteral RightParen Semi;
|
||||
|
||||
emptyDeclaration: Semi;
|
||||
|
||||
attributeDeclaration: attributeSpecifierSeq Semi;
|
||||
|
||||
declSpecifier:
|
||||
storageClassSpecifier
|
||||
| typeSpecifier
|
||||
| functionSpecifier
|
||||
| Friend
|
||||
| Typedef
|
||||
| Constexpr;
|
||||
|
||||
declSpecifierSeq: declSpecifier+? attributeSpecifierSeq?;
|
||||
|
||||
storageClassSpecifier:
|
||||
Register
|
||||
| Static
|
||||
| Thread_local
|
||||
| Extern
|
||||
| Mutable;
|
||||
|
||||
functionSpecifier: Inline | Virtual | Explicit;
|
||||
|
||||
typedefName: Identifier;
|
||||
|
||||
typeSpecifier:
|
||||
trailingTypeSpecifier
|
||||
| classSpecifier
|
||||
| enumSpecifier;
|
||||
|
||||
trailingTypeSpecifier:
|
||||
simpleTypeSpecifier
|
||||
| elaboratedTypeSpecifier
|
||||
| typeNameSpecifier
|
||||
| cvQualifier;
|
||||
|
||||
typeSpecifierSeq: typeSpecifier+ attributeSpecifierSeq?;
|
||||
|
||||
trailingTypeSpecifierSeq:
|
||||
trailingTypeSpecifier+ attributeSpecifierSeq?;
|
||||
|
||||
simpleTypeLengthModifier:
|
||||
Short
|
||||
| Long;
|
||||
|
||||
simpleTypeSignednessModifier:
|
||||
Unsigned
|
||||
| Signed;
|
||||
|
||||
simpleTypeSpecifier:
|
||||
nestedNameSpecifier? theTypeName
|
||||
| nestedNameSpecifier Template simpleTemplateId
|
||||
| simpleTypeSignednessModifier
|
||||
| simpleTypeSignednessModifier? simpleTypeLengthModifier+
|
||||
| simpleTypeSignednessModifier? Char
|
||||
| simpleTypeSignednessModifier? Char16
|
||||
| simpleTypeSignednessModifier? Char32
|
||||
| simpleTypeSignednessModifier? Wchar
|
||||
| Bool
|
||||
| simpleTypeSignednessModifier? simpleTypeLengthModifier* Int
|
||||
| Float
|
||||
| simpleTypeLengthModifier? Double
|
||||
| Void
|
||||
| Auto
|
||||
| decltypeSpecifier;
|
||||
|
||||
theTypeName:
|
||||
className
|
||||
| enumName
|
||||
| typedefName
|
||||
| simpleTemplateId;
|
||||
|
||||
decltypeSpecifier:
|
||||
Decltype LeftParen (expression | Auto) RightParen;
|
||||
|
||||
elaboratedTypeSpecifier:
|
||||
classKey (
|
||||
attributeSpecifierSeq? nestedNameSpecifier? Identifier
|
||||
| simpleTemplateId
|
||||
| nestedNameSpecifier Template? simpleTemplateId
|
||||
)
|
||||
| Enum nestedNameSpecifier? Identifier;
|
||||
|
||||
enumName: Identifier;
|
||||
|
||||
enumSpecifier:
|
||||
enumHead LeftBrace (enumeratorList Comma?)? RightBrace;
|
||||
|
||||
enumHead:
|
||||
enumkey attributeSpecifierSeq? (
|
||||
nestedNameSpecifier? Identifier
|
||||
)? enumbase?;
|
||||
|
||||
opaqueEnumDeclaration:
|
||||
enumkey attributeSpecifierSeq? Identifier enumbase? Semi;
|
||||
|
||||
enumkey: Enum (Class | Struct)?;
|
||||
|
||||
enumbase: Colon typeSpecifierSeq;
|
||||
|
||||
enumeratorList:
|
||||
enumeratorDefinition (Comma enumeratorDefinition)*;
|
||||
|
||||
enumeratorDefinition: enumerator (Assign constantExpression)?;
|
||||
|
||||
enumerator: Identifier;
|
||||
|
||||
namespaceName: originalNamespaceName | namespaceAlias;
|
||||
|
||||
originalNamespaceName: Identifier;
|
||||
|
||||
namespaceDefinition:
|
||||
Inline? Namespace (Identifier | originalNamespaceName)? LeftBrace namespaceBody = declarationseq
|
||||
? RightBrace;
|
||||
|
||||
namespaceAlias: Identifier;
|
||||
|
||||
namespaceAliasDefinition:
|
||||
Namespace Identifier Assign qualifiednamespacespecifier Semi;
|
||||
|
||||
qualifiednamespacespecifier: nestedNameSpecifier? namespaceName;
|
||||
|
||||
usingDeclaration:
|
||||
Using ((Typename_? nestedNameSpecifier) | Doublecolon) unqualifiedId Semi;
|
||||
|
||||
usingDirective:
|
||||
attributeSpecifierSeq? Using Namespace nestedNameSpecifier? namespaceName Semi;
|
||||
|
||||
asmDefinition: Asm LeftParen StringLiteral RightParen Semi;
|
||||
|
||||
linkageSpecification:
|
||||
Extern StringLiteral (
|
||||
LeftBrace declarationseq? RightBrace
|
||||
| declaration
|
||||
);
|
||||
|
||||
attributeSpecifierSeq: attributeSpecifier+;
|
||||
|
||||
attributeSpecifier:
|
||||
LeftBracket LeftBracket attributeList? RightBracket RightBracket
|
||||
| alignmentspecifier;
|
||||
|
||||
alignmentspecifier:
|
||||
Alignas LeftParen (theTypeId | constantExpression) Ellipsis? RightParen;
|
||||
|
||||
attributeList: attribute (Comma attribute)* Ellipsis?;
|
||||
|
||||
attribute: (attributeNamespace Doublecolon)? Identifier attributeArgumentClause?;
|
||||
|
||||
attributeNamespace: Identifier;
|
||||
|
||||
attributeArgumentClause: LeftParen balancedTokenSeq? RightParen;
|
||||
|
||||
balancedTokenSeq: balancedtoken+;
|
||||
|
||||
balancedtoken:
|
||||
LeftParen balancedTokenSeq RightParen
|
||||
| LeftBracket balancedTokenSeq RightBracket
|
||||
| LeftBrace balancedTokenSeq RightBrace
|
||||
| ~(
|
||||
LeftParen
|
||||
| RightParen
|
||||
| LeftBrace
|
||||
| RightBrace
|
||||
| LeftBracket
|
||||
| RightBracket
|
||||
)+;
|
||||
/*Declarators*/
|
||||
|
||||
initDeclaratorList: initDeclarator (Comma initDeclarator)*;
|
||||
|
||||
initDeclarator: declarator initializer?;
|
||||
|
||||
declarator:
|
||||
pointerDeclarator
|
||||
| noPointerDeclarator parametersAndQualifiers trailingReturnType;
|
||||
|
||||
pointerDeclarator: (pointerOperator Const?)* noPointerDeclarator;
|
||||
|
||||
noPointerDeclarator:
|
||||
declaratorid attributeSpecifierSeq?
|
||||
| noPointerDeclarator (
|
||||
parametersAndQualifiers
|
||||
| LeftBracket constantExpression? RightBracket attributeSpecifierSeq?
|
||||
)
|
||||
| LeftParen pointerDeclarator RightParen;
|
||||
|
||||
parametersAndQualifiers:
|
||||
LeftParen parameterDeclarationClause? RightParen cvqualifierseq? refqualifier?
|
||||
exceptionSpecification? attributeSpecifierSeq?;
|
||||
|
||||
trailingReturnType:
|
||||
Arrow trailingTypeSpecifierSeq abstractDeclarator?;
|
||||
|
||||
pointerOperator:
|
||||
(And | AndAnd) attributeSpecifierSeq?
|
||||
| nestedNameSpecifier? Star attributeSpecifierSeq? cvqualifierseq?;
|
||||
|
||||
cvqualifierseq: cvQualifier+;
|
||||
|
||||
cvQualifier: Const | Volatile;
|
||||
|
||||
refqualifier: And | AndAnd;
|
||||
|
||||
declaratorid: Ellipsis? idExpression;
|
||||
|
||||
theTypeId: typeSpecifierSeq abstractDeclarator?;
|
||||
|
||||
abstractDeclarator:
|
||||
pointerAbstractDeclarator
|
||||
| noPointerAbstractDeclarator? parametersAndQualifiers trailingReturnType
|
||||
| abstractPackDeclarator;
|
||||
|
||||
pointerAbstractDeclarator:
|
||||
noPointerAbstractDeclarator
|
||||
| pointerOperator+ noPointerAbstractDeclarator?;
|
||||
|
||||
noPointerAbstractDeclarator:
|
||||
noPointerAbstractDeclarator (
|
||||
parametersAndQualifiers
|
||||
| noPointerAbstractDeclarator LeftBracket constantExpression? RightBracket
|
||||
attributeSpecifierSeq?
|
||||
)
|
||||
| parametersAndQualifiers
|
||||
| LeftBracket constantExpression? RightBracket attributeSpecifierSeq?
|
||||
| LeftParen pointerAbstractDeclarator RightParen;
|
||||
|
||||
abstractPackDeclarator:
|
||||
pointerOperator* noPointerAbstractPackDeclarator;
|
||||
|
||||
noPointerAbstractPackDeclarator:
|
||||
noPointerAbstractPackDeclarator (
|
||||
parametersAndQualifiers
|
||||
| LeftBracket constantExpression? RightBracket attributeSpecifierSeq?
|
||||
)
|
||||
| Ellipsis;
|
||||
|
||||
parameterDeclarationClause:
|
||||
parameterDeclarationList (Comma? Ellipsis)?;
|
||||
|
||||
parameterDeclarationList:
|
||||
parameterDeclaration (Comma parameterDeclaration)*;
|
||||
|
||||
parameterDeclaration:
|
||||
attributeSpecifierSeq? declSpecifierSeq (
|
||||
(declarator | abstractDeclarator?) (
|
||||
Assign initializerClause
|
||||
)?
|
||||
);
|
||||
|
||||
functionDefinition:
|
||||
attributeSpecifierSeq? declSpecifierSeq? declarator virtualSpecifierSeq? functionBody;
|
||||
|
||||
functionBody:
|
||||
constructorInitializer? compoundStatement
|
||||
| functionTryBlock
|
||||
| Assign (Default | Delete) Semi;
|
||||
|
||||
initializer:
|
||||
braceOrEqualInitializer
|
||||
| LeftParen expressionList RightParen;
|
||||
|
||||
braceOrEqualInitializer:
|
||||
Assign initializerClause
|
||||
| bracedInitList;
|
||||
|
||||
initializerClause: assignmentExpression | bracedInitList;
|
||||
|
||||
initializerList:
|
||||
initializerClause Ellipsis? (
|
||||
Comma initializerClause Ellipsis?
|
||||
)*;
|
||||
|
||||
bracedInitList: LeftBrace (initializerList Comma?)? RightBrace;
|
||||
/*Classes*/
|
||||
|
||||
className: Identifier | simpleTemplateId;
|
||||
|
||||
classSpecifier:
|
||||
classHead LeftBrace memberSpecification? RightBrace;
|
||||
|
||||
classHead:
|
||||
classKey attributeSpecifierSeq? (
|
||||
classHeadName classVirtSpecifier?
|
||||
)? baseClause?
|
||||
| Union attributeSpecifierSeq? (
|
||||
classHeadName classVirtSpecifier?
|
||||
)?;
|
||||
|
||||
classHeadName: nestedNameSpecifier? className;
|
||||
|
||||
classVirtSpecifier: Final;
|
||||
|
||||
classKey: Class | Struct;
|
||||
|
||||
memberSpecification:
|
||||
(memberdeclaration | accessSpecifier Colon)+;
|
||||
|
||||
memberdeclaration:
|
||||
attributeSpecifierSeq? declSpecifierSeq? memberDeclaratorList? Semi
|
||||
| functionDefinition
|
||||
| usingDeclaration
|
||||
| staticAssertDeclaration
|
||||
| templateDeclaration
|
||||
| aliasDeclaration
|
||||
| emptyDeclaration;
|
||||
|
||||
memberDeclaratorList:
|
||||
memberDeclarator (Comma memberDeclarator)*;
|
||||
|
||||
memberDeclarator:
|
||||
declarator (
|
||||
virtualSpecifierSeq? pureSpecifier?
|
||||
| braceOrEqualInitializer?
|
||||
)
|
||||
| Identifier? attributeSpecifierSeq? Colon constantExpression;
|
||||
|
||||
virtualSpecifierSeq: virtualSpecifier+;
|
||||
|
||||
virtualSpecifier: Override | Final;
|
||||
/*
|
||||
purespecifier: Assign '0'//Conflicts with the lexer ;
|
||||
*/
|
||||
|
||||
pureSpecifier:
|
||||
Assign val = OctalLiteral {if($val.text.compareTo("0")!=0) throw new InputMismatchException(this);
|
||||
};
|
||||
/*Derived classes*/
|
||||
|
||||
baseClause: Colon baseSpecifierList;
|
||||
|
||||
baseSpecifierList:
|
||||
baseSpecifier Ellipsis? (Comma baseSpecifier Ellipsis?)*;
|
||||
|
||||
baseSpecifier:
|
||||
attributeSpecifierSeq? (
|
||||
baseTypeSpecifier
|
||||
| Virtual accessSpecifier? baseTypeSpecifier
|
||||
| accessSpecifier Virtual? baseTypeSpecifier
|
||||
);
|
||||
|
||||
classOrDeclType:
|
||||
nestedNameSpecifier? className
|
||||
| decltypeSpecifier;
|
||||
|
||||
baseTypeSpecifier: classOrDeclType;
|
||||
|
||||
accessSpecifier: Private | Protected | Public;
|
||||
/*Special member functions*/
|
||||
|
||||
conversionFunctionId: Operator conversionTypeId;
|
||||
|
||||
conversionTypeId: typeSpecifierSeq conversionDeclarator?;
|
||||
|
||||
conversionDeclarator: pointerOperator conversionDeclarator?;
|
||||
|
||||
constructorInitializer: Colon memInitializerList;
|
||||
|
||||
memInitializerList:
|
||||
memInitializer Ellipsis? (Comma memInitializer Ellipsis?)*;
|
||||
|
||||
memInitializer:
|
||||
meminitializerid (
|
||||
LeftParen expressionList? RightParen
|
||||
| bracedInitList
|
||||
);
|
||||
|
||||
meminitializerid: classOrDeclType | Identifier;
|
||||
/*Overloading*/
|
||||
|
||||
operatorFunctionId: Operator theOperator;
|
||||
|
||||
literalOperatorId:
|
||||
Operator (
|
||||
StringLiteral Identifier
|
||||
| UserDefinedStringLiteral
|
||||
);
|
||||
/*Templates*/
|
||||
|
||||
templateDeclaration:
|
||||
Template Less templateparameterList Greater declaration;
|
||||
|
||||
templateparameterList:
|
||||
templateParameter (Comma templateParameter)*;
|
||||
|
||||
templateParameter: typeParameter | parameterDeclaration;
|
||||
|
||||
typeParameter:
|
||||
(
|
||||
(Template Less templateparameterList Greater)? Class
|
||||
| Typename_
|
||||
) ((Ellipsis? Identifier?) | (Identifier? Assign theTypeId));
|
||||
|
||||
simpleTemplateId:
|
||||
templateName Less templateArgumentList? Greater;
|
||||
|
||||
templateId:
|
||||
simpleTemplateId
|
||||
| (operatorFunctionId | literalOperatorId) Less templateArgumentList? Greater;
|
||||
|
||||
templateName: Identifier;
|
||||
|
||||
templateArgumentList:
|
||||
templateArgument Ellipsis? (Comma templateArgument Ellipsis?)*;
|
||||
|
||||
templateArgument: theTypeId | constantExpression | idExpression;
|
||||
|
||||
typeNameSpecifier:
|
||||
Typename_ nestedNameSpecifier (
|
||||
Identifier
|
||||
| Template? simpleTemplateId
|
||||
);
|
||||
|
||||
explicitInstantiation: Extern? Template declaration;
|
||||
|
||||
explicitSpecialization: Template Less Greater declaration;
|
||||
/*Exception handling*/
|
||||
|
||||
tryBlock: Try compoundStatement handlerSeq;
|
||||
|
||||
functionTryBlock:
|
||||
Try constructorInitializer? compoundStatement handlerSeq;
|
||||
|
||||
handlerSeq: handler+;
|
||||
|
||||
handler:
|
||||
Catch LeftParen exceptionDeclaration RightParen compoundStatement;
|
||||
|
||||
exceptionDeclaration:
|
||||
attributeSpecifierSeq? typeSpecifierSeq (
|
||||
declarator
|
||||
| abstractDeclarator
|
||||
)?
|
||||
| Ellipsis;
|
||||
|
||||
throwExpression: Throw assignmentExpression?;
|
||||
|
||||
exceptionSpecification:
|
||||
dynamicExceptionSpecification
|
||||
| noeExceptSpecification;
|
||||
|
||||
dynamicExceptionSpecification:
|
||||
Throw LeftParen typeIdList? RightParen;
|
||||
|
||||
typeIdList: theTypeId Ellipsis? (Comma theTypeId Ellipsis?)*;
|
||||
|
||||
noeExceptSpecification:
|
||||
Noexcept LeftParen constantExpression RightParen
|
||||
| Noexcept;
|
||||
/*Preprocessing directives*/
|
||||
|
||||
/*Lexer*/
|
||||
|
||||
theOperator:
|
||||
New (LeftBracket RightBracket)?
|
||||
| Delete (LeftBracket RightBracket)?
|
||||
| Plus
|
||||
| Minus
|
||||
| Star
|
||||
| Div
|
||||
| Mod
|
||||
| Caret
|
||||
| And
|
||||
| Or
|
||||
| Tilde
|
||||
| Not
|
||||
| Assign
|
||||
| Greater
|
||||
| Less
|
||||
| GreaterEqual
|
||||
| PlusAssign
|
||||
| MinusAssign
|
||||
| StarAssign
|
||||
| ModAssign
|
||||
| XorAssign
|
||||
| AndAssign
|
||||
| OrAssign
|
||||
| Less Less
|
||||
| Greater Greater
|
||||
| RightShiftAssign
|
||||
| LeftShiftAssign
|
||||
| Equal
|
||||
| NotEqual
|
||||
| LessEqual
|
||||
| AndAnd
|
||||
| OrOr
|
||||
| PlusPlus
|
||||
| MinusMinus
|
||||
| Comma
|
||||
| ArrowStar
|
||||
| Arrow
|
||||
| LeftParen RightParen
|
||||
| LeftBracket RightBracket;
|
||||
|
||||
literal:
|
||||
IntegerLiteral
|
||||
| CharacterLiteral
|
||||
| FloatingLiteral
|
||||
| StringLiteral
|
||||
| BooleanLiteral
|
||||
| PointerLiteral
|
||||
| UserDefinedLiteral;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,264 @@
|
||||
IntegerLiteral=1
|
||||
CharacterLiteral=2
|
||||
FloatingLiteral=3
|
||||
StringLiteral=4
|
||||
BooleanLiteral=5
|
||||
PointerLiteral=6
|
||||
UserDefinedLiteral=7
|
||||
MultiLineMacro=8
|
||||
Directive=9
|
||||
Alignas=10
|
||||
Alignof=11
|
||||
Asm=12
|
||||
Auto=13
|
||||
Bool=14
|
||||
Break=15
|
||||
Case=16
|
||||
Catch=17
|
||||
Char=18
|
||||
Char16=19
|
||||
Char32=20
|
||||
Class=21
|
||||
Const=22
|
||||
Constexpr=23
|
||||
Const_cast=24
|
||||
Continue=25
|
||||
Decltype=26
|
||||
Default=27
|
||||
Delete=28
|
||||
Do=29
|
||||
Double=30
|
||||
Dynamic_cast=31
|
||||
Else=32
|
||||
Enum=33
|
||||
Explicit=34
|
||||
Export=35
|
||||
Extern=36
|
||||
False_=37
|
||||
Final=38
|
||||
Float=39
|
||||
For=40
|
||||
Friend=41
|
||||
Goto=42
|
||||
If=43
|
||||
Inline=44
|
||||
Int=45
|
||||
Long=46
|
||||
Mutable=47
|
||||
Namespace=48
|
||||
New=49
|
||||
Noexcept=50
|
||||
Nullptr=51
|
||||
Operator=52
|
||||
Override=53
|
||||
Private=54
|
||||
Protected=55
|
||||
Public=56
|
||||
Register=57
|
||||
Reinterpret_cast=58
|
||||
Return=59
|
||||
Short=60
|
||||
Signed=61
|
||||
Sizeof=62
|
||||
Static=63
|
||||
Static_assert=64
|
||||
Static_cast=65
|
||||
Struct=66
|
||||
Switch=67
|
||||
Template=68
|
||||
This=69
|
||||
Thread_local=70
|
||||
Throw=71
|
||||
True_=72
|
||||
Try=73
|
||||
Typedef=74
|
||||
Typeid_=75
|
||||
Typename_=76
|
||||
Union=77
|
||||
Unsigned=78
|
||||
Using=79
|
||||
Virtual=80
|
||||
Void=81
|
||||
Volatile=82
|
||||
Wchar=83
|
||||
While=84
|
||||
LeftParen=85
|
||||
RightParen=86
|
||||
LeftBracket=87
|
||||
RightBracket=88
|
||||
LeftBrace=89
|
||||
RightBrace=90
|
||||
Plus=91
|
||||
Minus=92
|
||||
Star=93
|
||||
Div=94
|
||||
Mod=95
|
||||
Caret=96
|
||||
And=97
|
||||
Or=98
|
||||
Tilde=99
|
||||
Not=100
|
||||
Assign=101
|
||||
Less=102
|
||||
Greater=103
|
||||
PlusAssign=104
|
||||
MinusAssign=105
|
||||
StarAssign=106
|
||||
DivAssign=107
|
||||
ModAssign=108
|
||||
XorAssign=109
|
||||
AndAssign=110
|
||||
OrAssign=111
|
||||
LeftShiftAssign=112
|
||||
RightShiftAssign=113
|
||||
Equal=114
|
||||
NotEqual=115
|
||||
LessEqual=116
|
||||
GreaterEqual=117
|
||||
AndAnd=118
|
||||
OrOr=119
|
||||
PlusPlus=120
|
||||
MinusMinus=121
|
||||
Comma=122
|
||||
ArrowStar=123
|
||||
Arrow=124
|
||||
Question=125
|
||||
Colon=126
|
||||
Doublecolon=127
|
||||
Semi=128
|
||||
Dot=129
|
||||
DotStar=130
|
||||
Ellipsis=131
|
||||
Identifier=132
|
||||
DecimalLiteral=133
|
||||
OctalLiteral=134
|
||||
HexadecimalLiteral=135
|
||||
BinaryLiteral=136
|
||||
Integersuffix=137
|
||||
UserDefinedIntegerLiteral=138
|
||||
UserDefinedFloatingLiteral=139
|
||||
UserDefinedStringLiteral=140
|
||||
UserDefinedCharacterLiteral=141
|
||||
Whitespace=142
|
||||
Newline=143
|
||||
BlockComment=144
|
||||
LineComment=145
|
||||
'alignas'=10
|
||||
'alignof'=11
|
||||
'asm'=12
|
||||
'auto'=13
|
||||
'bool'=14
|
||||
'break'=15
|
||||
'case'=16
|
||||
'catch'=17
|
||||
'char'=18
|
||||
'char16_t'=19
|
||||
'char32_t'=20
|
||||
'class'=21
|
||||
'const'=22
|
||||
'constexpr'=23
|
||||
'const_cast'=24
|
||||
'continue'=25
|
||||
'decltype'=26
|
||||
'default'=27
|
||||
'delete'=28
|
||||
'do'=29
|
||||
'double'=30
|
||||
'dynamic_cast'=31
|
||||
'else'=32
|
||||
'enum'=33
|
||||
'explicit'=34
|
||||
'export'=35
|
||||
'extern'=36
|
||||
'false'=37
|
||||
'final'=38
|
||||
'float'=39
|
||||
'for'=40
|
||||
'friend'=41
|
||||
'goto'=42
|
||||
'if'=43
|
||||
'inline'=44
|
||||
'int'=45
|
||||
'long'=46
|
||||
'mutable'=47
|
||||
'namespace'=48
|
||||
'new'=49
|
||||
'noexcept'=50
|
||||
'nullptr'=51
|
||||
'operator'=52
|
||||
'override'=53
|
||||
'private'=54
|
||||
'protected'=55
|
||||
'public'=56
|
||||
'register'=57
|
||||
'reinterpret_cast'=58
|
||||
'return'=59
|
||||
'short'=60
|
||||
'signed'=61
|
||||
'sizeof'=62
|
||||
'static'=63
|
||||
'static_assert'=64
|
||||
'static_cast'=65
|
||||
'struct'=66
|
||||
'switch'=67
|
||||
'template'=68
|
||||
'this'=69
|
||||
'thread_local'=70
|
||||
'throw'=71
|
||||
'true'=72
|
||||
'try'=73
|
||||
'typedef'=74
|
||||
'typeid'=75
|
||||
'typename'=76
|
||||
'union'=77
|
||||
'unsigned'=78
|
||||
'using'=79
|
||||
'virtual'=80
|
||||
'void'=81
|
||||
'volatile'=82
|
||||
'wchar_t'=83
|
||||
'while'=84
|
||||
'('=85
|
||||
')'=86
|
||||
'['=87
|
||||
']'=88
|
||||
'{'=89
|
||||
'}'=90
|
||||
'+'=91
|
||||
'-'=92
|
||||
'*'=93
|
||||
'/'=94
|
||||
'%'=95
|
||||
'^'=96
|
||||
'&'=97
|
||||
'|'=98
|
||||
'~'=99
|
||||
'='=101
|
||||
'<'=102
|
||||
'>'=103
|
||||
'+='=104
|
||||
'-='=105
|
||||
'*='=106
|
||||
'/='=107
|
||||
'%='=108
|
||||
'^='=109
|
||||
'&='=110
|
||||
'|='=111
|
||||
'<<='=112
|
||||
'>>='=113
|
||||
'=='=114
|
||||
'!='=115
|
||||
'<='=116
|
||||
'>='=117
|
||||
'++'=120
|
||||
'--'=121
|
||||
','=122
|
||||
'->*'=123
|
||||
'->'=124
|
||||
'?'=125
|
||||
':'=126
|
||||
'::'=127
|
||||
';'=128
|
||||
'.'=129
|
||||
'.*'=130
|
||||
'...'=131
|
||||
Reference in New Issue
Block a user