Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
509a8c89c0 | ||
|
|
118b7cc1ee | ||
|
|
8234e78f48 | ||
|
|
1f1e2e50d8 |
363
.antlr/ExprLexer.interp
Normal file
363
.antlr/ExprLexer.interp
Normal file
File diff suppressed because one or more lines are too long
795
.antlr/ExprLexer.java
Normal file
795
.antlr/ExprLexer.java
Normal file
@@ -0,0 +1,795 @@
|
||||
// Generated from /Users/mannpatel/Desktop/CPSC-499/ExprLexer.g4 by ANTLR 4.13.1
|
||||
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", "CheckReturnValue", "this-escape"})
|
||||
public class ExprLexer extends Lexer {
|
||||
static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); }
|
||||
|
||||
protected static final DFA[] _decisionToDFA;
|
||||
protected static final PredictionContextCache _sharedContextCache =
|
||||
new PredictionContextCache();
|
||||
public static final int
|
||||
WhiteSpace=1, Comment=2, Abstract=3, Assert=4, Boolean=5, Break=6, Byte=7,
|
||||
Case=8, Catch=9, Char=10, Class=11, Const=12, Continue=13, Default=14,
|
||||
Do=15, Double=16, Else=17, Extends=18, Final=19, Finally=20, Float=21,
|
||||
For=22, Goto=23, If=24, Implements=25, Import=26, InstanceOf=27, Int=28,
|
||||
Interface=29, Long=30, Native=31, New=32, Package=33, Private=34, Protected=35,
|
||||
Public=36, Return=37, Short=38, Static=39, Strictfp=40, Super=41, Switch=42,
|
||||
Synchronized=43, This=44, Throw=45, Throws=46, Transient=47, Try=48, Void=49,
|
||||
Volatile=50, While=51, Dot=52, IntegerLiteral=53, FloatingPointLiteral=54,
|
||||
CharacterLiteral=55, StringLiteral=56, BooleanLiteral=57, NullLiteral=58,
|
||||
ParenthesesLeft=59, ParenthesesRight=60, CurlyBracketLeft=61, CurlyBracketRight=62,
|
||||
SquareBracketLeft=63, SquareBracketRight=64, Semicolon=65, Comma=66, UnsignedRightShiftAssign=67,
|
||||
EqualTo=68, NotEqualTo=69, LessThanEqualTo=70, GreaterThanEqualTo=71,
|
||||
ConditionalAND=72, ConditionalOR=73, Increment=74, Decrement=75, LeftShift=76,
|
||||
SignedRightShift=77, UnsignedRightShift=78, AddAssign=79, SubtractAssign=80,
|
||||
MultiplyAssign=81, DivideAssign=82, BitwiseANDAssign=83, BitwiseORAssign=84,
|
||||
BitwiseXORAssign=85, RemainderAssign=86, LeftShiftAssign=87, SignedRightShiftAssign=88,
|
||||
Assignment=89, BitwiseComplement=90, LessThan=91, GreaterThan=92, LogicalComplement=93,
|
||||
Question=94, Colon=95, Addition=96, Subtraction=97, Multiplication=98,
|
||||
Division=99, BitwiseAND=100, BitwiseOR=101, BitwiseXOR=102, Remainder=103,
|
||||
IDENTIFIER=104;
|
||||
public static String[] channelNames = {
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||
};
|
||||
|
||||
public static String[] modeNames = {
|
||||
"DEFAULT_MODE"
|
||||
};
|
||||
|
||||
private static String[] makeRuleNames() {
|
||||
return new String[] {
|
||||
"LineTerminator", "WhiteSpace", "EndOfLineComment", "Comment", "TraditionalComment",
|
||||
"CommentTail", "CommentTailStar", "NotStar", "NotStarNotSlash", "Abstract",
|
||||
"Assert", "Boolean", "Break", "Byte", "Case", "Catch", "Char", "Class",
|
||||
"Const", "Continue", "Default", "Do", "Double", "Else", "Extends", "Final",
|
||||
"Finally", "Float", "For", "Goto", "If", "Implements", "Import", "InstanceOf",
|
||||
"Int", "Interface", "Long", "Native", "New", "Package", "Private", "Protected",
|
||||
"Public", "Return", "Short", "Static", "Strictfp", "Super", "Switch",
|
||||
"Synchronized", "This", "Throw", "Throws", "Transient", "Try", "Void",
|
||||
"Volatile", "While", "Dot", "IntegerLiteral", "DecimalIntegerLiteral",
|
||||
"HexIntegerLiteral", "OctalIntegerLiteral", "IntegerTypeSuffix", "DecimalNumeral",
|
||||
"HexNumeral", "HexDigits", "HexDigit", "FloatingPointLiteral", "ExponentPart",
|
||||
"ExponentIndicator", "SignedInteger", "Digits", "Digit", "NonZeroDigit",
|
||||
"Sign", "FloatTypeSuffix", "CharacterLiteral", "SingleCharacter", "StringLiteral",
|
||||
"StringCharacters", "StringCharacter", "EscapeSequence", "OctalEscape",
|
||||
"OctalNumeral", "OctalDigits", "OctalDigit", "ZeroToThree", "BooleanLiteral",
|
||||
"NullLiteral", "ParenthesesLeft", "ParenthesesRight", "CurlyBracketLeft",
|
||||
"CurlyBracketRight", "SquareBracketLeft", "SquareBracketRight", "Semicolon",
|
||||
"Comma", "UnsignedRightShiftAssign", "EqualTo", "NotEqualTo", "LessThanEqualTo",
|
||||
"GreaterThanEqualTo", "ConditionalAND", "ConditionalOR", "Increment",
|
||||
"Decrement", "LeftShift", "SignedRightShift", "UnsignedRightShift", "AddAssign",
|
||||
"SubtractAssign", "MultiplyAssign", "DivideAssign", "BitwiseANDAssign",
|
||||
"BitwiseORAssign", "BitwiseXORAssign", "RemainderAssign", "LeftShiftAssign",
|
||||
"SignedRightShiftAssign", "Assignment", "BitwiseComplement", "LessThan",
|
||||
"GreaterThan", "LogicalComplement", "Question", "Colon", "Addition",
|
||||
"Subtraction", "Multiplication", "Division", "BitwiseAND", "BitwiseOR",
|
||||
"BitwiseXOR", "Remainder", "IDENTIFIER", "JavaLetter", "JavaLetterOrDigit"
|
||||
};
|
||||
}
|
||||
public static final String[] ruleNames = makeRuleNames();
|
||||
|
||||
private static String[] makeLiteralNames() {
|
||||
return new String[] {
|
||||
null, null, null, "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'",
|
||||
"'case'", "'catch'", "'char'", "'class'", "'const'", "'continue'", "'default'",
|
||||
"'do'", "'double'", "'else'", "'extends'", "'final'", "'finally'", "'float'",
|
||||
"'for'", "'goto'", "'if'", "'implements'", "'import'", "'instanceof'",
|
||||
"'int'", "'interface'", "'long'", "'native'", "'new'", "'package'", "'private'",
|
||||
"'protected'", "'public'", "'return'", "'short'", "'static'", "'strictfp'",
|
||||
"'super'", "'switch'", "'synchronized'", "'this'", "'throw'", "'throws'",
|
||||
"'transient'", "'try'", "'void'", "'volatile'", "'while'", "'.'", null,
|
||||
null, null, null, null, "'null'", "'('", "')'", "'{'", "'}'", "'['",
|
||||
"']'", "';'", "','", "'>>>='", "'=='", "'!='", "'<='", "'>='", "'&&'",
|
||||
"'||'", "'++'", "'--'", "'<<'", "'>>'", "'>>>'", "'+='", "'-='", "'*='",
|
||||
"'/='", "'&='", "'|='", "'^='", "'%='", "'<<='", "'>>='", "'='", "'~'",
|
||||
"'<'", "'>'", "'!'", "'?'", "':'", "'+'", "'-'", "'*'", "'/'", "'&'",
|
||||
"'|'", "'^'", "'%'"
|
||||
};
|
||||
}
|
||||
private static final String[] _LITERAL_NAMES = makeLiteralNames();
|
||||
private static String[] makeSymbolicNames() {
|
||||
return new String[] {
|
||||
null, "WhiteSpace", "Comment", "Abstract", "Assert", "Boolean", "Break",
|
||||
"Byte", "Case", "Catch", "Char", "Class", "Const", "Continue", "Default",
|
||||
"Do", "Double", "Else", "Extends", "Final", "Finally", "Float", "For",
|
||||
"Goto", "If", "Implements", "Import", "InstanceOf", "Int", "Interface",
|
||||
"Long", "Native", "New", "Package", "Private", "Protected", "Public",
|
||||
"Return", "Short", "Static", "Strictfp", "Super", "Switch", "Synchronized",
|
||||
"This", "Throw", "Throws", "Transient", "Try", "Void", "Volatile", "While",
|
||||
"Dot", "IntegerLiteral", "FloatingPointLiteral", "CharacterLiteral",
|
||||
"StringLiteral", "BooleanLiteral", "NullLiteral", "ParenthesesLeft",
|
||||
"ParenthesesRight", "CurlyBracketLeft", "CurlyBracketRight", "SquareBracketLeft",
|
||||
"SquareBracketRight", "Semicolon", "Comma", "UnsignedRightShiftAssign",
|
||||
"EqualTo", "NotEqualTo", "LessThanEqualTo", "GreaterThanEqualTo", "ConditionalAND",
|
||||
"ConditionalOR", "Increment", "Decrement", "LeftShift", "SignedRightShift",
|
||||
"UnsignedRightShift", "AddAssign", "SubtractAssign", "MultiplyAssign",
|
||||
"DivideAssign", "BitwiseANDAssign", "BitwiseORAssign", "BitwiseXORAssign",
|
||||
"RemainderAssign", "LeftShiftAssign", "SignedRightShiftAssign", "Assignment",
|
||||
"BitwiseComplement", "LessThan", "GreaterThan", "LogicalComplement",
|
||||
"Question", "Colon", "Addition", "Subtraction", "Multiplication", "Division",
|
||||
"BitwiseAND", "BitwiseOR", "BitwiseXOR", "Remainder", "IDENTIFIER"
|
||||
};
|
||||
}
|
||||
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
|
||||
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #VOCABULARY} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String[] tokenNames;
|
||||
static {
|
||||
tokenNames = new String[_SYMBOLIC_NAMES.length];
|
||||
for (int i = 0; i < tokenNames.length; i++) {
|
||||
tokenNames[i] = VOCABULARY.getLiteralName(i);
|
||||
if (tokenNames[i] == null) {
|
||||
tokenNames[i] = VOCABULARY.getSymbolicName(i);
|
||||
}
|
||||
|
||||
if (tokenNames[i] == null) {
|
||||
tokenNames[i] = "<INVALID>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public String[] getTokenNames() {
|
||||
return tokenNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
public Vocabulary getVocabulary() {
|
||||
return VOCABULARY;
|
||||
}
|
||||
|
||||
|
||||
public ExprLexer(CharStream input) {
|
||||
super(input);
|
||||
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGrammarFileName() { return "ExprLexer.g4"; }
|
||||
|
||||
@Override
|
||||
public String[] getRuleNames() { return ruleNames; }
|
||||
|
||||
@Override
|
||||
public String getSerializedATN() { return _serializedATN; }
|
||||
|
||||
@Override
|
||||
public String[] getChannelNames() { return channelNames; }
|
||||
|
||||
@Override
|
||||
public String[] getModeNames() { return modeNames; }
|
||||
|
||||
@Override
|
||||
public ATN getATN() { return _ATN; }
|
||||
|
||||
public static final String _serializedATN =
|
||||
"\u0004\u0000h\u03ef\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
|
||||
"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
|
||||
"\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
|
||||
"\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
|
||||
"\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+
|
||||
"\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+
|
||||
"\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+
|
||||
"\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+
|
||||
"\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+
|
||||
"\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+
|
||||
"\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+
|
||||
"!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+
|
||||
"&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
|
||||
"+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
|
||||
"0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+
|
||||
"5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+
|
||||
":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+
|
||||
"?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007"+
|
||||
"D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007"+
|
||||
"I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007"+
|
||||
"N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007"+
|
||||
"S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007"+
|
||||
"X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007"+
|
||||
"]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007"+
|
||||
"b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007"+
|
||||
"g\u0002h\u0007h\u0002i\u0007i\u0002j\u0007j\u0002k\u0007k\u0002l\u0007"+
|
||||
"l\u0002m\u0007m\u0002n\u0007n\u0002o\u0007o\u0002p\u0007p\u0002q\u0007"+
|
||||
"q\u0002r\u0007r\u0002s\u0007s\u0002t\u0007t\u0002u\u0007u\u0002v\u0007"+
|
||||
"v\u0002w\u0007w\u0002x\u0007x\u0002y\u0007y\u0002z\u0007z\u0002{\u0007"+
|
||||
"{\u0002|\u0007|\u0002}\u0007}\u0002~\u0007~\u0002\u007f\u0007\u007f\u0002"+
|
||||
"\u0080\u0007\u0080\u0002\u0081\u0007\u0081\u0002\u0082\u0007\u0082\u0002"+
|
||||
"\u0083\u0007\u0083\u0002\u0084\u0007\u0084\u0002\u0085\u0007\u0085\u0002"+
|
||||
"\u0086\u0007\u0086\u0002\u0087\u0007\u0087\u0002\u0088\u0007\u0088\u0002"+
|
||||
"\u0089\u0007\u0089\u0001\u0000\u0001\u0000\u0003\u0000\u0118\b\u0000\u0001"+
|
||||
"\u0000\u0003\u0000\u011b\b\u0000\u0001\u0001\u0001\u0001\u0003\u0001\u011f"+
|
||||
"\b\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001"+
|
||||
"\u0002\u0005\u0002\u0127\b\u0002\n\u0002\f\u0002\u012a\t\u0002\u0001\u0002"+
|
||||
"\u0003\u0002\u012d\b\u0002\u0001\u0003\u0001\u0003\u0003\u0003\u0131\b"+
|
||||
"\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+
|
||||
"\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0003"+
|
||||
"\u0005\u013e\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+
|
||||
"\u0006\u0001\u0006\u0003\u0006\u0146\b\u0006\u0001\u0007\u0001\u0007\u0003"+
|
||||
"\u0007\u014a\b\u0007\u0001\b\u0001\b\u0003\b\u014e\b\b\u0001\t\u0001\t"+
|
||||
"\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+
|
||||
"\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001"+
|
||||
"\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+
|
||||
"\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+
|
||||
"\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+
|
||||
"\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+
|
||||
"\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011"+
|
||||
"\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012"+
|
||||
"\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013"+
|
||||
"\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013"+
|
||||
"\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+
|
||||
"\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+
|
||||
"\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+
|
||||
"\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017"+
|
||||
"\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+
|
||||
"\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019"+
|
||||
"\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+
|
||||
"\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b"+
|
||||
"\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c"+
|
||||
"\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d"+
|
||||
"\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f"+
|
||||
"\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+
|
||||
"\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 "+
|
||||
"\u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+
|
||||
"!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001\"\u0001"+
|
||||
"#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+
|
||||
"$\u0001$\u0001$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+
|
||||
"%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+
|
||||
"\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001"+
|
||||
"(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001"+
|
||||
")\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001+\u0001"+
|
||||
"+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001"+
|
||||
",\u0001,\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001"+
|
||||
".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001/\u0001/\u0001"+
|
||||
"/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+
|
||||
"0\u00011\u00011\u00011\u00011\u00011\u00011\u00011\u00011\u00011\u0001"+
|
||||
"1\u00011\u00011\u00011\u00012\u00012\u00012\u00012\u00012\u00013\u0001"+
|
||||
"3\u00013\u00013\u00013\u00013\u00014\u00014\u00014\u00014\u00014\u0001"+
|
||||
"4\u00014\u00015\u00015\u00015\u00015\u00015\u00015\u00015\u00015\u0001"+
|
||||
"5\u00015\u00016\u00016\u00016\u00016\u00017\u00017\u00017\u00017\u0001"+
|
||||
"7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+
|
||||
"9\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001;\u0001;\u0001"+
|
||||
";\u0003;\u02a3\b;\u0001<\u0001<\u0003<\u02a7\b<\u0001=\u0001=\u0003=\u02ab"+
|
||||
"\b=\u0001>\u0001>\u0003>\u02af\b>\u0001?\u0001?\u0001@\u0001@\u0001@\u0003"+
|
||||
"@\u02b6\b@\u0003@\u02b8\b@\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0003"+
|
||||
"A\u02c0\bA\u0001B\u0001B\u0001B\u0001B\u0003B\u02c6\bB\u0001C\u0001C\u0001"+
|
||||
"D\u0001D\u0001D\u0003D\u02cd\bD\u0001D\u0003D\u02d0\bD\u0001D\u0003D\u02d3"+
|
||||
"\bD\u0001D\u0001D\u0001D\u0003D\u02d8\bD\u0001D\u0003D\u02db\bD\u0001"+
|
||||
"D\u0001D\u0001D\u0003D\u02e0\bD\u0001D\u0001D\u0003D\u02e4\bD\u0001D\u0001"+
|
||||
"D\u0003D\u02e8\bD\u0001E\u0001E\u0001E\u0001F\u0001F\u0001G\u0003G\u02f0"+
|
||||
"\bG\u0001G\u0001G\u0001H\u0004H\u02f5\bH\u000bH\fH\u02f6\u0001I\u0001"+
|
||||
"I\u0003I\u02fb\bI\u0001J\u0001J\u0001K\u0001K\u0001L\u0001L\u0001M\u0001"+
|
||||
"M\u0001M\u0001M\u0001M\u0001M\u0001M\u0001M\u0003M\u030b\bM\u0001N\u0001"+
|
||||
"N\u0001O\u0001O\u0003O\u0311\bO\u0001O\u0001O\u0001P\u0004P\u0316\bP\u000b"+
|
||||
"P\fP\u0317\u0001Q\u0001Q\u0003Q\u031c\bQ\u0001R\u0001R\u0001R\u0001R\u0001"+
|
||||
"R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001"+
|
||||
"R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001"+
|
||||
"R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001"+
|
||||
"R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0001R\u0003R\u0348\bR\u0001"+
|
||||
"S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001S\u0001"+
|
||||
"S\u0003S\u0355\bS\u0001T\u0001T\u0001T\u0001U\u0001U\u0001V\u0001V\u0001"+
|
||||
"W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+
|
||||
"X\u0003X\u0369\bX\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001"+
|
||||
"[\u0001[\u0001\\\u0001\\\u0001]\u0001]\u0001^\u0001^\u0001_\u0001_\u0001"+
|
||||
"`\u0001`\u0001a\u0001a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001c\u0001"+
|
||||
"c\u0001c\u0001d\u0001d\u0001d\u0001e\u0001e\u0001e\u0001f\u0001f\u0001"+
|
||||
"f\u0001g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001"+
|
||||
"j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001l\u0001l\u0001l\u0001m\u0001"+
|
||||
"m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001o\u0001o\u0001o\u0001p\u0001"+
|
||||
"p\u0001p\u0001q\u0001q\u0001q\u0001r\u0001r\u0001r\u0001s\u0001s\u0001"+
|
||||
"s\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001v\u0001v\u0001v\u0001"+
|
||||
"v\u0001w\u0001w\u0001w\u0001w\u0001x\u0001x\u0001y\u0001y\u0001z\u0001"+
|
||||
"z\u0001{\u0001{\u0001|\u0001|\u0001}\u0001}\u0001~\u0001~\u0001\u007f"+
|
||||
"\u0001\u007f\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0082"+
|
||||
"\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0085"+
|
||||
"\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0087\u0001\u0087\u0005\u0087"+
|
||||
"\u03e7\b\u0087\n\u0087\f\u0087\u03ea\t\u0087\u0001\u0088\u0001\u0088\u0001"+
|
||||
"\u0089\u0001\u0089\u0000\u0000\u008a\u0001\u0000\u0003\u0001\u0005\u0000"+
|
||||
"\u0007\u0002\t\u0000\u000b\u0000\r\u0000\u000f\u0000\u0011\u0000\u0013"+
|
||||
"\u0003\u0015\u0004\u0017\u0005\u0019\u0006\u001b\u0007\u001d\b\u001f\t"+
|
||||
"!\n#\u000b%\f\'\r)\u000e+\u000f-\u0010/\u00111\u00123\u00135\u00147\u0015"+
|
||||
"9\u0016;\u0017=\u0018?\u0019A\u001aC\u001bE\u001cG\u001dI\u001eK\u001f"+
|
||||
"M O!Q\"S#U$W%Y&[\'](_)a*c+e,g-i.k/m0o1q2s3u4w5y\u0000{\u0000}\u0000\u007f"+
|
||||
"\u0000\u0081\u0000\u0083\u0000\u0085\u0000\u0087\u0000\u00896\u008b\u0000"+
|
||||
"\u008d\u0000\u008f\u0000\u0091\u0000\u0093\u0000\u0095\u0000\u0097\u0000"+
|
||||
"\u0099\u0000\u009b7\u009d\u0000\u009f8\u00a1\u0000\u00a3\u0000\u00a5\u0000"+
|
||||
"\u00a7\u0000\u00a9\u0000\u00ab\u0000\u00ad\u0000\u00af\u0000\u00b19\u00b3"+
|
||||
":\u00b5;\u00b7<\u00b9=\u00bb>\u00bd?\u00bf@\u00c1A\u00c3B\u00c5C\u00c7"+
|
||||
"D\u00c9E\u00cbF\u00cdG\u00cfH\u00d1I\u00d3J\u00d5K\u00d7L\u00d9M\u00db"+
|
||||
"N\u00ddO\u00dfP\u00e1Q\u00e3R\u00e5S\u00e7T\u00e9U\u00ebV\u00edW\u00ef"+
|
||||
"X\u00f1Y\u00f3Z\u00f5[\u00f7\\\u00f9]\u00fb^\u00fd_\u00ff`\u0101a\u0103"+
|
||||
"b\u0105c\u0107d\u0109e\u010bf\u010dg\u010fh\u0111\u0000\u0113\u0000\u0001"+
|
||||
"\u0000\u000f\u0003\u0000\t\t\f\f \u0002\u0000\n\n\r\r\u0002\u0000**^"+
|
||||
"^\u0003\u0000**//^^\u0002\u0000LLll\u0003\u000009AFaf\u0002\u0000EEee"+
|
||||
"\u0001\u000019\u0002\u0000++--\u0004\u0000DDFFddff\u0003\u0000\'\'\\\\"+
|
||||
"^^\u0001\u000007\u0001\u000003\u0004\u0000$$AZ__az\u0005\u0000$$09AZ_"+
|
||||
"_az\u03fd\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000"+
|
||||
"\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000"+
|
||||
"\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000"+
|
||||
"\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000"+
|
||||
"\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001\u0000\u0000"+
|
||||
"\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000\u0000\u0000"+
|
||||
"\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001"+
|
||||
"\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000"+
|
||||
"\u0000\u00001\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u0000"+
|
||||
"5\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001"+
|
||||
"\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000"+
|
||||
"\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000"+
|
||||
"C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001"+
|
||||
"\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000"+
|
||||
"\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000"+
|
||||
"Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001"+
|
||||
"\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000"+
|
||||
"\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000"+
|
||||
"_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000\u0000c\u0001"+
|
||||
"\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000\u0000g\u0001\u0000\u0000"+
|
||||
"\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k\u0001\u0000\u0000\u0000\u0000"+
|
||||
"m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000\u0000\u0000\u0000q\u0001"+
|
||||
"\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000\u0000u\u0001\u0000\u0000"+
|
||||
"\u0000\u0000w\u0001\u0000\u0000\u0000\u0000\u0089\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00b1\u0001\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00b5\u0001\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00b9\u0001\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00bd\u0001\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00c1\u0001\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00c5\u0001\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00c9\u0001\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00cd\u0001\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00d1\u0001\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00d5\u0001\u0000\u0000\u0000\u0000\u00d7\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00db\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00dd\u0001\u0000\u0000\u0000\u0000\u00df\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00e9\u0001\u0000\u0000\u0000\u0000\u00eb\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00ed\u0001\u0000\u0000\u0000\u0000\u00ef\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00f1\u0001\u0000\u0000\u0000\u0000\u00f3\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00f5\u0001\u0000\u0000\u0000\u0000\u00f7\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00f9\u0001\u0000\u0000\u0000\u0000\u00fb\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u00fd\u0001\u0000\u0000\u0000\u0000\u00ff\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u0101\u0001\u0000\u0000\u0000\u0000\u0103\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u0105\u0001\u0000\u0000\u0000\u0000\u0107\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u0109\u0001\u0000\u0000\u0000\u0000\u010b\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u010d\u0001\u0000\u0000\u0000\u0000\u010f\u0001\u0000\u0000\u0000"+
|
||||
"\u0001\u011a\u0001\u0000\u0000\u0000\u0003\u011e\u0001\u0000\u0000\u0000"+
|
||||
"\u0005\u0122\u0001\u0000\u0000\u0000\u0007\u0130\u0001\u0000\u0000\u0000"+
|
||||
"\t\u0134\u0001\u0000\u0000\u0000\u000b\u013d\u0001\u0000\u0000\u0000\r"+
|
||||
"\u0145\u0001\u0000\u0000\u0000\u000f\u0149\u0001\u0000\u0000\u0000\u0011"+
|
||||
"\u014d\u0001\u0000\u0000\u0000\u0013\u014f\u0001\u0000\u0000\u0000\u0015"+
|
||||
"\u0158\u0001\u0000\u0000\u0000\u0017\u015f\u0001\u0000\u0000\u0000\u0019"+
|
||||
"\u0167\u0001\u0000\u0000\u0000\u001b\u016d\u0001\u0000\u0000\u0000\u001d"+
|
||||
"\u0172\u0001\u0000\u0000\u0000\u001f\u0177\u0001\u0000\u0000\u0000!\u017d"+
|
||||
"\u0001\u0000\u0000\u0000#\u0182\u0001\u0000\u0000\u0000%\u0188\u0001\u0000"+
|
||||
"\u0000\u0000\'\u018e\u0001\u0000\u0000\u0000)\u0197\u0001\u0000\u0000"+
|
||||
"\u0000+\u019f\u0001\u0000\u0000\u0000-\u01a2\u0001\u0000\u0000\u0000/"+
|
||||
"\u01a9\u0001\u0000\u0000\u00001\u01ae\u0001\u0000\u0000\u00003\u01b6\u0001"+
|
||||
"\u0000\u0000\u00005\u01bc\u0001\u0000\u0000\u00007\u01c4\u0001\u0000\u0000"+
|
||||
"\u00009\u01ca\u0001\u0000\u0000\u0000;\u01ce\u0001\u0000\u0000\u0000="+
|
||||
"\u01d3\u0001\u0000\u0000\u0000?\u01d6\u0001\u0000\u0000\u0000A\u01e1\u0001"+
|
||||
"\u0000\u0000\u0000C\u01e8\u0001\u0000\u0000\u0000E\u01f3\u0001\u0000\u0000"+
|
||||
"\u0000G\u01f7\u0001\u0000\u0000\u0000I\u0201\u0001\u0000\u0000\u0000K"+
|
||||
"\u0206\u0001\u0000\u0000\u0000M\u020d\u0001\u0000\u0000\u0000O\u0211\u0001"+
|
||||
"\u0000\u0000\u0000Q\u0219\u0001\u0000\u0000\u0000S\u0221\u0001\u0000\u0000"+
|
||||
"\u0000U\u022b\u0001\u0000\u0000\u0000W\u0232\u0001\u0000\u0000\u0000Y"+
|
||||
"\u0239\u0001\u0000\u0000\u0000[\u023f\u0001\u0000\u0000\u0000]\u0246\u0001"+
|
||||
"\u0000\u0000\u0000_\u024f\u0001\u0000\u0000\u0000a\u0255\u0001\u0000\u0000"+
|
||||
"\u0000c\u025c\u0001\u0000\u0000\u0000e\u0269\u0001\u0000\u0000\u0000g"+
|
||||
"\u026e\u0001\u0000\u0000\u0000i\u0274\u0001\u0000\u0000\u0000k\u027b\u0001"+
|
||||
"\u0000\u0000\u0000m\u0285\u0001\u0000\u0000\u0000o\u0289\u0001\u0000\u0000"+
|
||||
"\u0000q\u028e\u0001\u0000\u0000\u0000s\u0297\u0001\u0000\u0000\u0000u"+
|
||||
"\u029d\u0001\u0000\u0000\u0000w\u02a2\u0001\u0000\u0000\u0000y\u02a4\u0001"+
|
||||
"\u0000\u0000\u0000{\u02a8\u0001\u0000\u0000\u0000}\u02ac\u0001\u0000\u0000"+
|
||||
"\u0000\u007f\u02b0\u0001\u0000\u0000\u0000\u0081\u02b7\u0001\u0000\u0000"+
|
||||
"\u0000\u0083\u02bf\u0001\u0000\u0000\u0000\u0085\u02c5\u0001\u0000\u0000"+
|
||||
"\u0000\u0087\u02c7\u0001\u0000\u0000\u0000\u0089\u02e7\u0001\u0000\u0000"+
|
||||
"\u0000\u008b\u02e9\u0001\u0000\u0000\u0000\u008d\u02ec\u0001\u0000\u0000"+
|
||||
"\u0000\u008f\u02ef\u0001\u0000\u0000\u0000\u0091\u02f4\u0001\u0000\u0000"+
|
||||
"\u0000\u0093\u02fa\u0001\u0000\u0000\u0000\u0095\u02fc\u0001\u0000\u0000"+
|
||||
"\u0000\u0097\u02fe\u0001\u0000\u0000\u0000\u0099\u0300\u0001\u0000\u0000"+
|
||||
"\u0000\u009b\u030a\u0001\u0000\u0000\u0000\u009d\u030c\u0001\u0000\u0000"+
|
||||
"\u0000\u009f\u030e\u0001\u0000\u0000\u0000\u00a1\u0315\u0001\u0000\u0000"+
|
||||
"\u0000\u00a3\u031b\u0001\u0000\u0000\u0000\u00a5\u031d\u0001\u0000\u0000"+
|
||||
"\u0000\u00a7\u0354\u0001\u0000\u0000\u0000\u00a9\u0356\u0001\u0000\u0000"+
|
||||
"\u0000\u00ab\u0359\u0001\u0000\u0000\u0000\u00ad\u035b\u0001\u0000\u0000"+
|
||||
"\u0000\u00af\u035d\u0001\u0000\u0000\u0000\u00b1\u0368\u0001\u0000\u0000"+
|
||||
"\u0000\u00b3\u036a\u0001\u0000\u0000\u0000\u00b5\u036f\u0001\u0000\u0000"+
|
||||
"\u0000\u00b7\u0371\u0001\u0000\u0000\u0000\u00b9\u0373\u0001\u0000\u0000"+
|
||||
"\u0000\u00bb\u0375\u0001\u0000\u0000\u0000\u00bd\u0377\u0001\u0000\u0000"+
|
||||
"\u0000\u00bf\u0379\u0001\u0000\u0000\u0000\u00c1\u037b\u0001\u0000\u0000"+
|
||||
"\u0000\u00c3\u037d\u0001\u0000\u0000\u0000\u00c5\u037f\u0001\u0000\u0000"+
|
||||
"\u0000\u00c7\u0384\u0001\u0000\u0000\u0000\u00c9\u0387\u0001\u0000\u0000"+
|
||||
"\u0000\u00cb\u038a\u0001\u0000\u0000\u0000\u00cd\u038d\u0001\u0000\u0000"+
|
||||
"\u0000\u00cf\u0390\u0001\u0000\u0000\u0000\u00d1\u0393\u0001\u0000\u0000"+
|
||||
"\u0000\u00d3\u0396\u0001\u0000\u0000\u0000\u00d5\u0399\u0001\u0000\u0000"+
|
||||
"\u0000\u00d7\u039c\u0001\u0000\u0000\u0000\u00d9\u039f\u0001\u0000\u0000"+
|
||||
"\u0000\u00db\u03a2\u0001\u0000\u0000\u0000\u00dd\u03a6\u0001\u0000\u0000"+
|
||||
"\u0000\u00df\u03a9\u0001\u0000\u0000\u0000\u00e1\u03ac\u0001\u0000\u0000"+
|
||||
"\u0000\u00e3\u03af\u0001\u0000\u0000\u0000\u00e5\u03b2\u0001\u0000\u0000"+
|
||||
"\u0000\u00e7\u03b5\u0001\u0000\u0000\u0000\u00e9\u03b8\u0001\u0000\u0000"+
|
||||
"\u0000\u00eb\u03bb\u0001\u0000\u0000\u0000\u00ed\u03be\u0001\u0000\u0000"+
|
||||
"\u0000\u00ef\u03c2\u0001\u0000\u0000\u0000\u00f1\u03c6\u0001\u0000\u0000"+
|
||||
"\u0000\u00f3\u03c8\u0001\u0000\u0000\u0000\u00f5\u03ca\u0001\u0000\u0000"+
|
||||
"\u0000\u00f7\u03cc\u0001\u0000\u0000\u0000\u00f9\u03ce\u0001\u0000\u0000"+
|
||||
"\u0000\u00fb\u03d0\u0001\u0000\u0000\u0000\u00fd\u03d2\u0001\u0000\u0000"+
|
||||
"\u0000\u00ff\u03d4\u0001\u0000\u0000\u0000\u0101\u03d6\u0001\u0000\u0000"+
|
||||
"\u0000\u0103\u03d8\u0001\u0000\u0000\u0000\u0105\u03da\u0001\u0000\u0000"+
|
||||
"\u0000\u0107\u03dc\u0001\u0000\u0000\u0000\u0109\u03de\u0001\u0000\u0000"+
|
||||
"\u0000\u010b\u03e0\u0001\u0000\u0000\u0000\u010d\u03e2\u0001\u0000\u0000"+
|
||||
"\u0000\u010f\u03e4\u0001\u0000\u0000\u0000\u0111\u03eb\u0001\u0000\u0000"+
|
||||
"\u0000\u0113\u03ed\u0001\u0000\u0000\u0000\u0115\u0117\u0005\r\u0000\u0000"+
|
||||
"\u0116\u0118\u0005\n\u0000\u0000\u0117\u0116\u0001\u0000\u0000\u0000\u0117"+
|
||||
"\u0118\u0001\u0000\u0000\u0000\u0118\u011b\u0001\u0000\u0000\u0000\u0119"+
|
||||
"\u011b\u0005\n\u0000\u0000\u011a\u0115\u0001\u0000\u0000\u0000\u011a\u0119"+
|
||||
"\u0001\u0000\u0000\u0000\u011b\u0002\u0001\u0000\u0000\u0000\u011c\u011f"+
|
||||
"\u0007\u0000\u0000\u0000\u011d\u011f\u0003\u0001\u0000\u0000\u011e\u011c"+
|
||||
"\u0001\u0000\u0000\u0000\u011e\u011d\u0001\u0000\u0000\u0000\u011f\u0120"+
|
||||
"\u0001\u0000\u0000\u0000\u0120\u0121\u0006\u0001\u0000\u0000\u0121\u0004"+
|
||||
"\u0001\u0000\u0000\u0000\u0122\u0123\u0005/\u0000\u0000\u0123\u0124\u0005"+
|
||||
"/\u0000\u0000\u0124\u0128\u0001\u0000\u0000\u0000\u0125\u0127\b\u0001"+
|
||||
"\u0000\u0000\u0126\u0125\u0001\u0000\u0000\u0000\u0127\u012a\u0001\u0000"+
|
||||
"\u0000\u0000\u0128\u0126\u0001\u0000\u0000\u0000\u0128\u0129\u0001\u0000"+
|
||||
"\u0000\u0000\u0129\u012c\u0001\u0000\u0000\u0000\u012a\u0128\u0001\u0000"+
|
||||
"\u0000\u0000\u012b\u012d\u0003\u0001\u0000\u0000\u012c\u012b\u0001\u0000"+
|
||||
"\u0000\u0000\u012c\u012d\u0001\u0000\u0000\u0000\u012d\u0006\u0001\u0000"+
|
||||
"\u0000\u0000\u012e\u0131\u0003\t\u0004\u0000\u012f\u0131\u0003\u0005\u0002"+
|
||||
"\u0000\u0130\u012e\u0001\u0000\u0000\u0000\u0130\u012f\u0001\u0000\u0000"+
|
||||
"\u0000\u0131\u0132\u0001\u0000\u0000\u0000\u0132\u0133\u0006\u0003\u0000"+
|
||||
"\u0000\u0133\b\u0001\u0000\u0000\u0000\u0134\u0135\u0005/\u0000\u0000"+
|
||||
"\u0135\u0136\u0005*\u0000\u0000\u0136\u0137\u0001\u0000\u0000\u0000\u0137"+
|
||||
"\u0138\u0003\u000f\u0007\u0000\u0138\u0139\u0003\u000b\u0005\u0000\u0139"+
|
||||
"\n\u0001\u0000\u0000\u0000\u013a\u013b\u0005*\u0000\u0000\u013b\u013e"+
|
||||
"\u0003\r\u0006\u0000\u013c\u013e\u0003\u000f\u0007\u0000\u013d\u013a\u0001"+
|
||||
"\u0000\u0000\u0000\u013d\u013c\u0001\u0000\u0000\u0000\u013e\f\u0001\u0000"+
|
||||
"\u0000\u0000\u013f\u0146\u0005/\u0000\u0000\u0140\u0141\u0005*\u0000\u0000"+
|
||||
"\u0141\u0146\u0003\r\u0006\u0000\u0142\u0143\u0003\u0011\b\u0000\u0143"+
|
||||
"\u0144\u0003\u000b\u0005\u0000\u0144\u0146\u0001\u0000\u0000\u0000\u0145"+
|
||||
"\u013f\u0001\u0000\u0000\u0000\u0145\u0140\u0001\u0000\u0000\u0000\u0145"+
|
||||
"\u0142\u0001\u0000\u0000\u0000\u0146\u000e\u0001\u0000\u0000\u0000\u0147"+
|
||||
"\u014a\u0007\u0002\u0000\u0000\u0148\u014a\u0003\u0001\u0000\u0000\u0149"+
|
||||
"\u0147\u0001\u0000\u0000\u0000\u0149\u0148\u0001\u0000\u0000\u0000\u014a"+
|
||||
"\u0010\u0001\u0000\u0000\u0000\u014b\u014e\u0007\u0003\u0000\u0000\u014c"+
|
||||
"\u014e\u0003\u0001\u0000\u0000\u014d\u014b\u0001\u0000\u0000\u0000\u014d"+
|
||||
"\u014c\u0001\u0000\u0000\u0000\u014e\u0012\u0001\u0000\u0000\u0000\u014f"+
|
||||
"\u0150\u0005a\u0000\u0000\u0150\u0151\u0005b\u0000\u0000\u0151\u0152\u0005"+
|
||||
"s\u0000\u0000\u0152\u0153\u0005t\u0000\u0000\u0153\u0154\u0005r\u0000"+
|
||||
"\u0000\u0154\u0155\u0005a\u0000\u0000\u0155\u0156\u0005c\u0000\u0000\u0156"+
|
||||
"\u0157\u0005t\u0000\u0000\u0157\u0014\u0001\u0000\u0000\u0000\u0158\u0159"+
|
||||
"\u0005a\u0000\u0000\u0159\u015a\u0005s\u0000\u0000\u015a\u015b\u0005s"+
|
||||
"\u0000\u0000\u015b\u015c\u0005e\u0000\u0000\u015c\u015d\u0005r\u0000\u0000"+
|
||||
"\u015d\u015e\u0005t\u0000\u0000\u015e\u0016\u0001\u0000\u0000\u0000\u015f"+
|
||||
"\u0160\u0005b\u0000\u0000\u0160\u0161\u0005o\u0000\u0000\u0161\u0162\u0005"+
|
||||
"o\u0000\u0000\u0162\u0163\u0005l\u0000\u0000\u0163\u0164\u0005e\u0000"+
|
||||
"\u0000\u0164\u0165\u0005a\u0000\u0000\u0165\u0166\u0005n\u0000\u0000\u0166"+
|
||||
"\u0018\u0001\u0000\u0000\u0000\u0167\u0168\u0005b\u0000\u0000\u0168\u0169"+
|
||||
"\u0005r\u0000\u0000\u0169\u016a\u0005e\u0000\u0000\u016a\u016b\u0005a"+
|
||||
"\u0000\u0000\u016b\u016c\u0005k\u0000\u0000\u016c\u001a\u0001\u0000\u0000"+
|
||||
"\u0000\u016d\u016e\u0005b\u0000\u0000\u016e\u016f\u0005y\u0000\u0000\u016f"+
|
||||
"\u0170\u0005t\u0000\u0000\u0170\u0171\u0005e\u0000\u0000\u0171\u001c\u0001"+
|
||||
"\u0000\u0000\u0000\u0172\u0173\u0005c\u0000\u0000\u0173\u0174\u0005a\u0000"+
|
||||
"\u0000\u0174\u0175\u0005s\u0000\u0000\u0175\u0176\u0005e\u0000\u0000\u0176"+
|
||||
"\u001e\u0001\u0000\u0000\u0000\u0177\u0178\u0005c\u0000\u0000\u0178\u0179"+
|
||||
"\u0005a\u0000\u0000\u0179\u017a\u0005t\u0000\u0000\u017a\u017b\u0005c"+
|
||||
"\u0000\u0000\u017b\u017c\u0005h\u0000\u0000\u017c \u0001\u0000\u0000\u0000"+
|
||||
"\u017d\u017e\u0005c\u0000\u0000\u017e\u017f\u0005h\u0000\u0000\u017f\u0180"+
|
||||
"\u0005a\u0000\u0000\u0180\u0181\u0005r\u0000\u0000\u0181\"\u0001\u0000"+
|
||||
"\u0000\u0000\u0182\u0183\u0005c\u0000\u0000\u0183\u0184\u0005l\u0000\u0000"+
|
||||
"\u0184\u0185\u0005a\u0000\u0000\u0185\u0186\u0005s\u0000\u0000\u0186\u0187"+
|
||||
"\u0005s\u0000\u0000\u0187$\u0001\u0000\u0000\u0000\u0188\u0189\u0005c"+
|
||||
"\u0000\u0000\u0189\u018a\u0005o\u0000\u0000\u018a\u018b\u0005n\u0000\u0000"+
|
||||
"\u018b\u018c\u0005s\u0000\u0000\u018c\u018d\u0005t\u0000\u0000\u018d&"+
|
||||
"\u0001\u0000\u0000\u0000\u018e\u018f\u0005c\u0000\u0000\u018f\u0190\u0005"+
|
||||
"o\u0000\u0000\u0190\u0191\u0005n\u0000\u0000\u0191\u0192\u0005t\u0000"+
|
||||
"\u0000\u0192\u0193\u0005i\u0000\u0000\u0193\u0194\u0005n\u0000\u0000\u0194"+
|
||||
"\u0195\u0005u\u0000\u0000\u0195\u0196\u0005e\u0000\u0000\u0196(\u0001"+
|
||||
"\u0000\u0000\u0000\u0197\u0198\u0005d\u0000\u0000\u0198\u0199\u0005e\u0000"+
|
||||
"\u0000\u0199\u019a\u0005f\u0000\u0000\u019a\u019b\u0005a\u0000\u0000\u019b"+
|
||||
"\u019c\u0005u\u0000\u0000\u019c\u019d\u0005l\u0000\u0000\u019d\u019e\u0005"+
|
||||
"t\u0000\u0000\u019e*\u0001\u0000\u0000\u0000\u019f\u01a0\u0005d\u0000"+
|
||||
"\u0000\u01a0\u01a1\u0005o\u0000\u0000\u01a1,\u0001\u0000\u0000\u0000\u01a2"+
|
||||
"\u01a3\u0005d\u0000\u0000\u01a3\u01a4\u0005o\u0000\u0000\u01a4\u01a5\u0005"+
|
||||
"u\u0000\u0000\u01a5\u01a6\u0005b\u0000\u0000\u01a6\u01a7\u0005l\u0000"+
|
||||
"\u0000\u01a7\u01a8\u0005e\u0000\u0000\u01a8.\u0001\u0000\u0000\u0000\u01a9"+
|
||||
"\u01aa\u0005e\u0000\u0000\u01aa\u01ab\u0005l\u0000\u0000\u01ab\u01ac\u0005"+
|
||||
"s\u0000\u0000\u01ac\u01ad\u0005e\u0000\u0000\u01ad0\u0001\u0000\u0000"+
|
||||
"\u0000\u01ae\u01af\u0005e\u0000\u0000\u01af\u01b0\u0005x\u0000\u0000\u01b0"+
|
||||
"\u01b1\u0005t\u0000\u0000\u01b1\u01b2\u0005e\u0000\u0000\u01b2\u01b3\u0005"+
|
||||
"n\u0000\u0000\u01b3\u01b4\u0005d\u0000\u0000\u01b4\u01b5\u0005s\u0000"+
|
||||
"\u0000\u01b52\u0001\u0000\u0000\u0000\u01b6\u01b7\u0005f\u0000\u0000\u01b7"+
|
||||
"\u01b8\u0005i\u0000\u0000\u01b8\u01b9\u0005n\u0000\u0000\u01b9\u01ba\u0005"+
|
||||
"a\u0000\u0000\u01ba\u01bb\u0005l\u0000\u0000\u01bb4\u0001\u0000\u0000"+
|
||||
"\u0000\u01bc\u01bd\u0005f\u0000\u0000\u01bd\u01be\u0005i\u0000\u0000\u01be"+
|
||||
"\u01bf\u0005n\u0000\u0000\u01bf\u01c0\u0005a\u0000\u0000\u01c0\u01c1\u0005"+
|
||||
"l\u0000\u0000\u01c1\u01c2\u0005l\u0000\u0000\u01c2\u01c3\u0005y\u0000"+
|
||||
"\u0000\u01c36\u0001\u0000\u0000\u0000\u01c4\u01c5\u0005f\u0000\u0000\u01c5"+
|
||||
"\u01c6\u0005l\u0000\u0000\u01c6\u01c7\u0005o\u0000\u0000\u01c7\u01c8\u0005"+
|
||||
"a\u0000\u0000\u01c8\u01c9\u0005t\u0000\u0000\u01c98\u0001\u0000\u0000"+
|
||||
"\u0000\u01ca\u01cb\u0005f\u0000\u0000\u01cb\u01cc\u0005o\u0000\u0000\u01cc"+
|
||||
"\u01cd\u0005r\u0000\u0000\u01cd:\u0001\u0000\u0000\u0000\u01ce\u01cf\u0005"+
|
||||
"g\u0000\u0000\u01cf\u01d0\u0005o\u0000\u0000\u01d0\u01d1\u0005t\u0000"+
|
||||
"\u0000\u01d1\u01d2\u0005o\u0000\u0000\u01d2<\u0001\u0000\u0000\u0000\u01d3"+
|
||||
"\u01d4\u0005i\u0000\u0000\u01d4\u01d5\u0005f\u0000\u0000\u01d5>\u0001"+
|
||||
"\u0000\u0000\u0000\u01d6\u01d7\u0005i\u0000\u0000\u01d7\u01d8\u0005m\u0000"+
|
||||
"\u0000\u01d8\u01d9\u0005p\u0000\u0000\u01d9\u01da\u0005l\u0000\u0000\u01da"+
|
||||
"\u01db\u0005e\u0000\u0000\u01db\u01dc\u0005m\u0000\u0000\u01dc\u01dd\u0005"+
|
||||
"e\u0000\u0000\u01dd\u01de\u0005n\u0000\u0000\u01de\u01df\u0005t\u0000"+
|
||||
"\u0000\u01df\u01e0\u0005s\u0000\u0000\u01e0@\u0001\u0000\u0000\u0000\u01e1"+
|
||||
"\u01e2\u0005i\u0000\u0000\u01e2\u01e3\u0005m\u0000\u0000\u01e3\u01e4\u0005"+
|
||||
"p\u0000\u0000\u01e4\u01e5\u0005o\u0000\u0000\u01e5\u01e6\u0005r\u0000"+
|
||||
"\u0000\u01e6\u01e7\u0005t\u0000\u0000\u01e7B\u0001\u0000\u0000\u0000\u01e8"+
|
||||
"\u01e9\u0005i\u0000\u0000\u01e9\u01ea\u0005n\u0000\u0000\u01ea\u01eb\u0005"+
|
||||
"s\u0000\u0000\u01eb\u01ec\u0005t\u0000\u0000\u01ec\u01ed\u0005a\u0000"+
|
||||
"\u0000\u01ed\u01ee\u0005n\u0000\u0000\u01ee\u01ef\u0005c\u0000\u0000\u01ef"+
|
||||
"\u01f0\u0005e\u0000\u0000\u01f0\u01f1\u0005o\u0000\u0000\u01f1\u01f2\u0005"+
|
||||
"f\u0000\u0000\u01f2D\u0001\u0000\u0000\u0000\u01f3\u01f4\u0005i\u0000"+
|
||||
"\u0000\u01f4\u01f5\u0005n\u0000\u0000\u01f5\u01f6\u0005t\u0000\u0000\u01f6"+
|
||||
"F\u0001\u0000\u0000\u0000\u01f7\u01f8\u0005i\u0000\u0000\u01f8\u01f9\u0005"+
|
||||
"n\u0000\u0000\u01f9\u01fa\u0005t\u0000\u0000\u01fa\u01fb\u0005e\u0000"+
|
||||
"\u0000\u01fb\u01fc\u0005r\u0000\u0000\u01fc\u01fd\u0005f\u0000\u0000\u01fd"+
|
||||
"\u01fe\u0005a\u0000\u0000\u01fe\u01ff\u0005c\u0000\u0000\u01ff\u0200\u0005"+
|
||||
"e\u0000\u0000\u0200H\u0001\u0000\u0000\u0000\u0201\u0202\u0005l\u0000"+
|
||||
"\u0000\u0202\u0203\u0005o\u0000\u0000\u0203\u0204\u0005n\u0000\u0000\u0204"+
|
||||
"\u0205\u0005g\u0000\u0000\u0205J\u0001\u0000\u0000\u0000\u0206\u0207\u0005"+
|
||||
"n\u0000\u0000\u0207\u0208\u0005a\u0000\u0000\u0208\u0209\u0005t\u0000"+
|
||||
"\u0000\u0209\u020a\u0005i\u0000\u0000\u020a\u020b\u0005v\u0000\u0000\u020b"+
|
||||
"\u020c\u0005e\u0000\u0000\u020cL\u0001\u0000\u0000\u0000\u020d\u020e\u0005"+
|
||||
"n\u0000\u0000\u020e\u020f\u0005e\u0000\u0000\u020f\u0210\u0005w\u0000"+
|
||||
"\u0000\u0210N\u0001\u0000\u0000\u0000\u0211\u0212\u0005p\u0000\u0000\u0212"+
|
||||
"\u0213\u0005a\u0000\u0000\u0213\u0214\u0005c\u0000\u0000\u0214\u0215\u0005"+
|
||||
"k\u0000\u0000\u0215\u0216\u0005a\u0000\u0000\u0216\u0217\u0005g\u0000"+
|
||||
"\u0000\u0217\u0218\u0005e\u0000\u0000\u0218P\u0001\u0000\u0000\u0000\u0219"+
|
||||
"\u021a\u0005p\u0000\u0000\u021a\u021b\u0005r\u0000\u0000\u021b\u021c\u0005"+
|
||||
"i\u0000\u0000\u021c\u021d\u0005v\u0000\u0000\u021d\u021e\u0005a\u0000"+
|
||||
"\u0000\u021e\u021f\u0005t\u0000\u0000\u021f\u0220\u0005e\u0000\u0000\u0220"+
|
||||
"R\u0001\u0000\u0000\u0000\u0221\u0222\u0005p\u0000\u0000\u0222\u0223\u0005"+
|
||||
"r\u0000\u0000\u0223\u0224\u0005o\u0000\u0000\u0224\u0225\u0005t\u0000"+
|
||||
"\u0000\u0225\u0226\u0005e\u0000\u0000\u0226\u0227\u0005c\u0000\u0000\u0227"+
|
||||
"\u0228\u0005t\u0000\u0000\u0228\u0229\u0005e\u0000\u0000\u0229\u022a\u0005"+
|
||||
"d\u0000\u0000\u022aT\u0001\u0000\u0000\u0000\u022b\u022c\u0005p\u0000"+
|
||||
"\u0000\u022c\u022d\u0005u\u0000\u0000\u022d\u022e\u0005b\u0000\u0000\u022e"+
|
||||
"\u022f\u0005l\u0000\u0000\u022f\u0230\u0005i\u0000\u0000\u0230\u0231\u0005"+
|
||||
"c\u0000\u0000\u0231V\u0001\u0000\u0000\u0000\u0232\u0233\u0005r\u0000"+
|
||||
"\u0000\u0233\u0234\u0005e\u0000\u0000\u0234\u0235\u0005t\u0000\u0000\u0235"+
|
||||
"\u0236\u0005u\u0000\u0000\u0236\u0237\u0005r\u0000\u0000\u0237\u0238\u0005"+
|
||||
"n\u0000\u0000\u0238X\u0001\u0000\u0000\u0000\u0239\u023a\u0005s\u0000"+
|
||||
"\u0000\u023a\u023b\u0005h\u0000\u0000\u023b\u023c\u0005o\u0000\u0000\u023c"+
|
||||
"\u023d\u0005r\u0000\u0000\u023d\u023e\u0005t\u0000\u0000\u023eZ\u0001"+
|
||||
"\u0000\u0000\u0000\u023f\u0240\u0005s\u0000\u0000\u0240\u0241\u0005t\u0000"+
|
||||
"\u0000\u0241\u0242\u0005a\u0000\u0000\u0242\u0243\u0005t\u0000\u0000\u0243"+
|
||||
"\u0244\u0005i\u0000\u0000\u0244\u0245\u0005c\u0000\u0000\u0245\\\u0001"+
|
||||
"\u0000\u0000\u0000\u0246\u0247\u0005s\u0000\u0000\u0247\u0248\u0005t\u0000"+
|
||||
"\u0000\u0248\u0249\u0005r\u0000\u0000\u0249\u024a\u0005i\u0000\u0000\u024a"+
|
||||
"\u024b\u0005c\u0000\u0000\u024b\u024c\u0005t\u0000\u0000\u024c\u024d\u0005"+
|
||||
"f\u0000\u0000\u024d\u024e\u0005p\u0000\u0000\u024e^\u0001\u0000\u0000"+
|
||||
"\u0000\u024f\u0250\u0005s\u0000\u0000\u0250\u0251\u0005u\u0000\u0000\u0251"+
|
||||
"\u0252\u0005p\u0000\u0000\u0252\u0253\u0005e\u0000\u0000\u0253\u0254\u0005"+
|
||||
"r\u0000\u0000\u0254`\u0001\u0000\u0000\u0000\u0255\u0256\u0005s\u0000"+
|
||||
"\u0000\u0256\u0257\u0005w\u0000\u0000\u0257\u0258\u0005i\u0000\u0000\u0258"+
|
||||
"\u0259\u0005t\u0000\u0000\u0259\u025a\u0005c\u0000\u0000\u025a\u025b\u0005"+
|
||||
"h\u0000\u0000\u025bb\u0001\u0000\u0000\u0000\u025c\u025d\u0005s\u0000"+
|
||||
"\u0000\u025d\u025e\u0005y\u0000\u0000\u025e\u025f\u0005n\u0000\u0000\u025f"+
|
||||
"\u0260\u0005c\u0000\u0000\u0260\u0261\u0005h\u0000\u0000\u0261\u0262\u0005"+
|
||||
"r\u0000\u0000\u0262\u0263\u0005o\u0000\u0000\u0263\u0264\u0005n\u0000"+
|
||||
"\u0000\u0264\u0265\u0005i\u0000\u0000\u0265\u0266\u0005z\u0000\u0000\u0266"+
|
||||
"\u0267\u0005e\u0000\u0000\u0267\u0268\u0005d\u0000\u0000\u0268d\u0001"+
|
||||
"\u0000\u0000\u0000\u0269\u026a\u0005t\u0000\u0000\u026a\u026b\u0005h\u0000"+
|
||||
"\u0000\u026b\u026c\u0005i\u0000\u0000\u026c\u026d\u0005s\u0000\u0000\u026d"+
|
||||
"f\u0001\u0000\u0000\u0000\u026e\u026f\u0005t\u0000\u0000\u026f\u0270\u0005"+
|
||||
"h\u0000\u0000\u0270\u0271\u0005r\u0000\u0000\u0271\u0272\u0005o\u0000"+
|
||||
"\u0000\u0272\u0273\u0005w\u0000\u0000\u0273h\u0001\u0000\u0000\u0000\u0274"+
|
||||
"\u0275\u0005t\u0000\u0000\u0275\u0276\u0005h\u0000\u0000\u0276\u0277\u0005"+
|
||||
"r\u0000\u0000\u0277\u0278\u0005o\u0000\u0000\u0278\u0279\u0005w\u0000"+
|
||||
"\u0000\u0279\u027a\u0005s\u0000\u0000\u027aj\u0001\u0000\u0000\u0000\u027b"+
|
||||
"\u027c\u0005t\u0000\u0000\u027c\u027d\u0005r\u0000\u0000\u027d\u027e\u0005"+
|
||||
"a\u0000\u0000\u027e\u027f\u0005n\u0000\u0000\u027f\u0280\u0005s\u0000"+
|
||||
"\u0000\u0280\u0281\u0005i\u0000\u0000\u0281\u0282\u0005e\u0000\u0000\u0282"+
|
||||
"\u0283\u0005n\u0000\u0000\u0283\u0284\u0005t\u0000\u0000\u0284l\u0001"+
|
||||
"\u0000\u0000\u0000\u0285\u0286\u0005t\u0000\u0000\u0286\u0287\u0005r\u0000"+
|
||||
"\u0000\u0287\u0288\u0005y\u0000\u0000\u0288n\u0001\u0000\u0000\u0000\u0289"+
|
||||
"\u028a\u0005v\u0000\u0000\u028a\u028b\u0005o\u0000\u0000\u028b\u028c\u0005"+
|
||||
"i\u0000\u0000\u028c\u028d\u0005d\u0000\u0000\u028dp\u0001\u0000\u0000"+
|
||||
"\u0000\u028e\u028f\u0005v\u0000\u0000\u028f\u0290\u0005o\u0000\u0000\u0290"+
|
||||
"\u0291\u0005l\u0000\u0000\u0291\u0292\u0005a\u0000\u0000\u0292\u0293\u0005"+
|
||||
"t\u0000\u0000\u0293\u0294\u0005i\u0000\u0000\u0294\u0295\u0005l\u0000"+
|
||||
"\u0000\u0295\u0296\u0005e\u0000\u0000\u0296r\u0001\u0000\u0000\u0000\u0297"+
|
||||
"\u0298\u0005w\u0000\u0000\u0298\u0299\u0005h\u0000\u0000\u0299\u029a\u0005"+
|
||||
"i\u0000\u0000\u029a\u029b\u0005l\u0000\u0000\u029b\u029c\u0005e\u0000"+
|
||||
"\u0000\u029ct\u0001\u0000\u0000\u0000\u029d\u029e\u0005.\u0000\u0000\u029e"+
|
||||
"v\u0001\u0000\u0000\u0000\u029f\u02a3\u0003y<\u0000\u02a0\u02a3\u0003"+
|
||||
"{=\u0000\u02a1\u02a3\u0003}>\u0000\u02a2\u029f\u0001\u0000\u0000\u0000"+
|
||||
"\u02a2\u02a0\u0001\u0000\u0000\u0000\u02a2\u02a1\u0001\u0000\u0000\u0000"+
|
||||
"\u02a3x\u0001\u0000\u0000\u0000\u02a4\u02a6\u0003\u0081@\u0000\u02a5\u02a7"+
|
||||
"\u0003\u007f?\u0000\u02a6\u02a5\u0001\u0000\u0000\u0000\u02a6\u02a7\u0001"+
|
||||
"\u0000\u0000\u0000\u02a7z\u0001\u0000\u0000\u0000\u02a8\u02aa\u0003\u0083"+
|
||||
"A\u0000\u02a9\u02ab\u0003\u007f?\u0000\u02aa\u02a9\u0001\u0000\u0000\u0000"+
|
||||
"\u02aa\u02ab\u0001\u0000\u0000\u0000\u02ab|\u0001\u0000\u0000\u0000\u02ac"+
|
||||
"\u02ae\u0003\u00a9T\u0000\u02ad\u02af\u0003\u007f?\u0000\u02ae\u02ad\u0001"+
|
||||
"\u0000\u0000\u0000\u02ae\u02af\u0001\u0000\u0000\u0000\u02af~\u0001\u0000"+
|
||||
"\u0000\u0000\u02b0\u02b1\u0007\u0004\u0000\u0000\u02b1\u0080\u0001\u0000"+
|
||||
"\u0000\u0000\u02b2\u02b8\u00050\u0000\u0000\u02b3\u02b5\u0003\u0095J\u0000"+
|
||||
"\u02b4\u02b6\u0003\u0091H\u0000\u02b5\u02b4\u0001\u0000\u0000\u0000\u02b5"+
|
||||
"\u02b6\u0001\u0000\u0000\u0000\u02b6\u02b8\u0001\u0000\u0000\u0000\u02b7"+
|
||||
"\u02b2\u0001\u0000\u0000\u0000\u02b7\u02b3\u0001\u0000\u0000\u0000\u02b8"+
|
||||
"\u0082\u0001\u0000\u0000\u0000\u02b9\u02ba\u00050\u0000\u0000\u02ba\u02bb"+
|
||||
"\u0005x\u0000\u0000\u02bb\u02c0\u0003\u0085B\u0000\u02bc\u02bd\u00050"+
|
||||
"\u0000\u0000\u02bd\u02be\u0005X\u0000\u0000\u02be\u02c0\u0003\u0085B\u0000"+
|
||||
"\u02bf\u02b9\u0001\u0000\u0000\u0000\u02bf\u02bc\u0001\u0000\u0000\u0000"+
|
||||
"\u02c0\u0084\u0001\u0000\u0000\u0000\u02c1\u02c6\u0003\u0087C\u0000\u02c2"+
|
||||
"\u02c3\u0003\u0087C\u0000\u02c3\u02c4\u0003\u0085B\u0000\u02c4\u02c6\u0001"+
|
||||
"\u0000\u0000\u0000\u02c5\u02c1\u0001\u0000\u0000\u0000\u02c5\u02c2\u0001"+
|
||||
"\u0000\u0000\u0000\u02c6\u0086\u0001\u0000\u0000\u0000\u02c7\u02c8\u0007"+
|
||||
"\u0005\u0000\u0000\u02c8\u0088\u0001\u0000\u0000\u0000\u02c9\u02ca\u0003"+
|
||||
"\u0091H\u0000\u02ca\u02cc\u0005.\u0000\u0000\u02cb\u02cd\u0003\u0091H"+
|
||||
"\u0000\u02cc\u02cb\u0001\u0000\u0000\u0000\u02cc\u02cd\u0001\u0000\u0000"+
|
||||
"\u0000\u02cd\u02cf\u0001\u0000\u0000\u0000\u02ce\u02d0\u0003\u008bE\u0000"+
|
||||
"\u02cf\u02ce\u0001\u0000\u0000\u0000\u02cf\u02d0\u0001\u0000\u0000\u0000"+
|
||||
"\u02d0\u02d2\u0001\u0000\u0000\u0000\u02d1\u02d3\u0003\u0099L\u0000\u02d2"+
|
||||
"\u02d1\u0001\u0000\u0000\u0000\u02d2\u02d3\u0001\u0000\u0000\u0000\u02d3"+
|
||||
"\u02e8\u0001\u0000\u0000\u0000\u02d4\u02d5\u0005.\u0000\u0000\u02d5\u02d7"+
|
||||
"\u0003\u0091H\u0000\u02d6\u02d8\u0003\u008bE\u0000\u02d7\u02d6\u0001\u0000"+
|
||||
"\u0000\u0000\u02d7\u02d8\u0001\u0000\u0000\u0000\u02d8\u02da\u0001\u0000"+
|
||||
"\u0000\u0000\u02d9\u02db\u0003\u0099L\u0000\u02da\u02d9\u0001\u0000\u0000"+
|
||||
"\u0000\u02da\u02db\u0001\u0000\u0000\u0000\u02db\u02e8\u0001\u0000\u0000"+
|
||||
"\u0000\u02dc\u02dd\u0003\u0091H\u0000\u02dd\u02df\u0003\u008bE\u0000\u02de"+
|
||||
"\u02e0\u0003\u0099L\u0000\u02df\u02de\u0001\u0000\u0000\u0000\u02df\u02e0"+
|
||||
"\u0001\u0000\u0000\u0000\u02e0\u02e8\u0001\u0000\u0000\u0000\u02e1\u02e3"+
|
||||
"\u0003\u0091H\u0000\u02e2\u02e4\u0003\u008bE\u0000\u02e3\u02e2\u0001\u0000"+
|
||||
"\u0000\u0000\u02e3\u02e4\u0001\u0000\u0000\u0000\u02e4\u02e5\u0001\u0000"+
|
||||
"\u0000\u0000\u02e5\u02e6\u0003\u0099L\u0000\u02e6\u02e8\u0001\u0000\u0000"+
|
||||
"\u0000\u02e7\u02c9\u0001\u0000\u0000\u0000\u02e7\u02d4\u0001\u0000\u0000"+
|
||||
"\u0000\u02e7\u02dc\u0001\u0000\u0000\u0000\u02e7\u02e1\u0001\u0000\u0000"+
|
||||
"\u0000\u02e8\u008a\u0001\u0000\u0000\u0000\u02e9\u02ea\u0003\u008dF\u0000"+
|
||||
"\u02ea\u02eb\u0003\u008fG\u0000\u02eb\u008c\u0001\u0000\u0000\u0000\u02ec"+
|
||||
"\u02ed\u0007\u0006\u0000\u0000\u02ed\u008e\u0001\u0000\u0000\u0000\u02ee"+
|
||||
"\u02f0\u0003\u0097K\u0000\u02ef\u02ee\u0001\u0000\u0000\u0000\u02ef\u02f0"+
|
||||
"\u0001\u0000\u0000\u0000\u02f0\u02f1\u0001\u0000\u0000\u0000\u02f1\u02f2"+
|
||||
"\u0003\u0091H\u0000\u02f2\u0090\u0001\u0000\u0000\u0000\u02f3\u02f5\u0003"+
|
||||
"\u0093I\u0000\u02f4\u02f3\u0001\u0000\u0000\u0000\u02f5\u02f6\u0001\u0000"+
|
||||
"\u0000\u0000\u02f6\u02f4\u0001\u0000\u0000\u0000\u02f6\u02f7\u0001\u0000"+
|
||||
"\u0000\u0000\u02f7\u0092\u0001\u0000\u0000\u0000\u02f8\u02fb\u00050\u0000"+
|
||||
"\u0000\u02f9\u02fb\u0003\u0095J\u0000\u02fa\u02f8\u0001\u0000\u0000\u0000"+
|
||||
"\u02fa\u02f9\u0001\u0000\u0000\u0000\u02fb\u0094\u0001\u0000\u0000\u0000"+
|
||||
"\u02fc\u02fd\u0007\u0007\u0000\u0000\u02fd\u0096\u0001\u0000\u0000\u0000"+
|
||||
"\u02fe\u02ff\u0007\b\u0000\u0000\u02ff\u0098\u0001\u0000\u0000\u0000\u0300"+
|
||||
"\u0301\u0007\t\u0000\u0000\u0301\u009a\u0001\u0000\u0000\u0000\u0302\u0303"+
|
||||
"\u0005\'\u0000\u0000\u0303\u0304\u0003\u009dN\u0000\u0304\u0305\u0005"+
|
||||
"\'\u0000\u0000\u0305\u030b\u0001\u0000\u0000\u0000\u0306\u0307\u0005\'"+
|
||||
"\u0000\u0000\u0307\u0308\u0003\u00a5R\u0000\u0308\u0309\u0005\'\u0000"+
|
||||
"\u0000\u0309\u030b\u0001\u0000\u0000\u0000\u030a\u0302\u0001\u0000\u0000"+
|
||||
"\u0000\u030a\u0306\u0001\u0000\u0000\u0000\u030b\u009c\u0001\u0000\u0000"+
|
||||
"\u0000\u030c\u030d\u0007\n\u0000\u0000\u030d\u009e\u0001\u0000\u0000\u0000"+
|
||||
"\u030e\u0310\u0005\"\u0000\u0000\u030f\u0311\u0003\u00a1P\u0000\u0310"+
|
||||
"\u030f\u0001\u0000\u0000\u0000\u0310\u0311\u0001\u0000\u0000\u0000\u0311"+
|
||||
"\u0312\u0001\u0000\u0000\u0000\u0312\u0313\u0005\"\u0000\u0000\u0313\u00a0"+
|
||||
"\u0001\u0000\u0000\u0000\u0314\u0316\u0003\u00a3Q\u0000\u0315\u0314\u0001"+
|
||||
"\u0000\u0000\u0000\u0316\u0317\u0001\u0000\u0000\u0000\u0317\u0315\u0001"+
|
||||
"\u0000\u0000\u0000\u0317\u0318\u0001\u0000\u0000\u0000\u0318\u00a2\u0001"+
|
||||
"\u0000\u0000\u0000\u0319\u031c\u0003\u009dN\u0000\u031a\u031c\u0003\u00a5"+
|
||||
"R\u0000\u031b\u0319\u0001\u0000\u0000\u0000\u031b\u031a\u0001\u0000\u0000"+
|
||||
"\u0000\u031c\u00a4\u0001\u0000\u0000\u0000\u031d\u0347\u0005\\\u0000\u0000"+
|
||||
"\u031e\u031f\u0005u\u0000\u0000\u031f\u0320\u00050\u0000\u0000\u0320\u0321"+
|
||||
"\u00050\u0000\u0000\u0321\u0322\u00050\u0000\u0000\u0322\u0348\u00058"+
|
||||
"\u0000\u0000\u0323\u0324\u0005u\u0000\u0000\u0324\u0325\u00050\u0000\u0000"+
|
||||
"\u0325\u0326\u00050\u0000\u0000\u0326\u0327\u00050\u0000\u0000\u0327\u0348"+
|
||||
"\u00059\u0000\u0000\u0328\u0329\u0005u\u0000\u0000\u0329\u032a\u00050"+
|
||||
"\u0000\u0000\u032a\u032b\u00050\u0000\u0000\u032b\u032c\u00050\u0000\u0000"+
|
||||
"\u032c\u0348\u0005a\u0000\u0000\u032d\u032e\u0005u\u0000\u0000\u032e\u032f"+
|
||||
"\u00050\u0000\u0000\u032f\u0330\u00050\u0000\u0000\u0330\u0331\u00050"+
|
||||
"\u0000\u0000\u0331\u0348\u0005c\u0000\u0000\u0332\u0333\u0005u\u0000\u0000"+
|
||||
"\u0333\u0334\u00050\u0000\u0000\u0334\u0335\u00050\u0000\u0000\u0335\u0336"+
|
||||
"\u00050\u0000\u0000\u0336\u0348\u0005d\u0000\u0000\u0337\u0338\u0005u"+
|
||||
"\u0000\u0000\u0338\u0339\u00050\u0000\u0000\u0339\u033a\u00050\u0000\u0000"+
|
||||
"\u033a\u033b\u00052\u0000\u0000\u033b\u0348\u00052\u0000\u0000\u033c\u033d"+
|
||||
"\u0005u\u0000\u0000\u033d\u033e\u00050\u0000\u0000\u033e\u033f\u00050"+
|
||||
"\u0000\u0000\u033f\u0340\u00052\u0000\u0000\u0340\u0348\u00057\u0000\u0000"+
|
||||
"\u0341\u0342\u0005u\u0000\u0000\u0342\u0343\u00050\u0000\u0000\u0343\u0344"+
|
||||
"\u00050\u0000\u0000\u0344\u0345\u00055\u0000\u0000\u0345\u0348\u0005c"+
|
||||
"\u0000\u0000\u0346\u0348\u0003\u00a7S\u0000\u0347\u031e\u0001\u0000\u0000"+
|
||||
"\u0000\u0347\u0323\u0001\u0000\u0000\u0000\u0347\u0328\u0001\u0000\u0000"+
|
||||
"\u0000\u0347\u032d\u0001\u0000\u0000\u0000\u0347\u0332\u0001\u0000\u0000"+
|
||||
"\u0000\u0347\u0337\u0001\u0000\u0000\u0000\u0347\u033c\u0001\u0000\u0000"+
|
||||
"\u0000\u0347\u0341\u0001\u0000\u0000\u0000\u0347\u0346\u0001\u0000\u0000"+
|
||||
"\u0000\u0348\u00a6\u0001\u0000\u0000\u0000\u0349\u034a\u0005\\\u0000\u0000"+
|
||||
"\u034a\u0355\u0003\u00adV\u0000\u034b\u034c\u0005\\\u0000\u0000\u034c"+
|
||||
"\u034d\u0003\u00adV\u0000\u034d\u034e\u0003\u00adV\u0000\u034e\u0355\u0001"+
|
||||
"\u0000\u0000\u0000\u034f\u0350\u0005\\\u0000\u0000\u0350\u0351\u0003\u00af"+
|
||||
"W\u0000\u0351\u0352\u0003\u00adV\u0000\u0352\u0353\u0003\u00adV\u0000"+
|
||||
"\u0353\u0355\u0001\u0000\u0000\u0000\u0354\u0349\u0001\u0000\u0000\u0000"+
|
||||
"\u0354\u034b\u0001\u0000\u0000\u0000\u0354\u034f\u0001\u0000\u0000\u0000"+
|
||||
"\u0355\u00a8\u0001\u0000\u0000\u0000\u0356\u0357\u00050\u0000\u0000\u0357"+
|
||||
"\u0358\u0003\u00abU\u0000\u0358\u00aa\u0001\u0000\u0000\u0000\u0359\u035a"+
|
||||
"\u0003\u00adV\u0000\u035a\u00ac\u0001\u0000\u0000\u0000\u035b\u035c\u0007"+
|
||||
"\u000b\u0000\u0000\u035c\u00ae\u0001\u0000\u0000\u0000\u035d\u035e\u0007"+
|
||||
"\f\u0000\u0000\u035e\u00b0\u0001\u0000\u0000\u0000\u035f\u0360\u0005t"+
|
||||
"\u0000\u0000\u0360\u0361\u0005r\u0000\u0000\u0361\u0362\u0005u\u0000\u0000"+
|
||||
"\u0362\u0369\u0005e\u0000\u0000\u0363\u0364\u0005f\u0000\u0000\u0364\u0365"+
|
||||
"\u0005a\u0000\u0000\u0365\u0366\u0005l\u0000\u0000\u0366\u0367\u0005s"+
|
||||
"\u0000\u0000\u0367\u0369\u0005e\u0000\u0000\u0368\u035f\u0001\u0000\u0000"+
|
||||
"\u0000\u0368\u0363\u0001\u0000\u0000\u0000\u0369\u00b2\u0001\u0000\u0000"+
|
||||
"\u0000\u036a\u036b\u0005n\u0000\u0000\u036b\u036c\u0005u\u0000\u0000\u036c"+
|
||||
"\u036d\u0005l\u0000\u0000\u036d\u036e\u0005l\u0000\u0000\u036e\u00b4\u0001"+
|
||||
"\u0000\u0000\u0000\u036f\u0370\u0005(\u0000\u0000\u0370\u00b6\u0001\u0000"+
|
||||
"\u0000\u0000\u0371\u0372\u0005)\u0000\u0000\u0372\u00b8\u0001\u0000\u0000"+
|
||||
"\u0000\u0373\u0374\u0005{\u0000\u0000\u0374\u00ba\u0001\u0000\u0000\u0000"+
|
||||
"\u0375\u0376\u0005}\u0000\u0000\u0376\u00bc\u0001\u0000\u0000\u0000\u0377"+
|
||||
"\u0378\u0005[\u0000\u0000\u0378\u00be\u0001\u0000\u0000\u0000\u0379\u037a"+
|
||||
"\u0005]\u0000\u0000\u037a\u00c0\u0001\u0000\u0000\u0000\u037b\u037c\u0005"+
|
||||
";\u0000\u0000\u037c\u00c2\u0001\u0000\u0000\u0000\u037d\u037e\u0005,\u0000"+
|
||||
"\u0000\u037e\u00c4\u0001\u0000\u0000\u0000\u037f\u0380\u0005>\u0000\u0000"+
|
||||
"\u0380\u0381\u0005>\u0000\u0000\u0381\u0382\u0005>\u0000\u0000\u0382\u0383"+
|
||||
"\u0005=\u0000\u0000\u0383\u00c6\u0001\u0000\u0000\u0000\u0384\u0385\u0005"+
|
||||
"=\u0000\u0000\u0385\u0386\u0005=\u0000\u0000\u0386\u00c8\u0001\u0000\u0000"+
|
||||
"\u0000\u0387\u0388\u0005!\u0000\u0000\u0388\u0389\u0005=\u0000\u0000\u0389"+
|
||||
"\u00ca\u0001\u0000\u0000\u0000\u038a\u038b\u0005<\u0000\u0000\u038b\u038c"+
|
||||
"\u0005=\u0000\u0000\u038c\u00cc\u0001\u0000\u0000\u0000\u038d\u038e\u0005"+
|
||||
">\u0000\u0000\u038e\u038f\u0005=\u0000\u0000\u038f\u00ce\u0001\u0000\u0000"+
|
||||
"\u0000\u0390\u0391\u0005&\u0000\u0000\u0391\u0392\u0005&\u0000\u0000\u0392"+
|
||||
"\u00d0\u0001\u0000\u0000\u0000\u0393\u0394\u0005|\u0000\u0000\u0394\u0395"+
|
||||
"\u0005|\u0000\u0000\u0395\u00d2\u0001\u0000\u0000\u0000\u0396\u0397\u0005"+
|
||||
"+\u0000\u0000\u0397\u0398\u0005+\u0000\u0000\u0398\u00d4\u0001\u0000\u0000"+
|
||||
"\u0000\u0399\u039a\u0005-\u0000\u0000\u039a\u039b\u0005-\u0000\u0000\u039b"+
|
||||
"\u00d6\u0001\u0000\u0000\u0000\u039c\u039d\u0005<\u0000\u0000\u039d\u039e"+
|
||||
"\u0005<\u0000\u0000\u039e\u00d8\u0001\u0000\u0000\u0000\u039f\u03a0\u0005"+
|
||||
">\u0000\u0000\u03a0\u03a1\u0005>\u0000\u0000\u03a1\u00da\u0001\u0000\u0000"+
|
||||
"\u0000\u03a2\u03a3\u0005>\u0000\u0000\u03a3\u03a4\u0005>\u0000\u0000\u03a4"+
|
||||
"\u03a5\u0005>\u0000\u0000\u03a5\u00dc\u0001\u0000\u0000\u0000\u03a6\u03a7"+
|
||||
"\u0005+\u0000\u0000\u03a7\u03a8\u0005=\u0000\u0000\u03a8\u00de\u0001\u0000"+
|
||||
"\u0000\u0000\u03a9\u03aa\u0005-\u0000\u0000\u03aa\u03ab\u0005=\u0000\u0000"+
|
||||
"\u03ab\u00e0\u0001\u0000\u0000\u0000\u03ac\u03ad\u0005*\u0000\u0000\u03ad"+
|
||||
"\u03ae\u0005=\u0000\u0000\u03ae\u00e2\u0001\u0000\u0000\u0000\u03af\u03b0"+
|
||||
"\u0005/\u0000\u0000\u03b0\u03b1\u0005=\u0000\u0000\u03b1\u00e4\u0001\u0000"+
|
||||
"\u0000\u0000\u03b2\u03b3\u0005&\u0000\u0000\u03b3\u03b4\u0005=\u0000\u0000"+
|
||||
"\u03b4\u00e6\u0001\u0000\u0000\u0000\u03b5\u03b6\u0005|\u0000\u0000\u03b6"+
|
||||
"\u03b7\u0005=\u0000\u0000\u03b7\u00e8\u0001\u0000\u0000\u0000\u03b8\u03b9"+
|
||||
"\u0005^\u0000\u0000\u03b9\u03ba\u0005=\u0000\u0000\u03ba\u00ea\u0001\u0000"+
|
||||
"\u0000\u0000\u03bb\u03bc\u0005%\u0000\u0000\u03bc\u03bd\u0005=\u0000\u0000"+
|
||||
"\u03bd\u00ec\u0001\u0000\u0000\u0000\u03be\u03bf\u0005<\u0000\u0000\u03bf"+
|
||||
"\u03c0\u0005<\u0000\u0000\u03c0\u03c1\u0005=\u0000\u0000\u03c1\u00ee\u0001"+
|
||||
"\u0000\u0000\u0000\u03c2\u03c3\u0005>\u0000\u0000\u03c3\u03c4\u0005>\u0000"+
|
||||
"\u0000\u03c4\u03c5\u0005=\u0000\u0000\u03c5\u00f0\u0001\u0000\u0000\u0000"+
|
||||
"\u03c6\u03c7\u0005=\u0000\u0000\u03c7\u00f2\u0001\u0000\u0000\u0000\u03c8"+
|
||||
"\u03c9\u0005~\u0000\u0000\u03c9\u00f4\u0001\u0000\u0000\u0000\u03ca\u03cb"+
|
||||
"\u0005<\u0000\u0000\u03cb\u00f6\u0001\u0000\u0000\u0000\u03cc\u03cd\u0005"+
|
||||
">\u0000\u0000\u03cd\u00f8\u0001\u0000\u0000\u0000\u03ce\u03cf\u0005!\u0000"+
|
||||
"\u0000\u03cf\u00fa\u0001\u0000\u0000\u0000\u03d0\u03d1\u0005?\u0000\u0000"+
|
||||
"\u03d1\u00fc\u0001\u0000\u0000\u0000\u03d2\u03d3\u0005:\u0000\u0000\u03d3"+
|
||||
"\u00fe\u0001\u0000\u0000\u0000\u03d4\u03d5\u0005+\u0000\u0000\u03d5\u0100"+
|
||||
"\u0001\u0000\u0000\u0000\u03d6\u03d7\u0005-\u0000\u0000\u03d7\u0102\u0001"+
|
||||
"\u0000\u0000\u0000\u03d8\u03d9\u0005*\u0000\u0000\u03d9\u0104\u0001\u0000"+
|
||||
"\u0000\u0000\u03da\u03db\u0005/\u0000\u0000\u03db\u0106\u0001\u0000\u0000"+
|
||||
"\u0000\u03dc\u03dd\u0005&\u0000\u0000\u03dd\u0108\u0001\u0000\u0000\u0000"+
|
||||
"\u03de\u03df\u0005|\u0000\u0000\u03df\u010a\u0001\u0000\u0000\u0000\u03e0"+
|
||||
"\u03e1\u0005^\u0000\u0000\u03e1\u010c\u0001\u0000\u0000\u0000\u03e2\u03e3"+
|
||||
"\u0005%\u0000\u0000\u03e3\u010e\u0001\u0000\u0000\u0000\u03e4\u03e8\u0003"+
|
||||
"\u0111\u0088\u0000\u03e5\u03e7\u0003\u0113\u0089\u0000\u03e6\u03e5\u0001"+
|
||||
"\u0000\u0000\u0000\u03e7\u03ea\u0001\u0000\u0000\u0000\u03e8\u03e6\u0001"+
|
||||
"\u0000\u0000\u0000\u03e8\u03e9\u0001\u0000\u0000\u0000\u03e9\u0110\u0001"+
|
||||
"\u0000\u0000\u0000\u03ea\u03e8\u0001\u0000\u0000\u0000\u03eb\u03ec\u0007"+
|
||||
"\r\u0000\u0000\u03ec\u0112\u0001\u0000\u0000\u0000\u03ed\u03ee\u0007\u000e"+
|
||||
"\u0000\u0000\u03ee\u0114\u0001\u0000\u0000\u0000&\u0000\u0117\u011a\u011e"+
|
||||
"\u0128\u012c\u0130\u013d\u0145\u0149\u014d\u02a2\u02a6\u02aa\u02ae\u02b5"+
|
||||
"\u02b7\u02bf\u02c5\u02cc\u02cf\u02d2\u02d7\u02da\u02df\u02e3\u02e7\u02ef"+
|
||||
"\u02f6\u02fa\u030a\u0310\u0317\u031b\u0347\u0354\u0368\u03e8\u0001\u0006"+
|
||||
"\u0000\u0000";
|
||||
public static final ATN _ATN =
|
||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||
static {
|
||||
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
|
||||
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
|
||||
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
|
||||
}
|
||||
}
|
||||
}
|
||||
200
.antlr/ExprLexer.tokens
Normal file
200
.antlr/ExprLexer.tokens
Normal file
@@ -0,0 +1,200 @@
|
||||
WhiteSpace=1
|
||||
Comment=2
|
||||
Abstract=3
|
||||
Assert=4
|
||||
Boolean=5
|
||||
Break=6
|
||||
Byte=7
|
||||
Case=8
|
||||
Catch=9
|
||||
Char=10
|
||||
Class=11
|
||||
Const=12
|
||||
Continue=13
|
||||
Default=14
|
||||
Do=15
|
||||
Double=16
|
||||
Else=17
|
||||
Extends=18
|
||||
Final=19
|
||||
Finally=20
|
||||
Float=21
|
||||
For=22
|
||||
Goto=23
|
||||
If=24
|
||||
Implements=25
|
||||
Import=26
|
||||
InstanceOf=27
|
||||
Int=28
|
||||
Interface=29
|
||||
Long=30
|
||||
Native=31
|
||||
New=32
|
||||
Package=33
|
||||
Private=34
|
||||
Protected=35
|
||||
Public=36
|
||||
Return=37
|
||||
Short=38
|
||||
Static=39
|
||||
Strictfp=40
|
||||
Super=41
|
||||
Switch=42
|
||||
Synchronized=43
|
||||
This=44
|
||||
Throw=45
|
||||
Throws=46
|
||||
Transient=47
|
||||
Try=48
|
||||
Void=49
|
||||
Volatile=50
|
||||
While=51
|
||||
Dot=52
|
||||
IntegerLiteral=53
|
||||
FloatingPointLiteral=54
|
||||
CharacterLiteral=55
|
||||
StringLiteral=56
|
||||
BooleanLiteral=57
|
||||
NullLiteral=58
|
||||
ParenthesesLeft=59
|
||||
ParenthesesRight=60
|
||||
CurlyBracketLeft=61
|
||||
CurlyBracketRight=62
|
||||
SquareBracketLeft=63
|
||||
SquareBracketRight=64
|
||||
Semicolon=65
|
||||
Comma=66
|
||||
UnsignedRightShiftAssign=67
|
||||
EqualTo=68
|
||||
NotEqualTo=69
|
||||
LessThanEqualTo=70
|
||||
GreaterThanEqualTo=71
|
||||
ConditionalAND=72
|
||||
ConditionalOR=73
|
||||
Increment=74
|
||||
Decrement=75
|
||||
LeftShift=76
|
||||
SignedRightShift=77
|
||||
UnsignedRightShift=78
|
||||
AddAssign=79
|
||||
SubtractAssign=80
|
||||
MultiplyAssign=81
|
||||
DivideAssign=82
|
||||
BitwiseANDAssign=83
|
||||
BitwiseORAssign=84
|
||||
BitwiseXORAssign=85
|
||||
RemainderAssign=86
|
||||
LeftShiftAssign=87
|
||||
SignedRightShiftAssign=88
|
||||
Assignment=89
|
||||
BitwiseComplement=90
|
||||
LessThan=91
|
||||
GreaterThan=92
|
||||
LogicalComplement=93
|
||||
Question=94
|
||||
Colon=95
|
||||
Addition=96
|
||||
Subtraction=97
|
||||
Multiplication=98
|
||||
Division=99
|
||||
BitwiseAND=100
|
||||
BitwiseOR=101
|
||||
BitwiseXOR=102
|
||||
Remainder=103
|
||||
IDENTIFIER=104
|
||||
'abstract'=3
|
||||
'assert'=4
|
||||
'boolean'=5
|
||||
'break'=6
|
||||
'byte'=7
|
||||
'case'=8
|
||||
'catch'=9
|
||||
'char'=10
|
||||
'class'=11
|
||||
'const'=12
|
||||
'continue'=13
|
||||
'default'=14
|
||||
'do'=15
|
||||
'double'=16
|
||||
'else'=17
|
||||
'extends'=18
|
||||
'final'=19
|
||||
'finally'=20
|
||||
'float'=21
|
||||
'for'=22
|
||||
'goto'=23
|
||||
'if'=24
|
||||
'implements'=25
|
||||
'import'=26
|
||||
'instanceof'=27
|
||||
'int'=28
|
||||
'interface'=29
|
||||
'long'=30
|
||||
'native'=31
|
||||
'new'=32
|
||||
'package'=33
|
||||
'private'=34
|
||||
'protected'=35
|
||||
'public'=36
|
||||
'return'=37
|
||||
'short'=38
|
||||
'static'=39
|
||||
'strictfp'=40
|
||||
'super'=41
|
||||
'switch'=42
|
||||
'synchronized'=43
|
||||
'this'=44
|
||||
'throw'=45
|
||||
'throws'=46
|
||||
'transient'=47
|
||||
'try'=48
|
||||
'void'=49
|
||||
'volatile'=50
|
||||
'while'=51
|
||||
'.'=52
|
||||
'null'=58
|
||||
'('=59
|
||||
')'=60
|
||||
'{'=61
|
||||
'}'=62
|
||||
'['=63
|
||||
']'=64
|
||||
';'=65
|
||||
','=66
|
||||
'>>>='=67
|
||||
'=='=68
|
||||
'!='=69
|
||||
'<='=70
|
||||
'>='=71
|
||||
'&&'=72
|
||||
'||'=73
|
||||
'++'=74
|
||||
'--'=75
|
||||
'<<'=76
|
||||
'>>'=77
|
||||
'>>>'=78
|
||||
'+='=79
|
||||
'-='=80
|
||||
'*='=81
|
||||
'/='=82
|
||||
'&='=83
|
||||
'|='=84
|
||||
'^='=85
|
||||
'%='=86
|
||||
'<<='=87
|
||||
'>>='=88
|
||||
'='=89
|
||||
'~'=90
|
||||
'<'=91
|
||||
'>'=92
|
||||
'!'=93
|
||||
'?'=94
|
||||
':'=95
|
||||
'+'=96
|
||||
'-'=97
|
||||
'*'=98
|
||||
'/'=99
|
||||
'&'=100
|
||||
'|'=101
|
||||
'^'=102
|
||||
'%'=103
|
||||
303
.antlr/ExprParser.interp
Normal file
303
.antlr/ExprParser.interp
Normal file
File diff suppressed because one or more lines are too long
6063
.antlr/ExprParser.java
Normal file
6063
.antlr/ExprParser.java
Normal file
File diff suppressed because it is too large
Load Diff
200
.antlr/ExprParser.tokens
Normal file
200
.antlr/ExprParser.tokens
Normal file
@@ -0,0 +1,200 @@
|
||||
WhiteSpace=1
|
||||
Comment=2
|
||||
Abstract=3
|
||||
Assert=4
|
||||
Boolean=5
|
||||
Break=6
|
||||
Byte=7
|
||||
Case=8
|
||||
Catch=9
|
||||
Char=10
|
||||
Class=11
|
||||
Const=12
|
||||
Continue=13
|
||||
Default=14
|
||||
Do=15
|
||||
Double=16
|
||||
Else=17
|
||||
Extends=18
|
||||
Final=19
|
||||
Finally=20
|
||||
Float=21
|
||||
For=22
|
||||
Goto=23
|
||||
If=24
|
||||
Implements=25
|
||||
Import=26
|
||||
InstanceOf=27
|
||||
Int=28
|
||||
Interface=29
|
||||
Long=30
|
||||
Native=31
|
||||
New=32
|
||||
Package=33
|
||||
Private=34
|
||||
Protected=35
|
||||
Public=36
|
||||
Return=37
|
||||
Short=38
|
||||
Static=39
|
||||
Strictfp=40
|
||||
Super=41
|
||||
Switch=42
|
||||
Synchronized=43
|
||||
This=44
|
||||
Throw=45
|
||||
Throws=46
|
||||
Transient=47
|
||||
Try=48
|
||||
Void=49
|
||||
Volatile=50
|
||||
While=51
|
||||
Dot=52
|
||||
IntegerLiteral=53
|
||||
FloatingPointLiteral=54
|
||||
CharacterLiteral=55
|
||||
StringLiteral=56
|
||||
BooleanLiteral=57
|
||||
NullLiteral=58
|
||||
ParenthesesLeft=59
|
||||
ParenthesesRight=60
|
||||
CurlyBracketLeft=61
|
||||
CurlyBracketRight=62
|
||||
SquareBracketLeft=63
|
||||
SquareBracketRight=64
|
||||
Semicolon=65
|
||||
Comma=66
|
||||
UnsignedRightShiftAssign=67
|
||||
EqualTo=68
|
||||
NotEqualTo=69
|
||||
LessThanEqualTo=70
|
||||
GreaterThanEqualTo=71
|
||||
ConditionalAND=72
|
||||
ConditionalOR=73
|
||||
Increment=74
|
||||
Decrement=75
|
||||
LeftShift=76
|
||||
SignedRightShift=77
|
||||
UnsignedRightShift=78
|
||||
AddAssign=79
|
||||
SubtractAssign=80
|
||||
MultiplyAssign=81
|
||||
DivideAssign=82
|
||||
BitwiseANDAssign=83
|
||||
BitwiseORAssign=84
|
||||
BitwiseXORAssign=85
|
||||
RemainderAssign=86
|
||||
LeftShiftAssign=87
|
||||
SignedRightShiftAssign=88
|
||||
Assignment=89
|
||||
BitwiseComplement=90
|
||||
LessThan=91
|
||||
GreaterThan=92
|
||||
LogicalComplement=93
|
||||
Question=94
|
||||
Colon=95
|
||||
Addition=96
|
||||
Subtraction=97
|
||||
Multiplication=98
|
||||
Division=99
|
||||
BitwiseAND=100
|
||||
BitwiseOR=101
|
||||
BitwiseXOR=102
|
||||
Remainder=103
|
||||
IDENTIFIER=104
|
||||
'abstract'=3
|
||||
'assert'=4
|
||||
'boolean'=5
|
||||
'break'=6
|
||||
'byte'=7
|
||||
'case'=8
|
||||
'catch'=9
|
||||
'char'=10
|
||||
'class'=11
|
||||
'const'=12
|
||||
'continue'=13
|
||||
'default'=14
|
||||
'do'=15
|
||||
'double'=16
|
||||
'else'=17
|
||||
'extends'=18
|
||||
'final'=19
|
||||
'finally'=20
|
||||
'float'=21
|
||||
'for'=22
|
||||
'goto'=23
|
||||
'if'=24
|
||||
'implements'=25
|
||||
'import'=26
|
||||
'instanceof'=27
|
||||
'int'=28
|
||||
'interface'=29
|
||||
'long'=30
|
||||
'native'=31
|
||||
'new'=32
|
||||
'package'=33
|
||||
'private'=34
|
||||
'protected'=35
|
||||
'public'=36
|
||||
'return'=37
|
||||
'short'=38
|
||||
'static'=39
|
||||
'strictfp'=40
|
||||
'super'=41
|
||||
'switch'=42
|
||||
'synchronized'=43
|
||||
'this'=44
|
||||
'throw'=45
|
||||
'throws'=46
|
||||
'transient'=47
|
||||
'try'=48
|
||||
'void'=49
|
||||
'volatile'=50
|
||||
'while'=51
|
||||
'.'=52
|
||||
'null'=58
|
||||
'('=59
|
||||
')'=60
|
||||
'{'=61
|
||||
'}'=62
|
||||
'['=63
|
||||
']'=64
|
||||
';'=65
|
||||
','=66
|
||||
'>>>='=67
|
||||
'=='=68
|
||||
'!='=69
|
||||
'<='=70
|
||||
'>='=71
|
||||
'&&'=72
|
||||
'||'=73
|
||||
'++'=74
|
||||
'--'=75
|
||||
'<<'=76
|
||||
'>>'=77
|
||||
'>>>'=78
|
||||
'+='=79
|
||||
'-='=80
|
||||
'*='=81
|
||||
'/='=82
|
||||
'&='=83
|
||||
'|='=84
|
||||
'^='=85
|
||||
'%='=86
|
||||
'<<='=87
|
||||
'>>='=88
|
||||
'='=89
|
||||
'~'=90
|
||||
'<'=91
|
||||
'>'=92
|
||||
'!'=93
|
||||
'?'=94
|
||||
':'=95
|
||||
'+'=96
|
||||
'-'=97
|
||||
'*'=98
|
||||
'/'=99
|
||||
'&'=100
|
||||
'|'=101
|
||||
'^'=102
|
||||
'%'=103
|
||||
303
.antlr/ExprSyntactic.interp
Normal file
303
.antlr/ExprSyntactic.interp
Normal file
File diff suppressed because one or more lines are too long
6063
.antlr/ExprSyntactic.java
Normal file
6063
.antlr/ExprSyntactic.java
Normal file
File diff suppressed because it is too large
Load Diff
200
.antlr/ExprSyntactic.tokens
Normal file
200
.antlr/ExprSyntactic.tokens
Normal file
@@ -0,0 +1,200 @@
|
||||
WhiteSpace=1
|
||||
Comment=2
|
||||
Abstract=3
|
||||
Assert=4
|
||||
Boolean=5
|
||||
Break=6
|
||||
Byte=7
|
||||
Case=8
|
||||
Catch=9
|
||||
Char=10
|
||||
Class=11
|
||||
Const=12
|
||||
Continue=13
|
||||
Default=14
|
||||
Do=15
|
||||
Double=16
|
||||
Else=17
|
||||
Extends=18
|
||||
Final=19
|
||||
Finally=20
|
||||
Float=21
|
||||
For=22
|
||||
Goto=23
|
||||
If=24
|
||||
Implements=25
|
||||
Import=26
|
||||
InstanceOf=27
|
||||
Int=28
|
||||
Interface=29
|
||||
Long=30
|
||||
Native=31
|
||||
New=32
|
||||
Package=33
|
||||
Private=34
|
||||
Protected=35
|
||||
Public=36
|
||||
Return=37
|
||||
Short=38
|
||||
Static=39
|
||||
Strictfp=40
|
||||
Super=41
|
||||
Switch=42
|
||||
Synchronized=43
|
||||
This=44
|
||||
Throw=45
|
||||
Throws=46
|
||||
Transient=47
|
||||
Try=48
|
||||
Void=49
|
||||
Volatile=50
|
||||
While=51
|
||||
Dot=52
|
||||
IntegerLiteral=53
|
||||
FloatingPointLiteral=54
|
||||
CharacterLiteral=55
|
||||
StringLiteral=56
|
||||
BooleanLiteral=57
|
||||
NullLiteral=58
|
||||
ParenthesesLeft=59
|
||||
ParenthesesRight=60
|
||||
CurlyBracketLeft=61
|
||||
CurlyBracketRight=62
|
||||
SquareBracketLeft=63
|
||||
SquareBracketRight=64
|
||||
Semicolon=65
|
||||
Comma=66
|
||||
UnsignedRightShiftAssign=67
|
||||
EqualTo=68
|
||||
NotEqualTo=69
|
||||
LessThanEqualTo=70
|
||||
GreaterThanEqualTo=71
|
||||
ConditionalAND=72
|
||||
ConditionalOR=73
|
||||
Increment=74
|
||||
Decrement=75
|
||||
LeftShift=76
|
||||
SignedRightShift=77
|
||||
UnsignedRightShift=78
|
||||
AddAssign=79
|
||||
SubtractAssign=80
|
||||
MultiplyAssign=81
|
||||
DivideAssign=82
|
||||
BitwiseANDAssign=83
|
||||
BitwiseORAssign=84
|
||||
BitwiseXORAssign=85
|
||||
RemainderAssign=86
|
||||
LeftShiftAssign=87
|
||||
SignedRightShiftAssign=88
|
||||
Assignment=89
|
||||
BitwiseComplement=90
|
||||
LessThan=91
|
||||
GreaterThan=92
|
||||
LogicalComplement=93
|
||||
Question=94
|
||||
Colon=95
|
||||
Addition=96
|
||||
Subtraction=97
|
||||
Multiplication=98
|
||||
Division=99
|
||||
BitwiseAND=100
|
||||
BitwiseOR=101
|
||||
BitwiseXOR=102
|
||||
Remainder=103
|
||||
IDENTIFIER=104
|
||||
'abstract'=3
|
||||
'assert'=4
|
||||
'boolean'=5
|
||||
'break'=6
|
||||
'byte'=7
|
||||
'case'=8
|
||||
'catch'=9
|
||||
'char'=10
|
||||
'class'=11
|
||||
'const'=12
|
||||
'continue'=13
|
||||
'default'=14
|
||||
'do'=15
|
||||
'double'=16
|
||||
'else'=17
|
||||
'extends'=18
|
||||
'final'=19
|
||||
'finally'=20
|
||||
'float'=21
|
||||
'for'=22
|
||||
'goto'=23
|
||||
'if'=24
|
||||
'implements'=25
|
||||
'import'=26
|
||||
'instanceof'=27
|
||||
'int'=28
|
||||
'interface'=29
|
||||
'long'=30
|
||||
'native'=31
|
||||
'new'=32
|
||||
'package'=33
|
||||
'private'=34
|
||||
'protected'=35
|
||||
'public'=36
|
||||
'return'=37
|
||||
'short'=38
|
||||
'static'=39
|
||||
'strictfp'=40
|
||||
'super'=41
|
||||
'switch'=42
|
||||
'synchronized'=43
|
||||
'this'=44
|
||||
'throw'=45
|
||||
'throws'=46
|
||||
'transient'=47
|
||||
'try'=48
|
||||
'void'=49
|
||||
'volatile'=50
|
||||
'while'=51
|
||||
'.'=52
|
||||
'null'=58
|
||||
'('=59
|
||||
')'=60
|
||||
'{'=61
|
||||
'}'=62
|
||||
'['=63
|
||||
']'=64
|
||||
';'=65
|
||||
','=66
|
||||
'>>>='=67
|
||||
'=='=68
|
||||
'!='=69
|
||||
'<='=70
|
||||
'>='=71
|
||||
'&&'=72
|
||||
'||'=73
|
||||
'++'=74
|
||||
'--'=75
|
||||
'<<'=76
|
||||
'>>'=77
|
||||
'>>>'=78
|
||||
'+='=79
|
||||
'-='=80
|
||||
'*='=81
|
||||
'/='=82
|
||||
'&='=83
|
||||
'|='=84
|
||||
'^='=85
|
||||
'%='=86
|
||||
'<<='=87
|
||||
'>>='=88
|
||||
'='=89
|
||||
'~'=90
|
||||
'<'=91
|
||||
'>'=92
|
||||
'!'=93
|
||||
'?'=94
|
||||
':'=95
|
||||
'+'=96
|
||||
'-'=97
|
||||
'*'=98
|
||||
'/'=99
|
||||
'&'=100
|
||||
'|'=101
|
||||
'^'=102
|
||||
'%'=103
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
/bin
|
||||
.vscode/
|
||||
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
9
.idea/CPSC-499.iml
generated
Normal file
9
.idea/CPSC-499.iml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
4
.idea/misc.xml
generated
Normal file
4
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="corretto-1.8" project-jdk-type="JavaSDK" />
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/CPSC-499.iml" filepath="$PROJECT_DIR$/.idea/CPSC-499.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
230
ExprLexer.g4
Normal file
230
ExprLexer.g4
Normal file
@@ -0,0 +1,230 @@
|
||||
lexer grammar ExprLexer;
|
||||
|
||||
// LINE TERMINATORS -----------------------------------------------------------------------------------------------------------------------
|
||||
fragment LineTerminator: '\r' '\n'? | '\n';
|
||||
|
||||
//WHITE SPACE ----------------------------------------------------------------------------------------------------------------------------------------
|
||||
WhiteSpace: (' ' | '\t' | '\f' | LineTerminator) -> skip;
|
||||
|
||||
//COMMENTS --------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
fragment EndOfLineComment: '//' ~('\r' | '\n')* LineTerminator?;
|
||||
|
||||
|
||||
Comment: (TraditionalComment | EndOfLineComment) -> skip;
|
||||
|
||||
fragment TraditionalComment:
|
||||
'/*' NotStar CommentTail;
|
||||
|
||||
fragment CommentTail: '*' CommentTailStar | NotStar ;
|
||||
|
||||
fragment CommentTailStar:
|
||||
'/' | '*' CommentTailStar | NotStarNotSlash CommentTail;
|
||||
|
||||
fragment NotStar:
|
||||
[^*] | LineTerminator;
|
||||
|
||||
fragment NotStarNotSlash:
|
||||
[^*/] | LineTerminator;
|
||||
|
||||
// KEYWORDS --------------------------------------------------------------------------------------------------------
|
||||
Abstract: 'abstract';
|
||||
Assert: 'assert';
|
||||
Boolean: 'boolean';
|
||||
Break: 'break';
|
||||
Byte: 'byte';
|
||||
Case: 'case';
|
||||
Catch: 'catch';
|
||||
Char: 'char';
|
||||
Class: 'class';
|
||||
Const: 'const';
|
||||
Continue: 'continue';
|
||||
Default: 'default';
|
||||
Do: 'do';
|
||||
Double: 'double';
|
||||
Else: 'else';
|
||||
Extends: 'extends';
|
||||
Final: 'final';
|
||||
Finally: 'finally';
|
||||
Float: 'float';
|
||||
For: 'for';
|
||||
Goto: 'goto';
|
||||
If: 'if';
|
||||
Implements: 'implements';
|
||||
Import: 'import';
|
||||
InstanceOf: 'instanceof';
|
||||
Int: 'int';
|
||||
Interface: 'interface';
|
||||
Long: 'long';
|
||||
Native: 'native';
|
||||
New: 'new';
|
||||
Package: 'package';
|
||||
Private: 'private';
|
||||
Protected: 'protected';
|
||||
Public: 'public';
|
||||
Return: 'return';
|
||||
Short: 'short';
|
||||
Static: 'static';
|
||||
Strictfp: 'strictfp';
|
||||
Super: 'super';
|
||||
Switch: 'switch';
|
||||
Synchronized: 'synchronized';
|
||||
This: 'this';
|
||||
Throw: 'throw';
|
||||
Throws: 'throws';
|
||||
Transient: 'transient';
|
||||
Try: 'try';
|
||||
Void: 'void';
|
||||
Volatile: 'volatile';
|
||||
While: 'while';
|
||||
|
||||
Dot: '.';
|
||||
// LITERALS -------------------------------------------------------------------------------------------------------------------
|
||||
IntegerLiteral: DecimalIntegerLiteral | HexIntegerLiteral | OctalIntegerLiteral;
|
||||
|
||||
fragment DecimalIntegerLiteral:
|
||||
DecimalNumeral IntegerTypeSuffix?;
|
||||
|
||||
fragment HexIntegerLiteral:
|
||||
HexNumeral IntegerTypeSuffix?;
|
||||
|
||||
fragment OctalIntegerLiteral:
|
||||
OctalNumeral IntegerTypeSuffix?;
|
||||
|
||||
fragment IntegerTypeSuffix:
|
||||
[lL];
|
||||
|
||||
fragment DecimalNumeral:
|
||||
'0' | NonZeroDigit Digits?;
|
||||
|
||||
fragment HexNumeral:
|
||||
'0' 'x' HexDigits | '0' 'X' HexDigits;
|
||||
|
||||
fragment HexDigits:
|
||||
HexDigit | HexDigit HexDigits;
|
||||
|
||||
fragment HexDigit:
|
||||
[0-9a-fA-F];
|
||||
|
||||
FloatingPointLiteral: Digits '.' Digits? ExponentPart? FloatTypeSuffix?
|
||||
| '.' Digits ExponentPart? FloatTypeSuffix?
|
||||
| Digits ExponentPart FloatTypeSuffix?
|
||||
| Digits ExponentPart? FloatTypeSuffix;
|
||||
|
||||
fragment ExponentPart:
|
||||
ExponentIndicator SignedInteger;
|
||||
|
||||
fragment ExponentIndicator:
|
||||
[eE];
|
||||
|
||||
fragment SignedInteger:
|
||||
Sign? Digits;
|
||||
|
||||
fragment Digits:
|
||||
Digit+;
|
||||
|
||||
fragment Digit:
|
||||
'0' | NonZeroDigit;
|
||||
|
||||
fragment NonZeroDigit:
|
||||
[1-9];
|
||||
|
||||
fragment Sign:
|
||||
[+-];
|
||||
|
||||
fragment FloatTypeSuffix:
|
||||
[fFdD];
|
||||
|
||||
CharacterLiteral: '\'' SingleCharacter '\'' | '\'' EscapeSequence '\'';
|
||||
|
||||
fragment SingleCharacter:
|
||||
[^'\\];
|
||||
|
||||
StringLiteral: '"' StringCharacters? '"';
|
||||
|
||||
fragment StringCharacters:
|
||||
StringCharacter+;
|
||||
|
||||
fragment StringCharacter:
|
||||
SingleCharacter | EscapeSequence;
|
||||
|
||||
fragment EscapeSequence:
|
||||
'\\' ('u0008' | 'u0009' | 'u000a' | 'u000c' | 'u000d' | 'u0022' | 'u0027' | 'u005c' | OctalEscape);
|
||||
|
||||
fragment OctalEscape:
|
||||
'\\' OctalDigit | '\\' OctalDigit OctalDigit | '\\' ZeroToThree OctalDigit OctalDigit;
|
||||
|
||||
fragment OctalNumeral:
|
||||
'0' OctalDigits;
|
||||
|
||||
fragment OctalDigits:
|
||||
OctalDigit;
|
||||
|
||||
fragment OctalDigit:
|
||||
[0-7];
|
||||
|
||||
fragment ZeroToThree:
|
||||
[0-3];
|
||||
|
||||
BooleanLiteral: 'true' | 'false' ;
|
||||
|
||||
NullLiteral: 'null';
|
||||
|
||||
//SEPRATORS -------------------------------------------------------------------------------------------------------------------------
|
||||
ParenthesesLeft: '(';
|
||||
ParenthesesRight: ')';
|
||||
CurlyBracketLeft: '{';
|
||||
CurlyBracketRight: '}';
|
||||
SquareBracketLeft: '[';
|
||||
SquareBracketRight: ']';
|
||||
Semicolon: ';';
|
||||
Comma: ',';
|
||||
|
||||
|
||||
//OPERATORS ---------------------------------------------------------------------------------------------------------------------------------------
|
||||
UnsignedRightShiftAssign: '>>>=';
|
||||
EqualTo: '==';
|
||||
NotEqualTo: '!=';
|
||||
LessThanEqualTo: '<=';
|
||||
GreaterThanEqualTo: '>=';
|
||||
ConditionalAND: '&&';
|
||||
ConditionalOR: '||';
|
||||
Increment: '++';
|
||||
Decrement: '--';
|
||||
LeftShift: '<<';
|
||||
SignedRightShift: '>>';
|
||||
UnsignedRightShift: '>>>';
|
||||
AddAssign: '+=';
|
||||
SubtractAssign: '-=';
|
||||
MultiplyAssign: '*=';
|
||||
DivideAssign: '/=';
|
||||
BitwiseANDAssign: '&=';
|
||||
BitwiseORAssign: '|=';
|
||||
BitwiseXORAssign: '^=';
|
||||
RemainderAssign: '%=';
|
||||
LeftShiftAssign: '<<=';
|
||||
SignedRightShiftAssign: '>>=';
|
||||
Assignment: '=';
|
||||
BitwiseComplement: '~';
|
||||
LessThan: '<';
|
||||
GreaterThan: '>';
|
||||
LogicalComplement: '!';
|
||||
Question: '?';
|
||||
Colon: ':';
|
||||
Addition: '+';
|
||||
Subtraction: '-';
|
||||
Multiplication: '*';
|
||||
Division: '/';
|
||||
BitwiseAND: '&';
|
||||
BitwiseOR: '|';
|
||||
BitwiseXOR: '^';
|
||||
Remainder: '%';
|
||||
|
||||
|
||||
//IDENTIFIERS -------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
IDENTIFIER: JavaLetter JavaLetterOrDigit*;
|
||||
fragment JavaLetter:
|
||||
[a-zA-Z$_];
|
||||
|
||||
fragment JavaLetterOrDigit:
|
||||
[A-Za-z0-9$_];
|
||||
248
ExprParser.g4
Normal file
248
ExprParser.g4
Normal file
@@ -0,0 +1,248 @@
|
||||
parser grammar ExprParser;
|
||||
|
||||
options {
|
||||
tokenVocab=ExprLexer;
|
||||
}
|
||||
prog: compilationUnit EOF;
|
||||
identifier: IDENTIFIER;
|
||||
|
||||
qualifiedIdentifier: identifier (Dot identifier)*;
|
||||
|
||||
literal: IntegerLiteral
|
||||
| FloatingPointLiteral
|
||||
| CharacterLiteral
|
||||
| StringLiteral
|
||||
| BooleanLiteral
|
||||
| NullLiteral;
|
||||
//Section 15.26: Assignment Operators
|
||||
expression: unaryExpr assignmentOperator expression | conditionalExpr ;
|
||||
|
||||
//Highest Prescedence _Expr = expression
|
||||
//CI cha 6
|
||||
conditionalExpr: logicalOrExpr Question conditionalExpr Colon conditionalExpr | logicalOrExpr;
|
||||
|
||||
logicalOrExpr: logicalAndExpr (ConditionalOR logicalAndExpr)*;
|
||||
|
||||
logicalAndExpr: equalityExpr (ConditionalAND equalityExpr)*;
|
||||
|
||||
equalityExpr: relationalExpr ((EqualTo | NotEqualTo) relationalExpr)*;
|
||||
|
||||
relationalExpr: additiveExpr((LessThan | GreaterThan | LessThanEqualTo | GreaterThanEqualTo) additiveExpr | InstanceOf type)*;
|
||||
|
||||
additiveExpr: multiplicativeExpr((Addition | Subtraction) multiplicativeExpr)*;
|
||||
multiplicativeExpr: unaryExpr((Multiplication | Division | Remainder) unaryExpr)*;
|
||||
|
||||
unaryExpr:postfixExpr |(Addition | Subtraction | LogicalComplement | BitwiseComplement | Increment | Decrement) unaryExpr | parExpression type unaryExpr;
|
||||
|
||||
postfixExpr: primaryExpr (Increment| Decrement| Dot IDENTIFIER | SquareBracketLeft expression SquareBracketRight | arguments)*;
|
||||
|
||||
primaryExpr: parExpression
|
||||
| IntegerLiteral
|
||||
| FloatingPointLiteral
|
||||
| StringLiteral
|
||||
| CharacterLiteral
|
||||
| BooleanLiteral
|
||||
| NullLiteral
|
||||
| IDENTIFIER
|
||||
| This
|
||||
| Super (Dot IDENTIFIER)?
|
||||
| New type arguments
|
||||
| primitiveType (SquareBracketLeft SquareBracketRight)* Dot Class
|
||||
| type Dot Class;
|
||||
|
||||
|
||||
assignmentOperator: Assignment
|
||||
| AddAssign
|
||||
| SubtractAssign
|
||||
| MultiplyAssign
|
||||
| DivideAssign
|
||||
| BitwiseANDAssign
|
||||
| BitwiseORAssign
|
||||
| BitwiseXORAssign
|
||||
| RemainderAssign
|
||||
| LeftShiftAssign
|
||||
| SignedRightShiftAssign
|
||||
| UnsignedRightShiftAssign;
|
||||
|
||||
type: identifier (Dot identifier)* bracketsOpt | primitiveType;
|
||||
|
||||
statementExpression: expression;
|
||||
|
||||
constantExpression: expression;
|
||||
|
||||
identifierSuffix: SquareBracketLeft SquareBracketRight bracketsOpt Dot Class
|
||||
|SquareBracketLeft expression SquareBracketRight
|
||||
|arguments
|
||||
|Dot (Class | This | Super arguments New innerCreator);
|
||||
|
||||
postfixOp: Increment | Decrement;
|
||||
|
||||
primitiveType: Byte | Short| Char | Int| Long| Float| Double| Boolean;
|
||||
//Method arguments
|
||||
argumentsOpt: (arguments)?;
|
||||
|
||||
arguments: ParenthesesLeft (expression (Comma expression)*)? ParenthesesRight;
|
||||
|
||||
bracketsOpt: (SquareBracketLeft SquareBracketRight)*;
|
||||
|
||||
creator: qualifiedIdentifier ( arrayCreatorRest | classCreatorRest);
|
||||
|
||||
innerCreator: identifier classCreatorRest;
|
||||
|
||||
arrayCreatorRest: SquareBracketLeft SquareBracketRight bracketsOpt arrayInitializer
|
||||
| SquareBracketLeft expression SquareBracketRight (SquareBracketLeft expression SquareBracketRight)*;
|
||||
classCreatorRest: arguments (classBody)?;
|
||||
|
||||
arrayInitializer: CurlyBracketLeft (variableInitializer(Comma variableInitializer)*(Comma)?)? CurlyBracketRight;
|
||||
|
||||
variableInitializer: arrayInitializer
|
||||
|expression;
|
||||
|
||||
parExpression: ParenthesesLeft expression ParenthesesRight;
|
||||
|
||||
block: CurlyBracketLeft blockStatements CurlyBracketRight;
|
||||
|
||||
blockStatements: (blockStatement)*;
|
||||
|
||||
blockStatement: localVariableDeclarationStatement
|
||||
|classOrInterfaceDeclaration
|
||||
|(identifier Colon)? statement;
|
||||
|
||||
localVariableDeclarationStatement: (Final)? type variableDeclarators;
|
||||
|
||||
statement:completeIf | If parExpression statementIncompleteIf;
|
||||
|
||||
statementIncompleteIf: block
|
||||
| If parExpression completeIf Else statementIncompleteIf
|
||||
| For ParenthesesLeft forInit? Semicolon (expression)? Semicolon forUpdate? ParenthesesRight statement
|
||||
| While parExpression statement
|
||||
| Do statement While parExpression Semicolon
|
||||
| Try block catches
|
||||
| Try block Finally block
|
||||
| Try block catches Finally block
|
||||
| switchStatement
|
||||
| Synchronized parExpression block
|
||||
| Return (expression)? Semicolon
|
||||
| Throw expression Semicolon
|
||||
| Break (identifier)? Semicolon
|
||||
| Continue (identifier)? Semicolon
|
||||
| statementExpression Semicolon
|
||||
| Semicolon;
|
||||
//solve ambiguity over If()else. aka (Dangling else).
|
||||
//this will do the longest check by looking for an else section, fincding the closest else!
|
||||
completeIf: If parExpression completeIf Else completeIf | statementIncompleteIf;
|
||||
|
||||
catches: catchClause (catchClause)*;
|
||||
|
||||
catchClause: Catch ParenthesesLeft formalParameter ParenthesesRight block;
|
||||
|
||||
switchStatement: Switch parExpression CurlyBracketLeft CurlyBracketRight
|
||||
| Switch parExpression CurlyBracketLeft switchBlockStatementGroups? CurlyBracketRight;
|
||||
|
||||
switchBlockStatementGroups: (switchBlockStatementGroup)*;
|
||||
|
||||
switchBlockStatementGroup: switchLabel blockStatements;
|
||||
|
||||
switchLabel: Case constantExpression Colon
|
||||
| Default Colon;
|
||||
moreStatementExpressions: (Comma statementExpression)*;
|
||||
|
||||
forInit: statementExpression moreStatementExpressions
|
||||
| (Final)? type variableDeclarators;
|
||||
|
||||
forUpdate: statementExpression moreStatementExpressions;
|
||||
|
||||
modifiersOpt: (modifier)*;
|
||||
|
||||
modifier: Public
|
||||
| Protected
|
||||
| Private
|
||||
| Static
|
||||
| Abstract
|
||||
| Final
|
||||
| Native
|
||||
| Synchronized
|
||||
| Transient
|
||||
| Volatile
|
||||
| Strictfp;
|
||||
|
||||
variableDeclarators: variableDeclarator (Comma variableDeclarator)*;
|
||||
|
||||
variableDeclaratorsRest: variableDeclaratorRest (Comma variableDeclarator)*;
|
||||
|
||||
constantDeclaratorsRest: constantDeclaratorRest (Comma constantDeclarator)*;
|
||||
|
||||
variableDeclarator: identifier variableDeclaratorsRest;
|
||||
|
||||
constantDeclarator: identifier constantDeclaratorRest;
|
||||
|
||||
variableDeclaratorRest: bracketsOpt (Assignment variableInitializer)?;
|
||||
|
||||
constantDeclaratorRest: bracketsOpt Assignment variableInitializer;
|
||||
|
||||
variableDeclaratorId: identifier bracketsOpt;
|
||||
|
||||
compilationUnit: (Package qualifiedIdentifier Semicolon)? (importDeclaration)*(typeDeclaration)*;
|
||||
|
||||
importDeclaration: Import identifier (Dot identifier)* (Dot Multiplication)? Semicolon;
|
||||
|
||||
typeDeclaration: classOrInterfaceDeclaration | Semicolon;
|
||||
|
||||
classOrInterfaceDeclaration: modifiersOpt (classDeclaration | interfaceDeclaration);
|
||||
|
||||
classDeclaration: Class identifier (Extends type)? (Implements typeList)? classBody;
|
||||
|
||||
interfaceDeclaration: Interface identifier (Extends typeList)? interfaceBody;
|
||||
|
||||
typeList: type (Comma type)*;
|
||||
|
||||
classBody: CurlyBracketLeft (classBodyDeclaration)* CurlyBracketRight;
|
||||
|
||||
interfaceBody: CurlyBracketLeft (interfaceBodyDeclaration)* CurlyBracketRight;
|
||||
|
||||
classBodyDeclaration: Semicolon
|
||||
| (Static)? block
|
||||
| modifiersOpt memberDecl;
|
||||
memberDecl: methodOrFieldDecl
|
||||
| Void identifier methodDeclaratorRest
|
||||
| identifier constructorDeclaratorRest
|
||||
| classOrInterfaceDeclaration;
|
||||
|
||||
methodOrFieldDecl: type identifier methodOrFieldRest;
|
||||
|
||||
methodOrFieldRest: variableDeclaratorRest
|
||||
|methodDeclaratorRest;
|
||||
|
||||
interfaceBodyDeclaration: Semicolon
|
||||
| modifiersOpt interfaceMemberDecl;
|
||||
|
||||
interfaceMemberDecl: interfaceMethodOrFieldDecl
|
||||
| Void identifier voidInterfaceMethodDeclaratorRest
|
||||
| classOrInterfaceDeclaration;
|
||||
|
||||
interfaceMethodOrFieldDecl: type identifier interfaceMethodOrFieldRest;
|
||||
|
||||
interfaceMethodOrFieldRest: constantDeclaratorRest Semicolon
|
||||
| interfaceMethodDeclaratorRest;
|
||||
|
||||
methodDeclaratorRest: formalParameters bracketsOpt (Throws qualifiedIdentifierList)?(methodBody | Semicolon);
|
||||
|
||||
voidMethodDeclaratorRest: formalParameters (Throws qualifiedIdentifierList)? (methodBody | Semicolon);
|
||||
|
||||
interfaceMethodDeclaratorRest: formalParameters bracketsOpt (Throws qualifiedIdentifierList)? Semicolon;
|
||||
|
||||
voidInterfaceMethodDeclaratorRest: formalParameters (Throws qualifiedIdentifierList)?;
|
||||
|
||||
constructorDeclaratorRest: formalParameters (Throws qualifiedIdentifierList)? methodBody;
|
||||
|
||||
qualifiedIdentifierList: qualifiedIdentifier (Comma qualifiedIdentifier)*;
|
||||
|
||||
formalParameters: ParenthesesLeft (formalParameter (Comma formalParameter)*)? ParenthesesRight;
|
||||
|
||||
formalParameter: (Final)? type variableDeclaratorId;
|
||||
|
||||
methodBody: block;
|
||||
|
||||
|
||||
|
||||
|
||||
248
ExprSyntactic.g4
Normal file
248
ExprSyntactic.g4
Normal file
@@ -0,0 +1,248 @@
|
||||
parser grammar ExprSyntactic;
|
||||
|
||||
options {
|
||||
tokenVocab=ExprLexer;
|
||||
}
|
||||
prog: compilationUnit EOF;
|
||||
identifier: IDENTIFIER;
|
||||
|
||||
qualifiedIdentifier: identifier (Dot identifier)*;
|
||||
|
||||
literal: IntegerLiteral
|
||||
| FloatingPointLiteral
|
||||
| CharacterLiteral
|
||||
| StringLiteral
|
||||
| BooleanLiteral
|
||||
| NullLiteral;
|
||||
//Section 15.26: Assignment Operators
|
||||
expression: unaryExpr assignmentOperator expression | conditionalExpr ;
|
||||
|
||||
//Highest Prescedence _Expr = expression
|
||||
//CI cha 6
|
||||
conditionalExpr: logicalOrExpr Question conditionalExpr Colon conditionalExpr | logicalOrExpr;
|
||||
|
||||
logicalOrExpr: logicalAndExpr (ConditionalOR logicalAndExpr)*;
|
||||
|
||||
logicalAndExpr: equalityExpr (ConditionalAND equalityExpr)*;
|
||||
|
||||
equalityExpr: relationalExpr ((EqualTo | NotEqualTo) relationalExpr)*;
|
||||
|
||||
relationalExpr: additiveExpr((LessThan | GreaterThan | LessThanEqualTo | GreaterThanEqualTo) additiveExpr | InstanceOf type)*;
|
||||
|
||||
additiveExpr: multiplicativeExpr((Addition | Subtraction) multiplicativeExpr)*;
|
||||
multiplicativeExpr: unaryExpr((Multiplication | Division | Remainder) unaryExpr)*;
|
||||
|
||||
unaryExpr:postfixExpr |(Addition | Subtraction | LogicalComplement | BitwiseComplement | Increment | Decrement) unaryExpr | parExpression type unaryExpr;
|
||||
|
||||
postfixExpr: primaryExpr (Increment| Decrement| Dot IDENTIFIER | SquareBracketLeft expression SquareBracketRight | arguments)*;
|
||||
|
||||
primaryExpr: parExpression
|
||||
| IntegerLiteral
|
||||
| FloatingPointLiteral
|
||||
| StringLiteral
|
||||
| CharacterLiteral
|
||||
| BooleanLiteral
|
||||
| NullLiteral
|
||||
| IDENTIFIER
|
||||
| This
|
||||
| Super (Dot IDENTIFIER)?
|
||||
| New type arguments
|
||||
| primitiveType (SquareBracketLeft SquareBracketRight)* Dot Class
|
||||
| type Dot Class;
|
||||
|
||||
|
||||
assignmentOperator: Assignment
|
||||
| AddAssign
|
||||
| SubtractAssign
|
||||
| MultiplyAssign
|
||||
| DivideAssign
|
||||
| BitwiseANDAssign
|
||||
| BitwiseORAssign
|
||||
| BitwiseXORAssign
|
||||
| RemainderAssign
|
||||
| LeftShiftAssign
|
||||
| SignedRightShiftAssign
|
||||
| UnsignedRightShiftAssign;
|
||||
|
||||
type: identifier (Dot identifier)* bracketsOpt | primitiveType;
|
||||
|
||||
statementExpression: expression;
|
||||
|
||||
constantExpression: expression;
|
||||
|
||||
identifierSuffix: SquareBracketLeft SquareBracketRight bracketsOpt Dot Class
|
||||
|SquareBracketLeft expression SquareBracketRight
|
||||
|arguments
|
||||
|Dot (Class | This | Super arguments New innerCreator);
|
||||
|
||||
postfixOp: Increment | Decrement;
|
||||
|
||||
primitiveType: Byte | Short| Char | Int| Long| Float| Double| Boolean;
|
||||
//Method arguments
|
||||
argumentsOpt: (arguments)?;
|
||||
|
||||
arguments: ParenthesesLeft (expression (Comma expression)*)? ParenthesesRight;
|
||||
|
||||
bracketsOpt: (SquareBracketLeft SquareBracketRight)*;
|
||||
|
||||
creator: qualifiedIdentifier ( arrayCreatorRest | classCreatorRest);
|
||||
|
||||
innerCreator: identifier classCreatorRest;
|
||||
|
||||
arrayCreatorRest: SquareBracketLeft SquareBracketRight bracketsOpt arrayInitializer
|
||||
| SquareBracketLeft expression SquareBracketRight (SquareBracketLeft expression SquareBracketRight)*;
|
||||
classCreatorRest: arguments (classBody)?;
|
||||
|
||||
arrayInitializer: CurlyBracketLeft (variableInitializer(Comma variableInitializer)*(Comma)?)? CurlyBracketRight;
|
||||
|
||||
variableInitializer: arrayInitializer
|
||||
|expression;
|
||||
|
||||
parExpression: ParenthesesLeft expression ParenthesesRight;
|
||||
|
||||
block: CurlyBracketLeft blockStatements CurlyBracketRight;
|
||||
|
||||
blockStatements: (blockStatement)*;
|
||||
|
||||
blockStatement: localVariableDeclarationStatement
|
||||
|classOrInterfaceDeclaration
|
||||
|(identifier Colon)? statement;
|
||||
|
||||
localVariableDeclarationStatement: (Final)? type variableDeclarators;
|
||||
|
||||
statement:completeIf | If parExpression statementIncompleteIf;
|
||||
|
||||
statementIncompleteIf: block
|
||||
| If parExpression completeIf Else statementIncompleteIf
|
||||
| For ParenthesesLeft forInit? Semicolon (expression)? Semicolon forUpdate? ParenthesesRight statement
|
||||
| While parExpression statement
|
||||
| Do statement While parExpression Semicolon
|
||||
| Try block catches
|
||||
| Try block Finally block
|
||||
| Try block catches Finally block
|
||||
| switchStatement
|
||||
| Synchronized parExpression block
|
||||
| Return (expression)? Semicolon
|
||||
| Throw expression Semicolon
|
||||
| Break (identifier)? Semicolon
|
||||
| Continue (identifier)? Semicolon
|
||||
| statementExpression Semicolon
|
||||
| Semicolon;
|
||||
//solve ambiguity over If()else. aka (Dangling else).
|
||||
//this will do the longest check by looking for an else section, fincding the closest else!
|
||||
completeIf: If parExpression completeIf Else completeIf | statementIncompleteIf;
|
||||
|
||||
catches: catchClause (catchClause)*;
|
||||
|
||||
catchClause: Catch ParenthesesLeft formalParameter ParenthesesRight block;
|
||||
|
||||
switchStatement: Switch parExpression CurlyBracketLeft CurlyBracketRight
|
||||
| Switch parExpression CurlyBracketLeft switchBlockStatementGroups? CurlyBracketRight;
|
||||
|
||||
switchBlockStatementGroups: (switchBlockStatementGroup)*;
|
||||
|
||||
switchBlockStatementGroup: switchLabel blockStatements;
|
||||
|
||||
switchLabel: Case constantExpression Colon
|
||||
| Default Colon;
|
||||
moreStatementExpressions: (Comma statementExpression)*;
|
||||
|
||||
forInit: statementExpression moreStatementExpressions
|
||||
| (Final)? type variableDeclarators;
|
||||
|
||||
forUpdate: statementExpression moreStatementExpressions;
|
||||
|
||||
modifiersOpt: (modifier)*;
|
||||
|
||||
modifier: Public
|
||||
| Protected
|
||||
| Private
|
||||
| Static
|
||||
| Abstract
|
||||
| Final
|
||||
| Native
|
||||
| Synchronized
|
||||
| Transient
|
||||
| Volatile
|
||||
| Strictfp;
|
||||
|
||||
variableDeclarators: variableDeclarator (Comma variableDeclarator)*;
|
||||
|
||||
variableDeclaratorsRest: variableDeclaratorRest (Comma variableDeclarator)*;
|
||||
|
||||
constantDeclaratorsRest: constantDeclaratorRest (Comma constantDeclarator)*;
|
||||
|
||||
variableDeclarator: identifier variableDeclaratorsRest;
|
||||
|
||||
constantDeclarator: identifier constantDeclaratorRest;
|
||||
|
||||
variableDeclaratorRest: bracketsOpt (Assignment variableInitializer)?;
|
||||
|
||||
constantDeclaratorRest: bracketsOpt Assignment variableInitializer;
|
||||
|
||||
variableDeclaratorId: identifier bracketsOpt;
|
||||
|
||||
compilationUnit: (Package qualifiedIdentifier Semicolon)? (importDeclaration)*(typeDeclaration)*;
|
||||
|
||||
importDeclaration: Import identifier (Dot identifier)* (Dot Multiplication)? Semicolon;
|
||||
|
||||
typeDeclaration: classOrInterfaceDeclaration | Semicolon;
|
||||
|
||||
classOrInterfaceDeclaration: modifiersOpt (classDeclaration | interfaceDeclaration);
|
||||
|
||||
classDeclaration: Class identifier (Extends type)? (Implements typeList)? classBody;
|
||||
|
||||
interfaceDeclaration: Interface identifier (Extends typeList)? interfaceBody;
|
||||
|
||||
typeList: type (Comma type)*;
|
||||
|
||||
classBody: CurlyBracketLeft (classBodyDeclaration)* CurlyBracketRight;
|
||||
|
||||
interfaceBody: CurlyBracketLeft (interfaceBodyDeclaration)* CurlyBracketRight;
|
||||
|
||||
classBodyDeclaration: Semicolon
|
||||
| (Static)? block
|
||||
| modifiersOpt memberDecl;
|
||||
memberDecl: methodOrFieldDecl
|
||||
| Void identifier methodDeclaratorRest
|
||||
| identifier constructorDeclaratorRest
|
||||
| classOrInterfaceDeclaration;
|
||||
|
||||
methodOrFieldDecl: type identifier methodOrFieldRest;
|
||||
|
||||
methodOrFieldRest: variableDeclaratorRest
|
||||
|methodDeclaratorRest;
|
||||
|
||||
interfaceBodyDeclaration: Semicolon
|
||||
| modifiersOpt interfaceMemberDecl;
|
||||
|
||||
interfaceMemberDecl: interfaceMethodOrFieldDecl
|
||||
| Void identifier voidInterfaceMethodDeclaratorRest
|
||||
| classOrInterfaceDeclaration;
|
||||
|
||||
interfaceMethodOrFieldDecl: type identifier interfaceMethodOrFieldRest;
|
||||
|
||||
interfaceMethodOrFieldRest: constantDeclaratorRest Semicolon
|
||||
| interfaceMethodDeclaratorRest;
|
||||
|
||||
methodDeclaratorRest: formalParameters bracketsOpt (Throws qualifiedIdentifierList)?(methodBody | Semicolon);
|
||||
|
||||
voidMethodDeclaratorRest: formalParameters (Throws qualifiedIdentifierList)? (methodBody | Semicolon);
|
||||
|
||||
interfaceMethodDeclaratorRest: formalParameters bracketsOpt (Throws qualifiedIdentifierList)? Semicolon;
|
||||
|
||||
voidInterfaceMethodDeclaratorRest: formalParameters (Throws qualifiedIdentifierList)?;
|
||||
|
||||
constructorDeclaratorRest: formalParameters (Throws qualifiedIdentifierList)? methodBody;
|
||||
|
||||
qualifiedIdentifierList: qualifiedIdentifier (Comma qualifiedIdentifier)*;
|
||||
|
||||
formalParameters: ParenthesesLeft (formalParameter (Comma formalParameter)*)? ParenthesesRight;
|
||||
|
||||
formalParameter: (Final)? type variableDeclaratorId;
|
||||
|
||||
methodBody: block;
|
||||
|
||||
|
||||
|
||||
|
||||
105
ExprTool.java
Normal file
105
ExprTool.java
Normal file
@@ -0,0 +1,105 @@
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.antlr.v4.runtime.*;
|
||||
import org.antlr.v4.runtime.tree.*;
|
||||
import org.antlr.v4.runtime.misc.ParseCancellationException;
|
||||
|
||||
public class ExprTool {
|
||||
public static void main(String[] args) throws Exception {
|
||||
if (args.length == 0) {
|
||||
// If no files given then read from stdin
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
StringBuilder inputBuilder = new StringBuilder();
|
||||
while (scanner.hasNextLine()) {
|
||||
inputBuilder.append(scanner.nextLine()).append("\n");
|
||||
}
|
||||
scanner.close();
|
||||
|
||||
parseAndWalk(inputBuilder.toString(), "<stdin>");
|
||||
} else {
|
||||
// for Loop through all given file paths
|
||||
for (String filePath : args) {
|
||||
try {
|
||||
String inputText = new String(Files.readAllBytes(Paths.get(filePath)));
|
||||
parseAndWalk(inputText, filePath);
|
||||
} catch (IOException e) {
|
||||
System.err.println("Error reading file: " + filePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Reusable parsing + walking
|
||||
private static void parseAndWalk(String inputText, String sourceName) {
|
||||
try {
|
||||
// Create char stream
|
||||
CharStream input = CharStreams.fromString(inputText, sourceName);
|
||||
|
||||
// Lexer
|
||||
ExprLexer lexer = new ExprLexer(input);
|
||||
lexer.removeErrorListeners();
|
||||
lexer.addErrorListener(new ThrowingErrorListener());
|
||||
|
||||
// Tokens
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||
|
||||
// Parser
|
||||
ExprParser parser = new ExprParser(tokens);
|
||||
parser.removeErrorListeners();
|
||||
parser.addErrorListener(new ThrowingErrorListener());
|
||||
|
||||
// Parse compilation unit
|
||||
ParseTree tree = parser.compilationUnit();
|
||||
|
||||
// Walk
|
||||
ParseTreeWalker walker = new ParseTreeWalker();
|
||||
walker.walk(new ClassPrinter(sourceName), tree);
|
||||
|
||||
} catch (RuntimeException e) {
|
||||
System.err.println("Parsing failed: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Listener to print class declarations with line/column
|
||||
public static class ClassPrinter extends ExprParserBaseListener {
|
||||
private final String sourceName;
|
||||
|
||||
public ClassPrinter(String sourceName) {
|
||||
this.sourceName = sourceName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enterClassDeclaration(ExprParser.ClassDeclarationContext ctx) {
|
||||
int line = ctx.getStart().getLine();
|
||||
int col = ctx.getStart().getCharPositionInLine();
|
||||
String className = ctx.identifier().getText();
|
||||
System.out.printf("Class %s, file %s, line %d, column %d%n",
|
||||
className, sourceName, line, col);
|
||||
}
|
||||
}
|
||||
|
||||
// Custom error listener
|
||||
public static class ThrowingErrorListener extends BaseErrorListener {
|
||||
@Override
|
||||
public void syntaxError(Recognizer<?, ?> recognizer,
|
||||
Object offendingSymbol,
|
||||
int line, int charPositionInLine,
|
||||
String msg,
|
||||
RecognitionException e) {
|
||||
String sourceName = recognizer.getInputStream().getSourceName();
|
||||
if (sourceName == null || sourceName.isEmpty()) {
|
||||
sourceName = "<unknown>";
|
||||
}
|
||||
|
||||
String formatted = String.format(
|
||||
" file %s, line %d, column %d%n%s",
|
||||
sourceName, line, charPositionInLine, msg
|
||||
);
|
||||
|
||||
throw new ParseCancellationException(formatted);
|
||||
}
|
||||
}
|
||||
}
|
||||
468
README.md
468
README.md
@@ -1,467 +1,21 @@
|
||||
## Termanology
|
||||
1. Forward Slice => All statements that could be affected if you change a given statement.
|
||||
2. AIS = Actualy Impacted Set (Manully calcualte the expected outcome)
|
||||
3. EIS = Estimated Impacted Set (The set extracted from the outcome of the program)
|
||||
## Program Dependence Graphs(PDG) for Change Impact Analysis(CIA)
|
||||
|
||||
<img class="fullimage" alt="Program Dependence Graphs & Change Impact Analysis tool in action" src="./assets/pdg-cia-tool.gif">
|
||||
|
||||
### Run
|
||||
```bash
|
||||
chmod +x run.sh
|
||||
# Show all dependencies for a file
|
||||
./run.sh examples/Example1.java
|
||||
# Analyze impact of line 3
|
||||
./run.sh examples/Example1.java 3
|
||||
```
|
||||
When working on large software systems, even a tiny code change can have unexpected consequences. A single modified line may influence other parts of the program through hidden control or data dependencies. Understanding *what might break* after a change is one of the hardest parts of software maintenance and that’s exactly the problem our project set out to solve.
|
||||
|
||||
# Testing
|
||||
## Test1 simple data flow
|
||||
### Line 3 (int x = 5;)
|
||||
AIS = {3, 4, 5, 6}
|
||||
For our CPSC 499 Software Analysis project, our team built a **PDG based change impact analysis tool** for Java 1.4 programs. Given a line number in the source code, the tool automatically determines which other lines may be affected by a change to that line. Instead of relying on intuition or manual inspection, we let static analysis do the heavy lifting.
|
||||
|
||||
```bash
|
||||
=== Impact Analysis for Line 3 ===
|
||||
The core idea behind our approach is simple: if one statement controls whether another statement executes, or if it defines a variable that another statement uses, then the second statement depends on the first. We capture these relationships using a Program Dependence Graph that combines **control dependencies** and **data dependencies**. Once the PDG is built, change impact analysis becomes a graph reachability problem starting from the changed line, we follow dependency edges to find everything that could be affected.
|
||||
|
||||
Statement(s) at line 3:
|
||||
1: int x = 5 ;
|
||||
We implemented our tool using JavaParser configured for Java 1.4 to generate Abstract Syntax Trees (AST). Each statement was mapped back to its original source line so that results could be reported in a form developers actually care about: line numbers. On top of the AST, we constructed a CFG, then layered control and data dependency analysis to form the PDG.
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 3
|
||||
Line 4
|
||||
Line 5
|
||||
Line 6
|
||||
Control dependency analysis determines which statements depend on branching decisions, such as conditions in `if` statements or loops. Because loops introduce backward control flow, we used a **fixed point iteration** approach, repeatedly propagating dependencies until the results stabilized. Data dependency analysis was implemented using classic **reaching definitions analysis** with GEN and KILL sets, allowing us to track how variable definitions flow through the program even across branches and loops.
|
||||
|
||||
Total: 4 lines impacted
|
||||
```
|
||||
1. TP: {3, 4, 5, 6} |TP| = 4
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
Once the PDG was complete, impact analysis was straightforward. Given a changed line, we traversed the graph to find all reachable nodes. These nodes represent the estimated set of impacted lines. The quality of this result depends entirely on the accuracy of the dependency graph, so much of our effort went into handling edge cases like compound assignments, variable declarations with initialization, and loop-carried dependencies.
|
||||
|
||||
To evaluate the tool, we compared its output against manually analyzed ground truth across a variety of Java programs. The results were encouraging: **95% average precision**, **91% average recall**, and **85% perfect accuracy**. The tool performed especially well in data-flow-heavy scenarios, capturing transitive dependencies and loop effects with very few false positives. Most errors occurred in complex control-flow situations, which is consistent with the known limits of static analysis.
|
||||
|
||||
### Line 4 (int y = x + 2;)
|
||||
AIS = {4,5,6}
|
||||
Beyond the metrics, the project taught us valuable lessons. Fixed-point algorithms are powerful but subtle, especially in the presence of loops. Mapping between ASTs, CFGs, and source code is far more difficult than it initially appears. And perhaps most importantly, static analysis is always an approximation—being explicit about its trade-offs is just as important as implementing the analysis itself.
|
||||
|
||||
```bash
|
||||
=== Impact Analysis for Line 4 ===
|
||||
|
||||
Statement(s) at line 4:
|
||||
2: int y = x + 2 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 4
|
||||
Line 5
|
||||
Line 6
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {4, 5, 6} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
***
|
||||
|
||||
## Test2 Control Dependency
|
||||
### Change at Line 5 (if (x > 5))
|
||||
AIS = {5, 6, 8, 9}
|
||||
|
||||
```bash
|
||||
=== Impact Analysis for Line 5 ===
|
||||
|
||||
Statement(s) at line 5:
|
||||
3: if ( x > 5 )
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 5
|
||||
Line 8
|
||||
Line 9
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {5, 8, 9} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {6} |FN| = 1
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 3 (int x = 10;)
|
||||
AIS = {3, 5, 6, 8, 9}
|
||||
```bash
|
||||
=== Impact Analysis for Line 3 ===
|
||||
|
||||
Statement(s) at line 3:
|
||||
1: int x = 10 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 3
|
||||
Line 5
|
||||
Line 6
|
||||
Line 8
|
||||
Line 9
|
||||
|
||||
Total: 5 lines impacted
|
||||
```
|
||||
1. TP: {3, 5, 6, 8, 9} |TP| = 5
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
|
||||
***
|
||||
|
||||
## Test3 Simple Loop
|
||||
### Change at Line 3 (int sum = 0;)
|
||||
AIS = {3, 6, 8}
|
||||
```Bash
|
||||
=== Impact Analysis for Line 3 ===
|
||||
|
||||
Statement(s) at line 3:
|
||||
1: int sum = 0 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 3
|
||||
Line 6
|
||||
Line 8
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {3, 6, 8} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 5 (for loop heading)
|
||||
AIS = {5, 6, 8}
|
||||
```Bash
|
||||
=== Impact Analysis for Line 5 ===
|
||||
|
||||
Statement(s) at line 5:
|
||||
3: for ( i = 0 ; i < 5 ; i ++ )
|
||||
4: block
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 5
|
||||
Line 6
|
||||
Line 8
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {5, 6, 8} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
***
|
||||
|
||||
## Test4 If-Else Branch
|
||||
### Change at Line 5 (if (x > 5))
|
||||
AIS = {5, 6, 8, 10, 11}
|
||||
```Bash
|
||||
=== Impact Analysis for Line 5 ===
|
||||
|
||||
Statement(s) at line 5:
|
||||
4: block
|
||||
3: if ( x > 5 )
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 5
|
||||
Line 6
|
||||
Line 7
|
||||
Line 8
|
||||
Line 10
|
||||
Line 11
|
||||
|
||||
Total: 6 lines impacted
|
||||
```
|
||||
1. TP: {5, 6, 7, 8, 10, 11} |TP| = 6
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {7} |FN| = 1
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 6 (y = x + 10;)
|
||||
AIS = {6, 10, 11}
|
||||
```bash
|
||||
=== Impact Analysis for Line 6 ===
|
||||
|
||||
Statement(s) at line 6:
|
||||
5: y = x + 10 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 6
|
||||
|
||||
Total: 1 lines impacted
|
||||
```
|
||||
1. TP: {6} |TP| = 1
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {10, 11} |FN| = 2
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
***
|
||||
|
||||
## Test5 Multiple Uses va
|
||||
### Change at Line 3 (int a = 5;)
|
||||
AIS = {3, 4, 5, 6, 7}
|
||||
```Bash
|
||||
=== Impact Analysis for Line 3 ===
|
||||
|
||||
Statement(s) at line 3:
|
||||
1: int a = 5 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 3
|
||||
Line 4
|
||||
Line 5
|
||||
Line 6
|
||||
Line 7
|
||||
|
||||
Total: 5 lines impacted
|
||||
```
|
||||
1. TP: {3, 4, 5, 6, 7} |TP| = 5
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 4 (int b = a + 2;)
|
||||
AIS = {4, 6, 7}
|
||||
```Bash
|
||||
=== Impact Analysis for Line 4 ===
|
||||
|
||||
Statement(s) at line 4:
|
||||
2: int b = a + 2 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 4
|
||||
Line 6
|
||||
Line 7
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {4, 6, 7} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
***
|
||||
|
||||
## Test6 Nested Control
|
||||
### Change at Line 5 (if (x > 5))
|
||||
AIS = {5, 6, 7, 10, 11}
|
||||
```bash
|
||||
=== Impact Analysis for Line 5 ===
|
||||
|
||||
Statement(s) at line 5:
|
||||
4: block
|
||||
3: if ( x > 5 )
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 5
|
||||
Line 6
|
||||
Line 7
|
||||
Line 10
|
||||
Line 11
|
||||
|
||||
Total: 5 lines impacted
|
||||
```
|
||||
1. TP: {5, 6, 7, 10, 11} |TP| = 5
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 6 (if (x > 8))
|
||||
AIS = {6, 7, 10, 11}
|
||||
```bash
|
||||
=== Impact Analysis for Line 6 ===
|
||||
|
||||
Statement(s) at line 6:
|
||||
5: if ( x > 8 )
|
||||
6: block
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 6
|
||||
Line 7
|
||||
Line 10
|
||||
Line 11
|
||||
|
||||
Total: 4 lines impacted
|
||||
```
|
||||
1. TP: {6, 7, 10, 11} |TP| = 4
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
***
|
||||
|
||||
## Test7 While Loop
|
||||
### Change at Line 5 (while (count < 5))
|
||||
AIS = {5, 6, 7, 9}
|
||||
```bash
|
||||
=== Impact Analysis for Line 5 ===
|
||||
|
||||
Statement(s) at line 5:
|
||||
3: while ( count < 5 )
|
||||
4: block
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 5
|
||||
Line 6
|
||||
Line 7
|
||||
Line 9
|
||||
|
||||
Total: 4 lines impacted
|
||||
```
|
||||
1. TP: {5, 6, 7, 9} |TP| = 4
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 3 (int count = 0;)
|
||||
AIS = {3, 5, 6, 7, 9}
|
||||
```bash
|
||||
=== Impact Analysis for Line 3 ===
|
||||
|
||||
Statement(s) at line 3:
|
||||
1: int count = 0 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 3
|
||||
Line 5
|
||||
Line 6
|
||||
Line 7
|
||||
Line 9
|
||||
|
||||
Total: 5 lines impacted
|
||||
```
|
||||
1. TP: {3, 5, 6, 7, 9} |TP| = 5
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
***
|
||||
|
||||
## Test8 Reassignment
|
||||
### Change at Line 3 (int x = 5;)
|
||||
AIS = {3, 4, 7}
|
||||
```bash
|
||||
=== Impact Analysis for Line 3 ===
|
||||
|
||||
Statement(s) at line 3:
|
||||
1: int x = 5 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 3
|
||||
Line 4
|
||||
Line 7
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {3, 4, 7} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 5 (x = 10;)
|
||||
AIS = {5, 6, 8}
|
||||
```bash
|
||||
=== Impact Analysis for Line 5 ===
|
||||
|
||||
Statement(s) at line 5:
|
||||
3: x = 10 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 5
|
||||
Line 6
|
||||
Line 8
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {5, 6, 8} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
***
|
||||
|
||||
## Test9 No Impact
|
||||
### Change at Line 4 (int y = 10;)
|
||||
AIS = {4, 6, 8}
|
||||
```bash
|
||||
=== Impact Analysis for Line 4 ===
|
||||
|
||||
Statement(s) at line 4:
|
||||
2: int y = 10 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 4
|
||||
Line 6
|
||||
Line 8
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {4, 6, 8} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 3 (int x = 5;)
|
||||
AIS = {3, 5, 7}
|
||||
```bash
|
||||
=== Impact Analysis for Line 3 ===
|
||||
|
||||
Statement(s) at line 3:
|
||||
1: int x = 5 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 3
|
||||
Line 5
|
||||
Line 7
|
||||
|
||||
Total: 3 lines impacted
|
||||
```
|
||||
1. TP: {3, 5, 7} |TP| = 3
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
***
|
||||
|
||||
## Test10 Complex Expression
|
||||
### Change at Line 3 (int a = 2;)
|
||||
AIS = {3, 6, 7, 8, 9}
|
||||
```bash
|
||||
=== Impact Analysis for Line 3 ===
|
||||
|
||||
Statement(s) at line 3:
|
||||
1: int a = 2 ;
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 3
|
||||
Line 6
|
||||
Line 7
|
||||
Line 8
|
||||
Line 9
|
||||
|
||||
Total: 5 lines impacted
|
||||
```
|
||||
1. TP: {3, 6, 7, 8, 9} |TP| = 5
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
|
||||
### Change at Line 8 (if (x > 5))
|
||||
AIS = {8, 9}
|
||||
|
||||
```bash
|
||||
=== Impact Analysis for Line 8 ===
|
||||
|
||||
Statement(s) at line 8:
|
||||
6: if ( x > 5 )
|
||||
7: block
|
||||
|
||||
=== IMPACTED LINES ===
|
||||
Line 8
|
||||
Line 9
|
||||
|
||||
Total: 2 lines impacted
|
||||
```
|
||||
1. TP: {8, 9} |TP| = 2
|
||||
2. FP: {} |FP| = 0
|
||||
3. FN: {} |FN| = 0
|
||||
4. TN: {} |TN| = 0
|
||||
While our tool is limited to Java 1.4 and intraprocedural analysis, the results demonstrate that **Program Dependence Graphs are a strong foundation for automated change impact analysis**. With further work, this approach could scale to larger codebases, support modern language features, and incorporate inter-procedural dependencies bringing developers one step closer to confidently answering the question: *“If I change this line, what else might break?”*
|
||||
|
||||
45
Test/BadTaxApp.java
Normal file
45
Test/BadTaxApp.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package Test
|
||||
|
||||
abstract class TaxCalculator {
|
||||
protected double income
|
||||
|
||||
public TaxCalculator(double income {
|
||||
this.income = income
|
||||
}
|
||||
public abstract double calculateTax()
|
||||
|
||||
public double afterTaxIncome() {
|
||||
return income - calculateTax()
|
||||
|
||||
}
|
||||
class FlatTaxCalculator extends TaxCalculator {
|
||||
private static final double RATE = 0.15
|
||||
public FlatTaxCalculator(double income) super(income)
|
||||
public double calculateTax() {
|
||||
return income * RATE
|
||||
}
|
||||
|
||||
public class TaxApp {
|
||||
static class BracketTaxCalculator extends TaxCalculator {
|
||||
public BracketTaxCalculator(double income)
|
||||
super(income)
|
||||
|
||||
public double calculateTax() {
|
||||
if (income <= 10000) return income * 0.10
|
||||
else if (income <= 50000) return (10000 * 0.10) + ((income - 10000) * 0.20)
|
||||
else return (10000 * 0.10) + (40000 * 0.20) + ((income - 50000) * 0.30)
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
double income = 60000
|
||||
|
||||
TaxCalculator flat = new FlatTaxCalculator(income)
|
||||
double flatTax = flat.calculateTax()
|
||||
double flatAfterTax = flat.afterTaxIncome()
|
||||
|
||||
TaxCalculator bracket = new BracketTaxCalculator(income)
|
||||
double bracketTax = bracket.calculateTax()
|
||||
double bracketAfterTax = bracket.afterTaxIncome()
|
||||
}
|
||||
}
|
||||
44
Test/TaxApp.java
Normal file
44
Test/TaxApp.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package Test;
|
||||
abstract class TaxCalculator {
|
||||
protected double income;
|
||||
|
||||
public TaxCalculator(double income) {
|
||||
this.income = income;
|
||||
}
|
||||
public abstract double calculateTax();
|
||||
public double afterTaxIncome() {
|
||||
return income - calculateTax();
|
||||
}
|
||||
}
|
||||
class FlatTaxCalculator extends TaxCalculator {
|
||||
private static final double RATE = 0.15;
|
||||
public FlatTaxCalculator(double income) {super(income);}
|
||||
public double calculateTax() {
|
||||
return income * RATE;
|
||||
}
|
||||
}
|
||||
|
||||
public class TaxApp {
|
||||
static class BracketTaxCalculator extends TaxCalculator {
|
||||
public BracketTaxCalculator(double income) {
|
||||
super(income);
|
||||
}
|
||||
public double calculateTax() {
|
||||
if (income <= 10000) {return income * 0.10;}
|
||||
else if (income <= 50000) { return (10000 * 0.10) + ((income - 10000) * 0.20);}
|
||||
else { return (10000 * 0.10) + (40000 * 0.20) + ((income - 50000) * 0.30);}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
double income = 60000;
|
||||
|
||||
TaxCalculator flat = new FlatTaxCalculator(income);
|
||||
double flatTax = flat.calculateTax();
|
||||
double flatAfterTax = flat.afterTaxIncome();
|
||||
|
||||
TaxCalculator bracket = new BracketTaxCalculator(income);
|
||||
double bracketTax = bracket.calculateTax();
|
||||
double bracketAfterTax = bracket.afterTaxIncome();
|
||||
}
|
||||
}
|
||||
BIN
assets/pdg-cia-tool.gif
Normal file
BIN
assets/pdg-cia-tool.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 790 KiB |
33
run.sh
33
run.sh
@@ -1,33 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$1" = "clean" ]; then
|
||||
rm -rf bin
|
||||
shift
|
||||
fi
|
||||
|
||||
|
||||
if [ "$#" -lt 1 ]; then
|
||||
echo "Usage: ./run.sh <file> [line]"
|
||||
echo "Example: ./run.sh examples/Example1.java 3"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for antlr jar
|
||||
if [ ! -f "lib/antlr-4.13.2-complete.jar" ]; then
|
||||
echo "ERROR: Put antlr-4.13.2-complete.jar in lib/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build if needed be
|
||||
if [ ! -d "bin/pdg" ]; then
|
||||
echo "Building..."
|
||||
mkdir -p bin
|
||||
CP="lib/antlr-4.13.2-complete.jar"
|
||||
javac -d bin -cp "$CP" src/org/lsmr/cfg/*.java || exit 1
|
||||
javac -d bin -cp "$CP:bin" src/pdg/PDG.java || exit 1
|
||||
javac -d bin -cp "$CP:bin" src/CFGBuilder.java src/CIA.java || exit 1
|
||||
echo "Build complete!"
|
||||
fi
|
||||
|
||||
# Run
|
||||
java -cp "bin:lib/antlr-4.13.2-complete.jar" CIA "$@"
|
||||
BIN
src/.DS_Store
vendored
BIN
src/.DS_Store
vendored
Binary file not shown.
@@ -1,81 +0,0 @@
|
||||
import org.lsmr.cfg.*;
|
||||
import org.antlr.v4.runtime.*;
|
||||
import org.antlr.v4.runtime.tree.*;
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
public class CFGBuilder {
|
||||
|
||||
/**
|
||||
* Build CFG from a Java file
|
||||
*/
|
||||
public ControlFlowGraph buildFromFile(String filename) throws IOException {
|
||||
System.out.println("\n\tBuilding CFG from " + filename);
|
||||
|
||||
// Parse the file
|
||||
CharStream input = CharStreams.fromFileName(filename);
|
||||
Java1_4Lexer lexer = new Java1_4Lexer(input);
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||
Java1_4Parser parser = new Java1_4Parser(tokens);
|
||||
|
||||
parser.removeErrorListeners();
|
||||
|
||||
ParseTree tree = parser.compilationUnit();
|
||||
|
||||
// build CFG using professor's NodeBuilder
|
||||
NodeBuilder builder = new NodeBuilder();
|
||||
builder.visit(tree);
|
||||
|
||||
List<ControlFlowGraph> cfgs = builder.getCFGs();
|
||||
|
||||
if (cfgs.isEmpty()) {
|
||||
throw new RuntimeException("No methods found in file");
|
||||
}
|
||||
|
||||
if (cfgs.size() > 1) {
|
||||
System.out.println("Note: File has " + cfgs.size() + " methods, using first method");
|
||||
}
|
||||
|
||||
ControlFlowGraph cfg = cfgs.get(0);
|
||||
|
||||
System.out.println("CFG built: " + cfg.nodes().size() + " nodes, " + cfg.edges().size() + " edges");
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
||||
public int getLineNumber(Node node) {
|
||||
return node.getLineNumber();
|
||||
}
|
||||
|
||||
public List<Node> findNodesAtLine(ControlFlowGraph cfg, int lineNumber) {
|
||||
List<Node> result = new ArrayList<>();
|
||||
for (Node node : cfg.nodes()) {
|
||||
if (getLineNumber(node) == lineNumber) {
|
||||
result.add(node);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void printLineMapping(ControlFlowGraph cfg) {
|
||||
System.out.println("\n Line Number Mapping");
|
||||
Map<Integer, List<String>> lineToNodes = new TreeMap<>();
|
||||
|
||||
for (Node node : cfg.nodes()) {
|
||||
int line = getLineNumber(node);
|
||||
if (line > 0) {
|
||||
lineToNodes.putIfAbsent(line, new ArrayList<>());
|
||||
lineToNodes.get(line).add(node.label());
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<Integer, List<String>> entry : lineToNodes.entrySet()) {
|
||||
System.out.println("Line " + entry.getKey() + ":");
|
||||
for (String label : entry.getValue()) {
|
||||
System.out.println(" " + label);
|
||||
}
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
}
|
||||
148
src/CIA.java
148
src/CIA.java
@@ -1,148 +0,0 @@
|
||||
import org.lsmr.cfg.*;
|
||||
import pdg.PDG;
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Change Impact Analysis (CIA) Tool
|
||||
*
|
||||
* This tool performs program dependence graph (PDG) analysis on Java source files
|
||||
* to identify which lines of code are impacted by changes to a specific line.
|
||||
*
|
||||
* The analysis works by:
|
||||
* 1. Building a Control Flow Graph (CFG) from the source code
|
||||
* 2. Constructing a Program Dependence Graph (PDG) with control and data dependencies
|
||||
* 3. Computing forward slices to determine impact
|
||||
*
|
||||
* Usage: java CIA <java-file> [line-number]
|
||||
*/
|
||||
public class CIA {
|
||||
/**
|
||||
* Main entry point for the Change Impact Analysis tool.
|
||||
* Validates arguments and initiates the PDG analysis.
|
||||
*
|
||||
* @param args Command line arguments: [0] = filename, [1] = optional line number
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
if (args.length < 1) {
|
||||
System.err.println("Usage: java PDGTool <java-file> [line-number]");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
String filename = args[0];
|
||||
Integer targetLine = args.length > 1 ? Integer.parseInt(args[1]) : null;
|
||||
|
||||
try {
|
||||
analyzePDG(filename, targetLine);
|
||||
} catch (Exception e) {
|
||||
System.err.println("Error: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs PDG analysis on the specified Java file.
|
||||
*
|
||||
* This method orchestrates the complete analysis workflow:
|
||||
* 1. Builds the Control Flow Graph (CFG)
|
||||
* 2. Constructs the Program Dependence Graph (PDG)
|
||||
* 3. Either displays all dependencies or computes impact for a specific line
|
||||
*
|
||||
* @param filename Path to the Java source file to analyze
|
||||
* @param targetLine Optional line number to analyze for change impact (null for all dependencies)
|
||||
* @throws IOException If file cannot be read or parsed
|
||||
*/
|
||||
private static void analyzePDG(String filename, Integer targetLine) throws IOException {
|
||||
System.out.println("PDG Analysis Tool");
|
||||
System.out.println("File: " + filename);
|
||||
if (targetLine != null) {
|
||||
System.out.println("Target line: " + targetLine);
|
||||
}
|
||||
|
||||
// Step 1: Build CFG
|
||||
CFGBuilder cfgBuilder = new CFGBuilder();
|
||||
ControlFlowGraph cfg = cfgBuilder.buildFromFile(filename);
|
||||
|
||||
// Step 2: Build PDG
|
||||
PDG pdg = new PDG(cfg);
|
||||
|
||||
// Step 3: Show results
|
||||
System.out.println("\n=== Available Lines ===");
|
||||
|
||||
List<Integer> lines = cfg.getAllLineNumbers();
|
||||
System.out.println("Lines with statements: " + lines);
|
||||
|
||||
// If specific line requested, compute impact
|
||||
if (targetLine != null) {
|
||||
computeImpact(cfg, pdg, cfgBuilder, targetLine);
|
||||
} else {
|
||||
// Show all dependencies
|
||||
System.out.println("\n=== All Dependencies ===");
|
||||
pdg.printPDG();
|
||||
cfgBuilder.printLineMapping(cfg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes and displays the change impact for a specific line of code.
|
||||
*
|
||||
* Change impact is determined by computing a forward slice from the target line,
|
||||
* which identifies all statements that could be affected by modifying the target.
|
||||
* This includes both direct dependencies (data flow) and indirect dependencies
|
||||
* (control flow).
|
||||
*
|
||||
* @param cfg The Control Flow Graph of the program
|
||||
* @param pdg The Program Dependence Graph containing dependency information
|
||||
* @param cfgBuilder The CFG builder for line number mapping
|
||||
* @param targetLine The line number to analyze for change impact
|
||||
*/
|
||||
private static void computeImpact(ControlFlowGraph cfg, PDG pdg,
|
||||
CFGBuilder cfgBuilder, int targetLine) {
|
||||
System.out.println("\n=== Impact Analysis for Line " + targetLine + " ===");
|
||||
|
||||
// Find nodes at target line
|
||||
List<Node> nodesAtLine = cfgBuilder.findNodesAtLine(cfg, targetLine);
|
||||
|
||||
if (nodesAtLine.isEmpty()) {
|
||||
System.out.println("WARNING: No executable statement at line " + targetLine);
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("\nStatement(s) at line " + targetLine + ":");
|
||||
for (Node node : nodesAtLine) {
|
||||
System.out.println(" " + node.label());
|
||||
}
|
||||
|
||||
// Compute forward slice: all nodes reachable via dependencies
|
||||
// The forward slice represents all statements that could be affected
|
||||
// by changes to the target line
|
||||
Set<String> allImpacted = new HashSet<>();
|
||||
for (Node node : nodesAtLine) {
|
||||
Set<String> impacted = pdg.computeForwardSlice(node.label());
|
||||
allImpacted.addAll(impacted);
|
||||
}
|
||||
|
||||
// Convert to line numbers
|
||||
Set<Integer> impactedLines = new TreeSet<>();
|
||||
for (Node node : cfg.nodes()) {
|
||||
if (allImpacted.contains(node.label())) {
|
||||
int line = cfgBuilder.getLineNumber(node);
|
||||
if (line > 0) {
|
||||
impactedLines.add(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("\n=== IMPACTED LINES ===");
|
||||
if (impactedLines.isEmpty()) {
|
||||
System.out.println(" (none)");
|
||||
} else {
|
||||
for (int line : impactedLines) {
|
||||
System.out.println(" Line " + line);
|
||||
}
|
||||
System.out.println("\nTotal: " + impactedLines.size() + " lines impacted");
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
src/org/.DS_Store
vendored
BIN
src/org/.DS_Store
vendored
Binary file not shown.
BIN
src/org/lsmr/.DS_Store
vendored
BIN
src/org/lsmr/.DS_Store
vendored
Binary file not shown.
BIN
src/org/lsmr/cfg/.DS_Store
vendored
BIN
src/org/lsmr/cfg/.DS_Store
vendored
Binary file not shown.
@@ -1,312 +0,0 @@
|
||||
package org.lsmr.cfg;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.antlr.v4.runtime.tree.ParseTree;
|
||||
import org.lsmr.cfg.Edge.EdgeLabel;
|
||||
import org.lsmr.cfg.Java1_4Parser.StatementContext;
|
||||
|
||||
/**
|
||||
* Represents mathematical graphs. Each graph contains a set of nodes, each of
|
||||
* which will refer to this graph as its container, and a set of edges, each of
|
||||
* which will refer to this graph as its container and to two nodes that must be
|
||||
* in this graph. To guarantee that these constraints be met, nodes and edges
|
||||
* are read-only and have to be created indirectly from the graph in which they
|
||||
* exist.
|
||||
*/
|
||||
public class ControlFlowGraph {
|
||||
/**
|
||||
* Represents the entry point of this CFG. This will have no in-edges, but at
|
||||
* least one out-edge.
|
||||
*/
|
||||
public Node entry;
|
||||
|
||||
/**
|
||||
* Represents the exit point of this CFG for normal returns. This will have no
|
||||
* out-edges, but at least one in-edge.
|
||||
*/
|
||||
public Node normalExit;
|
||||
|
||||
/**
|
||||
* Represents the exit point of this CFG for exception throws. This will have no
|
||||
* out-edges, but at least one in-edge.
|
||||
*/
|
||||
public Node abruptExit;
|
||||
|
||||
private Map<String, List<Node>> nodes = new HashMap<>();
|
||||
private List<Edge> edges = new ArrayList<>();
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* Determines if this CFG contains the indicated node, using the
|
||||
* {@link Node#equals(Object)} method.
|
||||
*
|
||||
* @param n
|
||||
* The node to look for.
|
||||
* @return true if this CFG contains the indicated node; otherwise, false.
|
||||
*/
|
||||
public boolean containsNode(Node n) {
|
||||
String label = n.label();
|
||||
List<Node> list = nodes.get(label);
|
||||
|
||||
return list.contains(n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param name
|
||||
* The name of the graph. Cannot be null or empty.
|
||||
* @throws IllegalArgumentException
|
||||
* If the name is null or empty.
|
||||
*/
|
||||
public ControlFlowGraph(String name) {
|
||||
if (name == null || name.length() < 1)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
this.name = name;
|
||||
|
||||
String entryLabel = "*ENTRY*";
|
||||
entry = new Node(entryLabel);
|
||||
entry.setGraph(this);
|
||||
nodes.put(entryLabel, new ArrayList<>(Arrays.asList(entry)));
|
||||
|
||||
String exitLabel = "*EXIT*";
|
||||
normalExit = new Node(exitLabel);
|
||||
normalExit.setGraph(this);
|
||||
nodes.put(exitLabel, new ArrayList<>(Arrays.asList(normalExit)));
|
||||
|
||||
String abruptExitLabel = "*THROWN*";
|
||||
abruptExit = new Node(abruptExitLabel);
|
||||
abruptExit.setGraph(this);
|
||||
nodes.put(abruptExitLabel, new ArrayList<>(Arrays.asList(abruptExit)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Accesses the set of nodes defined on this graph.
|
||||
*
|
||||
* @return An immutable set of all nodes defined on this graph.
|
||||
*/
|
||||
public List<Node> nodes() {
|
||||
ArrayList<Node> result = new ArrayList<>();
|
||||
|
||||
for (List<Node> list : nodes.values())
|
||||
result.addAll(list);
|
||||
|
||||
return Collections.unmodifiableList(result);
|
||||
}
|
||||
|
||||
public List<Integer> getAllLineNumbers() {
|
||||
List<Integer> lineNumbers = new ArrayList<>();
|
||||
|
||||
for (List<Node> listNodes : this.nodes.values()) {
|
||||
for (Node n : listNodes) {
|
||||
lineNumbers.add(n.getLineNumber());
|
||||
}
|
||||
}
|
||||
return lineNumbers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accesses the set of edges defined on this graph.
|
||||
*
|
||||
* @return An immutable set of all edges defined on this graph.
|
||||
*/
|
||||
public List<Edge> edges() {
|
||||
return Collections.unmodifiableList(edges);
|
||||
}
|
||||
|
||||
/**
|
||||
* Accesses the first node with label as its label.
|
||||
*
|
||||
* @param label
|
||||
* The label to locate. Must not be null.
|
||||
* @return The first node with the indicated label, or null if nonesuch exists.
|
||||
*/
|
||||
public Node findNode(String label) {
|
||||
List<Node> list = nodes.get(label);
|
||||
|
||||
if (list != null && list.size() > 0)
|
||||
return list.get(0);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accesses the first node with label as its label.
|
||||
*
|
||||
* @param label
|
||||
* The label to locate. Must not be null.
|
||||
* @return The first node with the indicated label, or null if nonesuch exists.
|
||||
*/
|
||||
public List<Node> findNodes(String label) {
|
||||
List<Node> list = nodes.get(label);
|
||||
|
||||
if (list != null)
|
||||
return Collections.unmodifiableList(list);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a node on this graph with the indicated label.
|
||||
*
|
||||
* @param label
|
||||
* A label for the new node that may be used in identifying it.
|
||||
* Cannot be null or empty.
|
||||
* @return The newly created node.
|
||||
* @throws IllegalArgumentException
|
||||
* If the label is null or empty.
|
||||
*/
|
||||
public Node buildNode(String label) {
|
||||
if (label == null || label.length() < 1)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
Node node = new Node(label);
|
||||
List<Node> list;
|
||||
|
||||
if (nodes.containsKey(label))
|
||||
list = nodes.get(label);
|
||||
else {
|
||||
list = new ArrayList<>();
|
||||
nodes.put(label, list);
|
||||
}
|
||||
|
||||
list.add(node);
|
||||
node.setGraph(this);
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an edge on this graph with the indicated label.
|
||||
*
|
||||
* @param source
|
||||
* The source node. Cannot be null.
|
||||
* @param target
|
||||
* The target node. Cannot be null.
|
||||
* @param label
|
||||
* A label for the new edge that may be used in identifying it.
|
||||
* Cannot be null or empty.
|
||||
* @return The newly created edge.
|
||||
* @throws IllegalArgumentException
|
||||
* If the label is null or empty or either of
|
||||
* the indicated nodes is
|
||||
* null.
|
||||
*/
|
||||
public Edge buildEdge(Node source, Node target, EdgeLabel label) {
|
||||
if (source == null || label == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
Edge edge = new Edge(source, target, label);
|
||||
|
||||
edges.add(edge);
|
||||
edge.setGraph(this);
|
||||
source.addOutEdge(edge);
|
||||
|
||||
if (target != null)
|
||||
target.addInEdge(edge);
|
||||
|
||||
return edge;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an edge on this graph with the indicated label.
|
||||
*
|
||||
* @param source
|
||||
* The source node. Cannot be null.
|
||||
* @param target
|
||||
* The target node. Cannot be null.
|
||||
* @param label
|
||||
* A label for the new edge that may be used in identifying
|
||||
* it.
|
||||
* Cannot be null or empty.
|
||||
* @param extendedLabel
|
||||
* An extension to the label for the new edge that may be
|
||||
* used in
|
||||
* identifying it.
|
||||
* @return The newly created edge.
|
||||
* @throws IllegalArgumentException
|
||||
* If the label is null or empty or either of
|
||||
* the indicated nodes is
|
||||
* null.
|
||||
*/
|
||||
public Edge buildEdge(Node source, Node target, EdgeLabel label, String extendedLabel) {
|
||||
if (source == null || label == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
Edge edge = new Edge(source, target, label, extendedLabel);
|
||||
|
||||
edges.add(edge);
|
||||
edge.setGraph(this);
|
||||
source.addOutEdge(edge);
|
||||
|
||||
if (target != null)
|
||||
target.addInEdge(edge);
|
||||
|
||||
return edge;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof ControlFlowGraph))
|
||||
return false;
|
||||
|
||||
ControlFlowGraph other = (ControlFlowGraph) obj;
|
||||
|
||||
return areEqual(nodes, other.nodes) && areEqual(edges, other.edges);
|
||||
}
|
||||
|
||||
private static boolean areEqual(Map<String, List<Node>> nodes1, Map<String, List<Node>> nodes2) {
|
||||
List<Node> list1 = new ArrayList<>();
|
||||
List<Node> list2 = new ArrayList<>();
|
||||
|
||||
for (List<Node> nodeList : nodes1.values())
|
||||
list1.addAll(nodeList);
|
||||
|
||||
for (List<Node> nodeList : nodes2.values())
|
||||
list2.addAll(nodeList);
|
||||
|
||||
if (list1.size() != list2.size())
|
||||
return false;
|
||||
|
||||
for (Node n : list1)
|
||||
if (!list2.contains(n))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean areEqual(List<Edge> edges1, List<Edge> edges2) {
|
||||
if (edges1.size() != edges2.size())
|
||||
return false;
|
||||
|
||||
for (Edge edge : edges1) {
|
||||
if (!edges2.contains(edge))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("graph ");
|
||||
sb.append(name);
|
||||
sb.append(": nodes [");
|
||||
sb.append(nodes.toString());
|
||||
sb.append("], edges [");
|
||||
sb.append(edges.toString());
|
||||
sb.append("]");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
@@ -1,207 +0,0 @@
|
||||
package org.lsmr.cfg;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Represents an edge in a graph. During construction of a graph, it can be that
|
||||
* edges are not fully initialized on a first pass.
|
||||
*/
|
||||
public class Edge {
|
||||
|
||||
/**
|
||||
* The legal labels to use on edges.
|
||||
*/
|
||||
public static enum EdgeLabel {
|
||||
/**
|
||||
* Represents a default edge without no label to test for branching.
|
||||
*/
|
||||
BLANK,
|
||||
/**
|
||||
* Represents a true branch.
|
||||
*/
|
||||
TRUE,
|
||||
/**
|
||||
* Represents a false branch.
|
||||
*/
|
||||
FALSE,
|
||||
/**
|
||||
* Represents a branch taken when an exception is thrown.
|
||||
*/
|
||||
THROWN,
|
||||
/**
|
||||
* Represents a branch taken when an exception is thrown but delayed for completion in a finally block.
|
||||
*/
|
||||
THROWN_DELAYED,
|
||||
/**
|
||||
* Represents a branch taken when an exception is definitively caught.
|
||||
*/
|
||||
CAUGHT,
|
||||
/**
|
||||
* Represents a branch taken when the corresponding extended label is matched.
|
||||
*/
|
||||
CASE;
|
||||
|
||||
public String toString() {
|
||||
switch(this) {
|
||||
case BLANK:
|
||||
return "";
|
||||
|
||||
default:
|
||||
return super.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Node source;
|
||||
Node target;
|
||||
private EdgeLabel label;
|
||||
private String extendedLabel;
|
||||
private ControlFlowGraph graph;
|
||||
|
||||
Edge(Node source, Node target, EdgeLabel label) {
|
||||
this(source, target, label, "");
|
||||
}
|
||||
|
||||
Edge(Node source, Node target, EdgeLabel label, String extendedLabel) {
|
||||
if(source == null || label == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
this.source = source;
|
||||
this.target = target;
|
||||
this.label = label;
|
||||
this.extendedLabel = extendedLabel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the source node for this edge.
|
||||
*
|
||||
* @return The source node. Should not be null.
|
||||
*/
|
||||
public Node source() {
|
||||
return source;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the target node for this edge.
|
||||
*
|
||||
* @return The target node. May be null if it has not been fully initialized.
|
||||
*/
|
||||
public Node target() {
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the kind of edge represented: BLANK if default.
|
||||
*
|
||||
* @return The label of this edge. Should not be null.
|
||||
*/
|
||||
public EdgeLabel label() {
|
||||
return label;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the extended label for edges whose labels cannot be purely
|
||||
* represented via an enum constant.
|
||||
*
|
||||
* @return The extended label of this edge. Should not be null; may be empty.
|
||||
*/
|
||||
public String extendedLabel() {
|
||||
return extendedLabel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the graph in which this edge occurs.
|
||||
*
|
||||
* @return The graph in which this edge occurs. Should not be null unless the
|
||||
* edge is not fully initialized.
|
||||
*/
|
||||
public ControlFlowGraph graph() {
|
||||
return graph;
|
||||
}
|
||||
|
||||
void setTarget(Node target) {
|
||||
if(target == null || target.graph() != graph)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
this.target = target;
|
||||
|
||||
if(target != null)
|
||||
target.addInEdge(this);
|
||||
}
|
||||
|
||||
void setGraph(ControlFlowGraph graph) {
|
||||
if(this.graph != null) {
|
||||
if(graph == null)
|
||||
this.graph = null;
|
||||
else
|
||||
throw new IllegalStateException("Non-null graph cannot be swapped to another. Erase it first");
|
||||
}
|
||||
else if(graph == null)
|
||||
throw new IllegalStateException("Null graph should not be set to null again");
|
||||
else
|
||||
this.graph = graph;
|
||||
|
||||
if(!graph.containsNode(source))
|
||||
throw new IllegalStateException("Edge source not member of graph");
|
||||
|
||||
if(target != null && !graph.containsNode(target))
|
||||
throw new IllegalStateException("Edge target not member of graph");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = 17;
|
||||
|
||||
result = 31 * result + source.hashCode();
|
||||
result = 31 * result + (target != null ? target.hashCode() : 0);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if(obj instanceof Edge) {
|
||||
Edge other = (Edge)obj;
|
||||
|
||||
if(label != null)
|
||||
return label.equals(other.label);
|
||||
|
||||
if(source.equals(other.source)) {
|
||||
if(target == null) {
|
||||
if(other.target == null)
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return target.equals(other.target);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("edge");
|
||||
|
||||
String ls = label.toString();
|
||||
|
||||
if(ls != "") {
|
||||
sb.append(" ");
|
||||
sb.append(ls);
|
||||
|
||||
if(extendedLabel != null) {
|
||||
sb.append(" ");
|
||||
sb.append(extendedLabel);
|
||||
}
|
||||
}
|
||||
|
||||
sb.append(": (");
|
||||
sb.append(source.label());
|
||||
sb.append(", ");
|
||||
sb.append(target == null ? "null" : target.label());
|
||||
sb.append(")");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
@@ -1,891 +0,0 @@
|
||||
// Generated from Java1_4Lexer.g4 by ANTLR 4.13.2
|
||||
|
||||
package org.lsmr.cfg;
|
||||
|
||||
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", "CheckReturnValue", "this-escape"})
|
||||
public class Java1_4Lexer extends Lexer {
|
||||
static { RuntimeMetaData.checkVersion("4.13.2", RuntimeMetaData.VERSION); }
|
||||
|
||||
protected static final DFA[] _decisionToDFA;
|
||||
protected static final PredictionContextCache _sharedContextCache =
|
||||
new PredictionContextCache();
|
||||
public static final int
|
||||
ABSTRACT=1, ASSERT=2, BOOLEAN=3, BREAK=4, BYTE=5, CASE=6, CATCH=7, CHAR=8,
|
||||
CLASS=9, CONTINUE=10, DEFAULT=11, DO=12, DOUBLE=13, ELSE=14, EXTENDS=15,
|
||||
FINAL=16, FINALLY=17, FLOAT=18, FOR=19, IF=20, IMPLEMENTS=21, IMPORT=22,
|
||||
INSTANCEOF=23, INT=24, INTERFACE=25, LONG=26, NATIVE=27, NEW=28, PACKAGE=29,
|
||||
PRIVATE=30, PROTECTED=31, PUBLIC=32, RETURN=33, SHORT=34, STATIC=35, STRICTFP=36,
|
||||
SUPER=37, SWITCH=38, SYNCHRONIZED=39, THIS=40, THROW=41, THROWS=42, TRANSIENT=43,
|
||||
TRY=44, VOID=45, VOLATILE=46, WHILE=47, SEMICOLON=48, COMMA=49, PERIOD=50,
|
||||
OPEN_PARENTHESIS=51, CLOSE_PARENTHESIS=52, OPEN_BRACE=53, CLOSE_BRACE=54,
|
||||
OPEN_BRACKET=55, CLOSE_BRACKET=56, COLON=57, QUESTION=58, EQUALS=59, PLUS=60,
|
||||
MINUS=61, ASTERISK=62, SLASH=63, PERCENT=64, DOUBLE_PLUS=65, DOUBLE_MINUS=66,
|
||||
EXCLAMATION=67, TILDE=68, DOUBLE_EQUALS=69, EXCLAMATION_EQUALS=70, LESS_THAN=71,
|
||||
GREATER_THAN=72, LESS_THAN_OR_EQUALS=73, GREATER_THAN_OR_EQUALS=74, DOUBLE_AMPERSAND=75,
|
||||
DOUBLE_PIPE=76, AMPERSAND=77, PIPE=78, CARET=79, DOUBLE_LESS_THAN=80,
|
||||
DOUBLE_GREATER_THAN=81, TRIPLE_GREATER_THAN=82, PLUS_EQUALS=83, MINUS_EQUALS=84,
|
||||
ASTERISK_EQUALS=85, SLASH_EQUALS=86, AMPERSAND_EQUALS=87, PIPE_EQUALS=88,
|
||||
CARET_EQUALS=89, PERCENT_EQUALS=90, DOUBLE_LESS_THAN_EQUALS=91, DOUBLE_GREATER_THAN_EQUALS=92,
|
||||
TRIPLE_GREATER_THAN_EQUALS=93, Identifier=94, IntegerLiteral=95, FloatingPointLiteral=96,
|
||||
CharacterLiteral=97, StringLiteral=98, BooleanLiteral=99, NullLiteral=100,
|
||||
WHITESPACE=101, LINE_COMMENT=102, COMMENT=103;
|
||||
public static String[] channelNames = {
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||
};
|
||||
|
||||
public static String[] modeNames = {
|
||||
"DEFAULT_MODE"
|
||||
};
|
||||
|
||||
private static String[] makeRuleNames() {
|
||||
return new String[] {
|
||||
"ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", "CHAR",
|
||||
"CLASS", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "EXTENDS", "FINAL",
|
||||
"FINALLY", "FLOAT", "FOR", "IF", "IMPLEMENTS", "IMPORT", "INSTANCEOF",
|
||||
"INT", "INTERFACE", "LONG", "NATIVE", "NEW", "PACKAGE", "PRIVATE", "PROTECTED",
|
||||
"PUBLIC", "RETURN", "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH",
|
||||
"SYNCHRONIZED", "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID",
|
||||
"VOLATILE", "WHILE", "SEMICOLON", "COMMA", "PERIOD", "OPEN_PARENTHESIS",
|
||||
"CLOSE_PARENTHESIS", "OPEN_BRACE", "CLOSE_BRACE", "OPEN_BRACKET", "CLOSE_BRACKET",
|
||||
"COLON", "QUESTION", "EQUALS", "PLUS", "MINUS", "ASTERISK", "SLASH",
|
||||
"PERCENT", "DOUBLE_PLUS", "DOUBLE_MINUS", "EXCLAMATION", "TILDE", "DOUBLE_EQUALS",
|
||||
"EXCLAMATION_EQUALS", "LESS_THAN", "GREATER_THAN", "LESS_THAN_OR_EQUALS",
|
||||
"GREATER_THAN_OR_EQUALS", "DOUBLE_AMPERSAND", "DOUBLE_PIPE", "AMPERSAND",
|
||||
"PIPE", "CARET", "DOUBLE_LESS_THAN", "DOUBLE_GREATER_THAN", "TRIPLE_GREATER_THAN",
|
||||
"PLUS_EQUALS", "MINUS_EQUALS", "ASTERISK_EQUALS", "SLASH_EQUALS", "AMPERSAND_EQUALS",
|
||||
"PIPE_EQUALS", "CARET_EQUALS", "PERCENT_EQUALS", "DOUBLE_LESS_THAN_EQUALS",
|
||||
"DOUBLE_GREATER_THAN_EQUALS", "TRIPLE_GREATER_THAN_EQUALS", "Identifier",
|
||||
"JavaLetter", "JavaLetterOrDigit", "IntegerLiteral", "FloatingPointLiteral",
|
||||
"CharacterLiteral", "StringLiteral", "BooleanLiteral", "NullLiteral",
|
||||
"WHITESPACE", "LINE_COMMENT", "COMMENT"
|
||||
};
|
||||
}
|
||||
public static final String[] ruleNames = makeRuleNames();
|
||||
|
||||
private static String[] makeLiteralNames() {
|
||||
return new String[] {
|
||||
null, "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", "'case'",
|
||||
"'catch'", "'char'", "'class'", "'continue'", "'default'", "'do'", "'double'",
|
||||
"'else'", "'extends'", "'final'", "'finally'", "'float'", "'for'", "'if'",
|
||||
"'implements'", "'import'", "'instanceof'", "'int'", "'interface'", "'long'",
|
||||
"'native'", "'new'", "'package'", "'private'", "'protected'", "'public'",
|
||||
"'return'", "'short'", "'static'", "'strictfp'", "'super'", "'switch'",
|
||||
"'synchronized'", "'this'", "'throw'", "'throws'", "'transient'", "'try'",
|
||||
"'void'", "'volatile'", "'while'", "';'", "','", "'.'", "'('", "')'",
|
||||
"'{'", "'}'", "'['", "']'", "':'", "'?'", "'='", "'+'", "'-'", "'*'",
|
||||
"'/'", "'%'", "'++'", "'--'", "'!'", "'~'", "'=='", "'!='", "'<'", "'>'",
|
||||
"'<='", "'>='", "'&&'", "'||'", "'&'", "'|'", "'^'", "'<<'", "'>>'",
|
||||
"'>>>'", "'+='", "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", "'%='",
|
||||
"'<<='", "'>>='", "'>>>='", null, null, null, null, null, null, "'null'"
|
||||
};
|
||||
}
|
||||
private static final String[] _LITERAL_NAMES = makeLiteralNames();
|
||||
private static String[] makeSymbolicNames() {
|
||||
return new String[] {
|
||||
null, "ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH",
|
||||
"CHAR", "CLASS", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "EXTENDS",
|
||||
"FINAL", "FINALLY", "FLOAT", "FOR", "IF", "IMPLEMENTS", "IMPORT", "INSTANCEOF",
|
||||
"INT", "INTERFACE", "LONG", "NATIVE", "NEW", "PACKAGE", "PRIVATE", "PROTECTED",
|
||||
"PUBLIC", "RETURN", "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH",
|
||||
"SYNCHRONIZED", "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID",
|
||||
"VOLATILE", "WHILE", "SEMICOLON", "COMMA", "PERIOD", "OPEN_PARENTHESIS",
|
||||
"CLOSE_PARENTHESIS", "OPEN_BRACE", "CLOSE_BRACE", "OPEN_BRACKET", "CLOSE_BRACKET",
|
||||
"COLON", "QUESTION", "EQUALS", "PLUS", "MINUS", "ASTERISK", "SLASH",
|
||||
"PERCENT", "DOUBLE_PLUS", "DOUBLE_MINUS", "EXCLAMATION", "TILDE", "DOUBLE_EQUALS",
|
||||
"EXCLAMATION_EQUALS", "LESS_THAN", "GREATER_THAN", "LESS_THAN_OR_EQUALS",
|
||||
"GREATER_THAN_OR_EQUALS", "DOUBLE_AMPERSAND", "DOUBLE_PIPE", "AMPERSAND",
|
||||
"PIPE", "CARET", "DOUBLE_LESS_THAN", "DOUBLE_GREATER_THAN", "TRIPLE_GREATER_THAN",
|
||||
"PLUS_EQUALS", "MINUS_EQUALS", "ASTERISK_EQUALS", "SLASH_EQUALS", "AMPERSAND_EQUALS",
|
||||
"PIPE_EQUALS", "CARET_EQUALS", "PERCENT_EQUALS", "DOUBLE_LESS_THAN_EQUALS",
|
||||
"DOUBLE_GREATER_THAN_EQUALS", "TRIPLE_GREATER_THAN_EQUALS", "Identifier",
|
||||
"IntegerLiteral", "FloatingPointLiteral", "CharacterLiteral", "StringLiteral",
|
||||
"BooleanLiteral", "NullLiteral", "WHITESPACE", "LINE_COMMENT", "COMMENT"
|
||||
};
|
||||
}
|
||||
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 Java1_4Lexer(CharStream input) {
|
||||
super(input);
|
||||
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGrammarFileName() { return "Java1_4Lexer.g4"; }
|
||||
|
||||
@Override
|
||||
public String[] getRuleNames() { return ruleNames; }
|
||||
|
||||
@Override
|
||||
public String getSerializedATN() { return _serializedATN; }
|
||||
|
||||
@Override
|
||||
public String[] getChannelNames() { return channelNames; }
|
||||
|
||||
@Override
|
||||
public String[] getModeNames() { return modeNames; }
|
||||
|
||||
@Override
|
||||
public ATN getATN() { return _ATN; }
|
||||
|
||||
public static final String _serializedATN =
|
||||
"\u0004\u0000g\u02ef\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
|
||||
"\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
|
||||
"\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
|
||||
"\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
|
||||
"\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+
|
||||
"\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+
|
||||
"\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+
|
||||
"\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+
|
||||
"\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+
|
||||
"\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+
|
||||
"\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+
|
||||
"!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+
|
||||
"&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+
|
||||
"+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+
|
||||
"0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+
|
||||
"5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+
|
||||
":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+
|
||||
"?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007"+
|
||||
"D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007"+
|
||||
"I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007"+
|
||||
"N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007"+
|
||||
"S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007"+
|
||||
"X\u0002Y\u0007Y\u0002Z\u0007Z\u0002[\u0007[\u0002\\\u0007\\\u0002]\u0007"+
|
||||
"]\u0002^\u0007^\u0002_\u0007_\u0002`\u0007`\u0002a\u0007a\u0002b\u0007"+
|
||||
"b\u0002c\u0007c\u0002d\u0007d\u0002e\u0007e\u0002f\u0007f\u0002g\u0007"+
|
||||
"g\u0002h\u0007h\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+
|
||||
"\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+
|
||||
"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+
|
||||
"\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001"+
|
||||
"\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+
|
||||
"\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+
|
||||
"\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+
|
||||
"\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+
|
||||
"\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b"+
|
||||
"\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001"+
|
||||
"\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+
|
||||
"\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f"+
|
||||
"\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+
|
||||
"\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+
|
||||
"\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+
|
||||
"\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001"+
|
||||
"\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+
|
||||
"\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+
|
||||
"\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+
|
||||
"\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+
|
||||
"\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+
|
||||
"\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+
|
||||
"\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+
|
||||
"\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+
|
||||
"\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001"+
|
||||
"\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+
|
||||
"\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
|
||||
"\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+
|
||||
"\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+
|
||||
"\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+
|
||||
"\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+
|
||||
"\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001"+
|
||||
"\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+
|
||||
"\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+
|
||||
"\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+
|
||||
" \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001"+
|
||||
"\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#"+
|
||||
"\u0001#\u0001#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+
|
||||
"$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001"+
|
||||
"&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+
|
||||
"&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001("+
|
||||
"\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001"+
|
||||
"*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+
|
||||
"+\u0001+\u0001+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001"+
|
||||
"-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001"+
|
||||
".\u0001.\u0001.\u0001.\u0001/\u0001/\u00010\u00010\u00011\u00011\u0001"+
|
||||
"2\u00012\u00013\u00013\u00014\u00014\u00015\u00015\u00016\u00016\u0001"+
|
||||
"7\u00017\u00018\u00018\u00019\u00019\u0001:\u0001:\u0001;\u0001;\u0001"+
|
||||
"<\u0001<\u0001=\u0001=\u0001>\u0001>\u0001?\u0001?\u0001@\u0001@\u0001"+
|
||||
"@\u0001A\u0001A\u0001A\u0001B\u0001B\u0001C\u0001C\u0001D\u0001D\u0001"+
|
||||
"D\u0001E\u0001E\u0001E\u0001F\u0001F\u0001G\u0001G\u0001H\u0001H\u0001"+
|
||||
"H\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001"+
|
||||
"L\u0001L\u0001M\u0001M\u0001N\u0001N\u0001O\u0001O\u0001O\u0001P\u0001"+
|
||||
"P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001S\u0001"+
|
||||
"S\u0001S\u0001T\u0001T\u0001T\u0001U\u0001U\u0001U\u0001V\u0001V\u0001"+
|
||||
"V\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001Y\u0001Y\u0001Y\u0001"+
|
||||
"Z\u0001Z\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001\\\u0001\\\u0001"+
|
||||
"\\\u0001\\\u0001\\\u0001]\u0001]\u0005]\u0290\b]\n]\f]\u0293\t]\u0001"+
|
||||
"^\u0003^\u0296\b^\u0001_\u0001_\u0003_\u029a\b_\u0001`\u0004`\u029d\b"+
|
||||
"`\u000b`\f`\u029e\u0001a\u0004a\u02a2\ba\u000ba\fa\u02a3\u0001a\u0001"+
|
||||
"a\u0005a\u02a8\ba\na\fa\u02ab\ta\u0001b\u0001b\u0001b\u0001b\u0003b\u02b1"+
|
||||
"\bb\u0001b\u0001b\u0001c\u0001c\u0001c\u0001c\u0005c\u02b9\bc\nc\fc\u02bc"+
|
||||
"\tc\u0001c\u0001c\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001d\u0001"+
|
||||
"d\u0001d\u0003d\u02c9\bd\u0001e\u0001e\u0001e\u0001e\u0001e\u0001f\u0004"+
|
||||
"f\u02d1\bf\u000bf\ff\u02d2\u0001f\u0001f\u0001g\u0001g\u0001g\u0001g\u0005"+
|
||||
"g\u02db\bg\ng\fg\u02de\tg\u0001g\u0001g\u0001h\u0001h\u0001h\u0001h\u0005"+
|
||||
"h\u02e6\bh\nh\fh\u02e9\th\u0001h\u0001h\u0001h\u0001h\u0001h\u0001\u02e7"+
|
||||
"\u0000i\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b"+
|
||||
"\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b"+
|
||||
"\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016"+
|
||||
"-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\""+
|
||||
"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w<y={>}?\u007f@\u0081"+
|
||||
"A\u0083B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095"+
|
||||
"K\u0097L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9"+
|
||||
"U\u00abV\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd"+
|
||||
"\u0000\u00bf\u0000\u00c1_\u00c3`\u00c5a\u00c7b\u00c9c\u00cbd\u00cde\u00cf"+
|
||||
"f\u00d1g\u0001\u0000\u0007\u0294\u0000$$AZ__az\u00a2\u00a5\u00aa\u00aa"+
|
||||
"\u00b5\u00b5\u00ba\u00ba\u00c0\u00d6\u00d8\u00f6\u00f8\u02af\u0370\u0373"+
|
||||
"\u0376\u0377\u037b\u037d\u037f\u037f\u0386\u0386\u0388\u038a\u038c\u038c"+
|
||||
"\u038e\u03a1\u03a3\u03f5\u03f7\u0481\u048a\u052f\u0531\u0556\u0560\u0588"+
|
||||
"\u058f\u058f\u05d0\u05ea\u05ef\u05f2\u060b\u060b\u0620\u063f\u0641\u064a"+
|
||||
"\u066e\u066f\u0671\u06d3\u06d5\u06d5\u06ee\u06ef\u06fa\u06fc\u06ff\u06ff"+
|
||||
"\u0710\u0710\u0712\u072f\u074d\u07a5\u07b1\u07b1\u07ca\u07ea\u07fe\u0815"+
|
||||
"\u0840\u0858\u0860\u086a\u0870\u0887\u0889\u088e\u08a0\u08c8\u0904\u0939"+
|
||||
"\u093d\u093d\u0950\u0950\u0958\u0961\u0972\u0980\u0985\u098c\u098f\u0990"+
|
||||
"\u0993\u09a8\u09aa\u09b0\u09b2\u09b2\u09b6\u09b9\u09bd\u09bd\u09ce\u09ce"+
|
||||
"\u09dc\u09dd\u09df\u09e1\u09f0\u09f3\u09fb\u09fc\u0a05\u0a0a\u0a0f\u0a10"+
|
||||
"\u0a13\u0a28\u0a2a\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59\u0a5c"+
|
||||
"\u0a5e\u0a5e\u0a72\u0a74\u0a85\u0a8d\u0a8f\u0a91\u0a93\u0aa8\u0aaa\u0ab0"+
|
||||
"\u0ab2\u0ab3\u0ab5\u0ab9\u0abd\u0abd\u0ad0\u0ad0\u0ae0\u0ae1\u0af1\u0af1"+
|
||||
"\u0af9\u0af9\u0b05\u0b0c\u0b0f\u0b10\u0b13\u0b28\u0b2a\u0b30\u0b32\u0b33"+
|
||||
"\u0b35\u0b39\u0b3d\u0b3d\u0b5c\u0b5d\u0b5f\u0b61\u0b71\u0b71\u0b83\u0b83"+
|
||||
"\u0b85\u0b8a\u0b8e\u0b90\u0b92\u0b95\u0b99\u0b9a\u0b9c\u0b9c\u0b9e\u0b9f"+
|
||||
"\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0bb9\u0bd0\u0bd0\u0bf9\u0bf9\u0c05\u0c0c"+
|
||||
"\u0c0e\u0c10\u0c12\u0c28\u0c2a\u0c39\u0c3d\u0c3d\u0c58\u0c5a\u0c5d\u0c5d"+
|
||||
"\u0c60\u0c61\u0c80\u0c80\u0c85\u0c8c\u0c8e\u0c90\u0c92\u0ca8\u0caa\u0cb3"+
|
||||
"\u0cb5\u0cb9\u0cbd\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04\u0d0c"+
|
||||
"\u0d0e\u0d10\u0d12\u0d3a\u0d3d\u0d3d\u0d4e\u0d4e\u0d54\u0d56\u0d5f\u0d61"+
|
||||
"\u0d7a\u0d7f\u0d85\u0d96\u0d9a\u0db1\u0db3\u0dbb\u0dbd\u0dbd\u0dc0\u0dc6"+
|
||||
"\u0e01\u0e30\u0e32\u0e33\u0e3f\u0e45\u0e81\u0e82\u0e84\u0e84\u0e86\u0e8a"+
|
||||
"\u0e8c\u0ea3\u0ea5\u0ea5\u0ea7\u0eb0\u0eb2\u0eb3\u0ebd\u0ebd\u0ec0\u0ec4"+
|
||||
"\u0edc\u0edf\u0f00\u0f00\u0f40\u0f47\u0f49\u0f6c\u0f88\u0f8c\u1000\u102a"+
|
||||
"\u103f\u103f\u1050\u1055\u105a\u105d\u1061\u1061\u1065\u1066\u106e\u1070"+
|
||||
"\u1075\u1081\u108e\u108e\u10a0\u10c5\u10c7\u10c7\u10cd\u10cd\u10d0\u10fa"+
|
||||
"\u10fd\u1248\u124a\u124d\u1250\u1256\u1258\u1258\u125a\u125d\u1260\u1288"+
|
||||
"\u128a\u128d\u1290\u12b0\u12b2\u12b5\u12b8\u12be\u12c0\u12c0\u12c2\u12c5"+
|
||||
"\u12c8\u12d6\u12d8\u1310\u1312\u1315\u1318\u135a\u1380\u138f\u13a0\u13f5"+
|
||||
"\u13f8\u13fd\u1401\u166c\u166f\u167f\u1681\u169a\u16a0\u16ea\u16ee\u16f8"+
|
||||
"\u1700\u1711\u171f\u1731\u1740\u1751\u1760\u176c\u176e\u1770\u1780\u17b3"+
|
||||
"\u17db\u17dc\u1820\u1842\u1844\u1878\u1880\u1884\u1887\u18a8\u18aa\u18aa"+
|
||||
"\u18b0\u18f5\u1900\u191e\u1950\u196d\u1970\u1974\u1980\u19ab\u19b0\u19c9"+
|
||||
"\u1a00\u1a16\u1a20\u1a54\u1b05\u1b33\u1b45\u1b4c\u1b83\u1ba0\u1bae\u1baf"+
|
||||
"\u1bba\u1be5\u1c00\u1c23\u1c4d\u1c4f\u1c5a\u1c77\u1c80\u1c88\u1c90\u1cba"+
|
||||
"\u1cbd\u1cbf\u1ce9\u1cec\u1cee\u1cf3\u1cf5\u1cf6\u1cfa\u1cfa\u1d00\u1d2b"+
|
||||
"\u1d6b\u1d77\u1d79\u1d9a\u1e00\u1f15\u1f18\u1f1d\u1f20\u1f45\u1f48\u1f4d"+
|
||||
"\u1f50\u1f57\u1f59\u1f59\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f7d\u1f80\u1fb4"+
|
||||
"\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3\u1fd6\u1fdb"+
|
||||
"\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u203f\u2040\u2054\u2054\u20a0\u20c0"+
|
||||
"\u2102\u2102\u2107\u2107\u210a\u2113\u2115\u2115\u2119\u211d\u2124\u2124"+
|
||||
"\u2126\u2126\u2128\u2128\u212a\u212d\u212f\u2139\u213c\u213f\u2145\u2149"+
|
||||
"\u214e\u214e\u2160\u2188\u2c00\u2c7b\u2c7e\u2ce4\u2ceb\u2cee\u2cf2\u2cf3"+
|
||||
"\u2d00\u2d25\u2d27\u2d27\u2d2d\u2d2d\u2d30\u2d67\u2d80\u2d96\u2da0\u2da6"+
|
||||
"\u2da8\u2dae\u2db0\u2db6\u2db8\u2dbe\u2dc0\u2dc6\u2dc8\u2dce\u2dd0\u2dd6"+
|
||||
"\u2dd8\u2dde\u3006\u3007\u3021\u3029\u3038\u303a\u303c\u303c\u3041\u3096"+
|
||||
"\u309f\u309f\u30a1\u30fa\u30ff\u30ff\u3105\u312f\u3131\u318e\u31a0\u31bf"+
|
||||
"\u31f0\u31ff\u3400\u4dbf\u4e00\u8000\ua014\u8000\ua016\u8000\ua48c\u8000"+
|
||||
"\ua4d0\u8000\ua4f7\u8000\ua500\u8000\ua60b\u8000\ua610\u8000\ua61f\u8000"+
|
||||
"\ua62a\u8000\ua62b\u8000\ua640\u8000\ua66e\u8000\ua680\u8000\ua69b\u8000"+
|
||||
"\ua6a0\u8000\ua6ef\u8000\ua722\u8000\ua76f\u8000\ua771\u8000\ua787\u8000"+
|
||||
"\ua78b\u8000\ua7ca\u8000\ua7d0\u8000\ua7d1\u8000\ua7d3\u8000\ua7d3\u8000"+
|
||||
"\ua7d5\u8000\ua7d9\u8000\ua7f5\u8000\ua7f7\u8000\ua7fa\u8000\ua801\u8000"+
|
||||
"\ua803\u8000\ua805\u8000\ua807\u8000\ua80a\u8000\ua80c\u8000\ua822\u8000"+
|
||||
"\ua838\u8000\ua838\u8000\ua840\u8000\ua873\u8000\ua882\u8000\ua8b3\u8000"+
|
||||
"\ua8f2\u8000\ua8f7\u8000\ua8fb\u8000\ua8fb\u8000\ua8fd\u8000\ua8fe\u8000"+
|
||||
"\ua90a\u8000\ua925\u8000\ua930\u8000\ua946\u8000\ua960\u8000\ua97c\u8000"+
|
||||
"\ua984\u8000\ua9b2\u8000\ua9e0\u8000\ua9e4\u8000\ua9e7\u8000\ua9ef\u8000"+
|
||||
"\ua9fa\u8000\ua9fe\u8000\uaa00\u8000\uaa28\u8000\uaa40\u8000\uaa42\u8000"+
|
||||
"\uaa44\u8000\uaa4b\u8000\uaa60\u8000\uaa6f\u8000\uaa71\u8000\uaa76\u8000"+
|
||||
"\uaa7a\u8000\uaa7a\u8000\uaa7e\u8000\uaaaf\u8000\uaab1\u8000\uaab1\u8000"+
|
||||
"\uaab5\u8000\uaab6\u8000\uaab9\u8000\uaabd\u8000\uaac0\u8000\uaac0\u8000"+
|
||||
"\uaac2\u8000\uaac2\u8000\uaadb\u8000\uaadc\u8000\uaae0\u8000\uaaea\u8000"+
|
||||
"\uaaf2\u8000\uaaf2\u8000\uab01\u8000\uab06\u8000\uab09\u8000\uab0e\u8000"+
|
||||
"\uab11\u8000\uab16\u8000\uab20\u8000\uab26\u8000\uab28\u8000\uab2e\u8000"+
|
||||
"\uab30\u8000\uab5a\u8000\uab60\u8000\uab68\u8000\uab70\u8000\uabe2\u8000"+
|
||||
"\uac00\u8000\ud7a3\u8000\ud7b0\u8000\ud7c6\u8000\ud7cb\u8000\ud7fb\u8000"+
|
||||
"\uf900\u8000\ufa6d\u8000\ufa70\u8000\ufad9\u8000\ufb00\u8000\ufb06\u8000"+
|
||||
"\ufb13\u8000\ufb17\u8000\ufb1d\u8000\ufb1d\u8000\ufb1f\u8000\ufb28\u8000"+
|
||||
"\ufb2a\u8000\ufb36\u8000\ufb38\u8000\ufb3c\u8000\ufb3e\u8000\ufb3e\u8000"+
|
||||
"\ufb40\u8000\ufb41\u8000\ufb43\u8000\ufb44\u8000\ufb46\u8000\ufbb1\u8000"+
|
||||
"\ufbd3\u8000\ufd3d\u8000\ufd50\u8000\ufd8f\u8000\ufd92\u8000\ufdc7\u8000"+
|
||||
"\ufdf0\u8000\ufdfc\u8000\ufe33\u8000\ufe34\u8000\ufe4d\u8000\ufe4f\u8000"+
|
||||
"\ufe69\u8000\ufe69\u8000\ufe70\u8000\ufe74\u8000\ufe76\u8000\ufefc\u8000"+
|
||||
"\uff04\u8000\uff04\u8000\uff21\u8000\uff3a\u8000\uff3f\u8000\uff3f\u8000"+
|
||||
"\uff41\u8000\uff5a\u8000\uff66\u8000\uff6f\u8000\uff71\u8000\uff9d\u8000"+
|
||||
"\uffa0\u8000\uffbe\u8000\uffc2\u8000\uffc7\u8000\uffca\u8000\uffcf\u8000"+
|
||||
"\uffd2\u8000\uffd7\u8000\uffda\u8000\uffdc\u8000\uffe0\u8000\uffe1\u8000"+
|
||||
"\uffe5\u8000\uffe6\u8001\u0000\u8001\u000b\u8001\r\u8001&\u8001(\u8001"+
|
||||
":\u8001<\u8001=\u8001?\u8001M\u8001P\u8001]\u8001\u0080\u8001\u00fa\u8001"+
|
||||
"\u0140\u8001\u0174\u8001\u0280\u8001\u029c\u8001\u02a0\u8001\u02d0\u8001"+
|
||||
"\u0300\u8001\u031f\u8001\u032d\u8001\u034a\u8001\u0350\u8001\u0375\u8001"+
|
||||
"\u0380\u8001\u039d\u8001\u03a0\u8001\u03c3\u8001\u03c8\u8001\u03cf\u8001"+
|
||||
"\u03d1\u8001\u03d5\u8001\u0400\u8001\u049d\u8001\u04b0\u8001\u04d3\u8001"+
|
||||
"\u04d8\u8001\u04fb\u8001\u0500\u8001\u0527\u8001\u0530\u8001\u0563\u8001"+
|
||||
"\u0570\u8001\u057a\u8001\u057c\u8001\u058a\u8001\u058c\u8001\u0592\u8001"+
|
||||
"\u0594\u8001\u0595\u8001\u0597\u8001\u05a1\u8001\u05a3\u8001\u05b1\u8001"+
|
||||
"\u05b3\u8001\u05b9\u8001\u05bb\u8001\u05bc\u8001\u0600\u8001\u0736\u8001"+
|
||||
"\u0740\u8001\u0755\u8001\u0760\u8001\u0767\u8001\u0800\u8001\u0805\u8001"+
|
||||
"\u0808\u8001\u0808\u8001\u080a\u8001\u0835\u8001\u0837\u8001\u0838\u8001"+
|
||||
"\u083c\u8001\u083c\u8001\u083f\u8001\u0855\u8001\u0860\u8001\u0876\u8001"+
|
||||
"\u0880\u8001\u089e\u8001\u08e0\u8001\u08f2\u8001\u08f4\u8001\u08f5\u8001"+
|
||||
"\u0900\u8001\u0915\u8001\u0920\u8001\u0939\u8001\u0980\u8001\u09b7\u8001"+
|
||||
"\u09be\u8001\u09bf\u8001\u0a00\u8001\u0a00\u8001\u0a10\u8001\u0a13\u8001"+
|
||||
"\u0a15\u8001\u0a17\u8001\u0a19\u8001\u0a35\u8001\u0a60\u8001\u0a7c\u8001"+
|
||||
"\u0a80\u8001\u0a9c\u8001\u0ac0\u8001\u0ac7\u8001\u0ac9\u8001\u0ae4\u8001"+
|
||||
"\u0b00\u8001\u0b35\u8001\u0b40\u8001\u0b55\u8001\u0b60\u8001\u0b72\u8001"+
|
||||
"\u0b80\u8001\u0b91\u8001\u0c00\u8001\u0c48\u8001\u0c80\u8001\u0cb2\u8001"+
|
||||
"\u0cc0\u8001\u0cf2\u8001\u0d00\u8001\u0d23\u8001\u0e80\u8001\u0ea9\u8001"+
|
||||
"\u0eb0\u8001\u0eb1\u8001\u0f00\u8001\u0f1c\u8001\u0f27\u8001\u0f27\u8001"+
|
||||
"\u0f30\u8001\u0f45\u8001\u0f70\u8001\u0f81\u8001\u0fb0\u8001\u0fc4\u8001"+
|
||||
"\u0fe0\u8001\u0ff6\u8001\u1003\u8001\u1037\u8001\u1071\u8001\u1072\u8001"+
|
||||
"\u1075\u8001\u1075\u8001\u1083\u8001\u10af\u8001\u10d0\u8001\u10e8\u8001"+
|
||||
"\u1103\u8001\u1126\u8001\u1144\u8001\u1144\u8001\u1147\u8001\u1147\u8001"+
|
||||
"\u1150\u8001\u1172\u8001\u1176\u8001\u1176\u8001\u1183\u8001\u11b2\u8001"+
|
||||
"\u11c1\u8001\u11c4\u8001\u11da\u8001\u11da\u8001\u11dc\u8001\u11dc\u8001"+
|
||||
"\u1200\u8001\u1211\u8001\u1213\u8001\u122b\u8001\u123f\u8001\u1240\u8001"+
|
||||
"\u1280\u8001\u1286\u8001\u1288\u8001\u1288\u8001\u128a\u8001\u128d\u8001"+
|
||||
"\u128f\u8001\u129d\u8001\u129f\u8001\u12a8\u8001\u12b0\u8001\u12de\u8001"+
|
||||
"\u1305\u8001\u130c\u8001\u130f\u8001\u1310\u8001\u1313\u8001\u1328\u8001"+
|
||||
"\u132a\u8001\u1330\u8001\u1332\u8001\u1333\u8001\u1335\u8001\u1339\u8001"+
|
||||
"\u133d\u8001\u133d\u8001\u1350\u8001\u1350\u8001\u135d\u8001\u1361\u8001"+
|
||||
"\u1400\u8001\u1434\u8001\u1447\u8001\u144a\u8001\u145f\u8001\u1461\u8001"+
|
||||
"\u1480\u8001\u14af\u8001\u14c4\u8001\u14c5\u8001\u14c7\u8001\u14c7\u8001"+
|
||||
"\u1580\u8001\u15ae\u8001\u15d8\u8001\u15db\u8001\u1600\u8001\u162f\u8001"+
|
||||
"\u1644\u8001\u1644\u8001\u1680\u8001\u16aa\u8001\u16b8\u8001\u16b8\u8001"+
|
||||
"\u1700\u8001\u171a\u8001\u1740\u8001\u1746\u8001\u1800\u8001\u182b\u8001"+
|
||||
"\u18a0\u8001\u18df\u8001\u18ff\u8001\u1906\u8001\u1909\u8001\u1909\u8001"+
|
||||
"\u190c\u8001\u1913\u8001\u1915\u8001\u1916\u8001\u1918\u8001\u192f\u8001"+
|
||||
"\u193f\u8001\u193f\u8001\u1941\u8001\u1941\u8001\u19a0\u8001\u19a7\u8001"+
|
||||
"\u19aa\u8001\u19d0\u8001\u19e1\u8001\u19e1\u8001\u19e3\u8001\u19e3\u8001"+
|
||||
"\u1a00\u8001\u1a00\u8001\u1a0b\u8001\u1a32\u8001\u1a3a\u8001\u1a3a\u8001"+
|
||||
"\u1a50\u8001\u1a50\u8001\u1a5c\u8001\u1a89\u8001\u1a9d\u8001\u1a9d\u8001"+
|
||||
"\u1ab0\u8001\u1af8\u8001\u1c00\u8001\u1c08\u8001\u1c0a\u8001\u1c2e\u8001"+
|
||||
"\u1c40\u8001\u1c40\u8001\u1c72\u8001\u1c8f\u8001\u1d00\u8001\u1d06\u8001"+
|
||||
"\u1d08\u8001\u1d09\u8001\u1d0b\u8001\u1d30\u8001\u1d46\u8001\u1d46\u8001"+
|
||||
"\u1d60\u8001\u1d65\u8001\u1d67\u8001\u1d68\u8001\u1d6a\u8001\u1d89\u8001"+
|
||||
"\u1d98\u8001\u1d98\u8001\u1ee0\u8001\u1ef2\u8001\u1f02\u8001\u1f02\u8001"+
|
||||
"\u1f04\u8001\u1f10\u8001\u1f12\u8001\u1f33\u8001\u1fb0\u8001\u1fb0\u8001"+
|
||||
"\u1fdd\u8001\u1fe0\u8001\u2000\u8001\u2399\u8001\u2400\u8001\u246e\u8001"+
|
||||
"\u2480\u8001\u2543\u8001\u2f90\u8001\u2ff0\u8001\u3000\u8001\u342f\u8001"+
|
||||
"\u3441\u8001\u3446\u8001\u4400\u8001\u4646\u8001\u6800\u8001\u6a38\u8001"+
|
||||
"\u6a40\u8001\u6a5e\u8001\u6a70\u8001\u6abe\u8001\u6ad0\u8001\u6aed\u8001"+
|
||||
"\u6b00\u8001\u6b2f\u8001\u6b63\u8001\u6b77\u8001\u6b7d\u8001\u6b8f\u8001"+
|
||||
"\u6e40\u8001\u6e7f\u8001\u6f00\u8001\u6f4a\u8001\u6f50\u8001\u6f50\u8001"+
|
||||
"\u7000\u8001\u87f7\u8001\u8800\u8001\u8cd5\u8001\u8d00\u8001\u8d08\u8001"+
|
||||
"\ub000\u8001\ub122\u8001\ub132\u8001\ub132\u8001\ub150\u8001\ub152\u8001"+
|
||||
"\ub155\u8001\ub155\u8001\ub164\u8001\ub167\u8001\ub170\u8001\ub2fb\u8001"+
|
||||
"\ubc00\u8001\ubc6a\u8001\ubc70\u8001\ubc7c\u8001\ubc80\u8001\ubc88\u8001"+
|
||||
"\ubc90\u8001\ubc99\u8001\ud400\u8001\ud454\u8001\ud456\u8001\ud49c\u8001"+
|
||||
"\ud49e\u8001\ud49f\u8001\ud4a2\u8001\ud4a2\u8001\ud4a5\u8001\ud4a6\u8001"+
|
||||
"\ud4a9\u8001\ud4ac\u8001\ud4ae\u8001\ud4b9\u8001\ud4bb\u8001\ud4bb\u8001"+
|
||||
"\ud4bd\u8001\ud4c3\u8001\ud4c5\u8001\ud505\u8001\ud507\u8001\ud50a\u8001"+
|
||||
"\ud50d\u8001\ud514\u8001\ud516\u8001\ud51c\u8001\ud51e\u8001\ud539\u8001"+
|
||||
"\ud53b\u8001\ud53e\u8001\ud540\u8001\ud544\u8001\ud546\u8001\ud546\u8001"+
|
||||
"\ud54a\u8001\ud550\u8001\ud552\u8001\ud6a5\u8001\ud6a8\u8001\ud6c0\u8001"+
|
||||
"\ud6c2\u8001\ud6da\u8001\ud6dc\u8001\ud6fa\u8001\ud6fc\u8001\ud714\u8001"+
|
||||
"\ud716\u8001\ud734\u8001\ud736\u8001\ud74e\u8001\ud750\u8001\ud76e\u8001"+
|
||||
"\ud770\u8001\ud788\u8001\ud78a\u8001\ud7a8\u8001\ud7aa\u8001\ud7c2\u8001"+
|
||||
"\ud7c4\u8001\ud7cb\u8001\udf00\u8001\udf1e\u8001\udf25\u8001\udf2a\u8001"+
|
||||
"\ue100\u8001\ue12c\u8001\ue14e\u8001\ue14e\u8001\ue290\u8001\ue2ad\u8001"+
|
||||
"\ue2c0\u8001\ue2eb\u8001\ue2ff\u8001\ue2ff\u8001\ue4d0\u8001\ue4ea\u8001"+
|
||||
"\ue7e0\u8001\ue7e6\u8001\ue7e8\u8001\ue7eb\u8001\ue7ed\u8001\ue7ee\u8001"+
|
||||
"\ue7f0\u8001\ue7fe\u8001\ue800\u8001\ue8c4\u8001\ue900\u8001\ue943\u8001"+
|
||||
"\uecb0\u8001\uecb0\u8001\uee00\u8001\uee03\u8001\uee05\u8001\uee1f\u8001"+
|
||||
"\uee21\u8001\uee22\u8001\uee24\u8001\uee24\u8001\uee27\u8001\uee27\u8001"+
|
||||
"\uee29\u8001\uee32\u8001\uee34\u8001\uee37\u8001\uee39\u8001\uee39\u8001"+
|
||||
"\uee3b\u8001\uee3b\u8001\uee42\u8001\uee42\u8001\uee47\u8001\uee47\u8001"+
|
||||
"\uee49\u8001\uee49\u8001\uee4b\u8001\uee4b\u8001\uee4d\u8001\uee4f\u8001"+
|
||||
"\uee51\u8001\uee52\u8001\uee54\u8001\uee54\u8001\uee57\u8001\uee57\u8001"+
|
||||
"\uee59\u8001\uee59\u8001\uee5b\u8001\uee5b\u8001\uee5d\u8001\uee5d\u8001"+
|
||||
"\uee5f\u8001\uee5f\u8001\uee61\u8001\uee62\u8001\uee64\u8001\uee64\u8001"+
|
||||
"\uee67\u8001\uee6a\u8001\uee6c\u8001\uee72\u8001\uee74\u8001\uee77\u8001"+
|
||||
"\uee79\u8001\uee7c\u8001\uee7e\u8001\uee7e\u8001\uee80\u8001\uee89\u8001"+
|
||||
"\uee8b\u8001\uee9b\u8001\ueea1\u8001\ueea3\u8001\ueea5\u8001\ueea9\u8001"+
|
||||
"\ueeab\u8001\ueebb\u8002\u0000\u8002\ua6df\u8002\ua700\u8002\ub739\u8002"+
|
||||
"\ub740\u8002\ub81d\u8002\ub820\u8002\ucea1\u8002\uceb0\u8002\uebe0\u8002"+
|
||||
"\uf800\u8002\ufa1d\u8003\u0000\u8003\u134a\u8003\u1350\u8003\u23af\u017b"+
|
||||
"\u000009\u00ad\u00ad\u0300\u036f\u0483\u0487\u0591\u05bd\u05bf\u05bf\u05c1"+
|
||||
"\u05c2\u05c4\u05c5\u05c7\u05c7\u0600\u0605\u0610\u061a\u061c\u061c\u064b"+
|
||||
"\u0669\u0670\u0670\u06d6\u06dd\u06df\u06e4\u06e7\u06e8\u06ea\u06ed\u06f0"+
|
||||
"\u06f9\u070f\u070f\u0711\u0711\u0730\u074a\u07a6\u07b0\u07c0\u07c9\u07eb"+
|
||||
"\u07f3\u07fd\u07fd\u0816\u0819\u081b\u0823\u0825\u0827\u0829\u082d\u0859"+
|
||||
"\u085b\u0890\u0891\u0898\u089f\u08ca\u0903\u093a\u093c\u093e\u094f\u0951"+
|
||||
"\u0957\u0962\u0963\u0966\u096f\u0981\u0983\u09bc\u09bc\u09be\u09c4\u09c7"+
|
||||
"\u09c8\u09cb\u09cd\u09d7\u09d7\u09e2\u09e3\u09e6\u09ef\u09fe\u09fe\u0a01"+
|
||||
"\u0a03\u0a3c\u0a3c\u0a3e\u0a42\u0a47\u0a48\u0a4b\u0a4d\u0a51\u0a51\u0a66"+
|
||||
"\u0a71\u0a75\u0a75\u0a81\u0a83\u0abc\u0abc\u0abe\u0ac5\u0ac7\u0ac9\u0acb"+
|
||||
"\u0acd\u0ae2\u0ae3\u0ae6\u0aef\u0afa\u0aff\u0b01\u0b03\u0b3c\u0b3c\u0b3e"+
|
||||
"\u0b44\u0b47\u0b48\u0b4b\u0b4d\u0b55\u0b57\u0b62\u0b63\u0b66\u0b6f\u0b82"+
|
||||
"\u0b82\u0bbe\u0bc2\u0bc6\u0bc8\u0bca\u0bcd\u0bd7\u0bd7\u0be6\u0bef\u0c00"+
|
||||
"\u0c04\u0c3c\u0c3c\u0c3e\u0c44\u0c46\u0c48\u0c4a\u0c4d\u0c55\u0c56\u0c62"+
|
||||
"\u0c63\u0c66\u0c6f\u0c81\u0c83\u0cbc\u0cbc\u0cbe\u0cc4\u0cc6\u0cc8\u0cca"+
|
||||
"\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6\u0cef\u0cf3\u0cf3\u0d00\u0d03\u0d3b"+
|
||||
"\u0d3c\u0d3e\u0d44\u0d46\u0d48\u0d4a\u0d4d\u0d57\u0d57\u0d62\u0d63\u0d66"+
|
||||
"\u0d6f\u0d81\u0d83\u0dca\u0dca\u0dcf\u0dd4\u0dd6\u0dd6\u0dd8\u0ddf\u0de6"+
|
||||
"\u0def\u0df2\u0df3\u0e31\u0e31\u0e34\u0e3a\u0e47\u0e4e\u0e50\u0e59\u0eb1"+
|
||||
"\u0eb1\u0eb4\u0ebc\u0ec8\u0ece\u0ed0\u0ed9\u0f18\u0f19\u0f20\u0f29\u0f35"+
|
||||
"\u0f35\u0f37\u0f37\u0f39\u0f39\u0f3e\u0f3f\u0f71\u0f84\u0f86\u0f87\u0f8d"+
|
||||
"\u0f97\u0f99\u0fbc\u0fc6\u0fc6\u102b\u103e\u1040\u1049\u1056\u1059\u105e"+
|
||||
"\u1060\u1062\u1064\u1067\u106d\u1071\u1074\u1082\u108d\u108f\u109d\u135d"+
|
||||
"\u135f\u1712\u1715\u1732\u1734\u1752\u1753\u1772\u1773\u17b4\u17d3\u17dd"+
|
||||
"\u17dd\u17e0\u17e9\u180b\u1819\u1885\u1886\u18a9\u18a9\u1920\u192b\u1930"+
|
||||
"\u193b\u1946\u194f\u19d0\u19d9\u1a17\u1a1b\u1a55\u1a5e\u1a60\u1a7c\u1a7f"+
|
||||
"\u1a89\u1a90\u1a99\u1ab0\u1abd\u1abf\u1ace\u1b00\u1b04\u1b34\u1b44\u1b50"+
|
||||
"\u1b59\u1b6b\u1b73\u1b80\u1b82\u1ba1\u1bad\u1bb0\u1bb9\u1be6\u1bf3\u1c24"+
|
||||
"\u1c37\u1c40\u1c49\u1c50\u1c59\u1cd0\u1cd2\u1cd4\u1ce8\u1ced\u1ced\u1cf4"+
|
||||
"\u1cf4\u1cf7\u1cf9\u1dc0\u1dff\u200b\u200f\u202a\u202e\u2060\u2064\u2066"+
|
||||
"\u206f\u20d0\u20dc\u20e1\u20e1\u20e5\u20f0\u2cef\u2cf1\u2d7f\u2d7f\u2de0"+
|
||||
"\u2dff\u302a\u302f\u3099\u309a\u8000\ua620\u8000\ua629\u8000\ua66f\u8000"+
|
||||
"\ua66f\u8000\ua674\u8000\ua67d\u8000\ua69e\u8000\ua69f\u8000\ua6f0\u8000"+
|
||||
"\ua6f1\u8000\ua802\u8000\ua802\u8000\ua806\u8000\ua806\u8000\ua80b\u8000"+
|
||||
"\ua80b\u8000\ua823\u8000\ua827\u8000\ua82c\u8000\ua82c\u8000\ua880\u8000"+
|
||||
"\ua881\u8000\ua8b4\u8000\ua8c5\u8000\ua8d0\u8000\ua8d9\u8000\ua8e0\u8000"+
|
||||
"\ua8f1\u8000\ua8ff\u8000\ua909\u8000\ua926\u8000\ua92d\u8000\ua947\u8000"+
|
||||
"\ua953\u8000\ua980\u8000\ua983\u8000\ua9b3\u8000\ua9c0\u8000\ua9d0\u8000"+
|
||||
"\ua9d9\u8000\ua9e5\u8000\ua9e5\u8000\ua9f0\u8000\ua9f9\u8000\uaa29\u8000"+
|
||||
"\uaa36\u8000\uaa43\u8000\uaa43\u8000\uaa4c\u8000\uaa4d\u8000\uaa50\u8000"+
|
||||
"\uaa59\u8000\uaa7b\u8000\uaa7d\u8000\uaab0\u8000\uaab0\u8000\uaab2\u8000"+
|
||||
"\uaab4\u8000\uaab7\u8000\uaab8\u8000\uaabe\u8000\uaabf\u8000\uaac1\u8000"+
|
||||
"\uaac1\u8000\uaaeb\u8000\uaaef\u8000\uaaf5\u8000\uaaf6\u8000\uabe3\u8000"+
|
||||
"\uabea\u8000\uabec\u8000\uabed\u8000\uabf0\u8000\uabf9\u8000\ufb1e\u8000"+
|
||||
"\ufb1e\u8000\ufe00\u8000\ufe0f\u8000\ufe20\u8000\ufe2f\u8000\ufeff\u8000"+
|
||||
"\ufeff\u8000\uff10\u8000\uff19\u8000\ufff9\u8000\ufffb\u8001\u01fd\u8001"+
|
||||
"\u01fd\u8001\u02e0\u8001\u02e0\u8001\u0376\u8001\u037a\u8001\u04a0\u8001"+
|
||||
"\u04a9\u8001\u0a01\u8001\u0a03\u8001\u0a05\u8001\u0a06\u8001\u0a0c\u8001"+
|
||||
"\u0a0f\u8001\u0a38\u8001\u0a3a\u8001\u0a3f\u8001\u0a3f\u8001\u0ae5\u8001"+
|
||||
"\u0ae6\u8001\u0d24\u8001\u0d27\u8001\u0d30\u8001\u0d39\u8001\u0eab\u8001"+
|
||||
"\u0eac\u8001\u0efd\u8001\u0eff\u8001\u0f46\u8001\u0f50\u8001\u0f82\u8001"+
|
||||
"\u0f85\u8001\u1000\u8001\u1002\u8001\u1038\u8001\u1046\u8001\u1066\u8001"+
|
||||
"\u1070\u8001\u1073\u8001\u1074\u8001\u107f\u8001\u1082\u8001\u10b0\u8001"+
|
||||
"\u10ba\u8001\u10bd\u8001\u10bd\u8001\u10c2\u8001\u10c2\u8001\u10cd\u8001"+
|
||||
"\u10cd\u8001\u10f0\u8001\u10f9\u8001\u1100\u8001\u1102\u8001\u1127\u8001"+
|
||||
"\u1134\u8001\u1136\u8001\u113f\u8001\u1145\u8001\u1146\u8001\u1173\u8001"+
|
||||
"\u1173\u8001\u1180\u8001\u1182\u8001\u11b3\u8001\u11c0\u8001\u11c9\u8001"+
|
||||
"\u11cc\u8001\u11ce\u8001\u11d9\u8001\u122c\u8001\u1237\u8001\u123e\u8001"+
|
||||
"\u123e\u8001\u1241\u8001\u1241\u8001\u12df\u8001\u12ea\u8001\u12f0\u8001"+
|
||||
"\u12f9\u8001\u1300\u8001\u1303\u8001\u133b\u8001\u133c\u8001\u133e\u8001"+
|
||||
"\u1344\u8001\u1347\u8001\u1348\u8001\u134b\u8001\u134d\u8001\u1357\u8001"+
|
||||
"\u1357\u8001\u1362\u8001\u1363\u8001\u1366\u8001\u136c\u8001\u1370\u8001"+
|
||||
"\u1374\u8001\u1435\u8001\u1446\u8001\u1450\u8001\u1459\u8001\u145e\u8001"+
|
||||
"\u145e\u8001\u14b0\u8001\u14c3\u8001\u14d0\u8001\u14d9\u8001\u15af\u8001"+
|
||||
"\u15b5\u8001\u15b8\u8001\u15c0\u8001\u15dc\u8001\u15dd\u8001\u1630\u8001"+
|
||||
"\u1640\u8001\u1650\u8001\u1659\u8001\u16ab\u8001\u16b7\u8001\u16c0\u8001"+
|
||||
"\u16c9\u8001\u171d\u8001\u172b\u8001\u1730\u8001\u1739\u8001\u182c\u8001"+
|
||||
"\u183a\u8001\u18e0\u8001\u18e9\u8001\u1930\u8001\u1935\u8001\u1937\u8001"+
|
||||
"\u1938\u8001\u193b\u8001\u193e\u8001\u1940\u8001\u1940\u8001\u1942\u8001"+
|
||||
"\u1943\u8001\u1950\u8001\u1959\u8001\u19d1\u8001\u19d7\u8001\u19da\u8001"+
|
||||
"\u19e0\u8001\u19e4\u8001\u19e4\u8001\u1a01\u8001\u1a0a\u8001\u1a33\u8001"+
|
||||
"\u1a39\u8001\u1a3b\u8001\u1a3e\u8001\u1a47\u8001\u1a47\u8001\u1a51\u8001"+
|
||||
"\u1a5b\u8001\u1a8a\u8001\u1a99\u8001\u1c2f\u8001\u1c36\u8001\u1c38\u8001"+
|
||||
"\u1c3f\u8001\u1c50\u8001\u1c59\u8001\u1c92\u8001\u1ca7\u8001\u1ca9\u8001"+
|
||||
"\u1cb6\u8001\u1d31\u8001\u1d36\u8001\u1d3a\u8001\u1d3a\u8001\u1d3c\u8001"+
|
||||
"\u1d3d\u8001\u1d3f\u8001\u1d45\u8001\u1d47\u8001\u1d47\u8001\u1d50\u8001"+
|
||||
"\u1d59\u8001\u1d8a\u8001\u1d8e\u8001\u1d90\u8001\u1d91\u8001\u1d93\u8001"+
|
||||
"\u1d97\u8001\u1da0\u8001\u1da9\u8001\u1ef3\u8001\u1ef6\u8001\u1f00\u8001"+
|
||||
"\u1f01\u8001\u1f03\u8001\u1f03\u8001\u1f34\u8001\u1f3a\u8001\u1f3e\u8001"+
|
||||
"\u1f42\u8001\u1f50\u8001\u1f59\u8001\u3430\u8001\u3440\u8001\u3447\u8001"+
|
||||
"\u3455\u8001\u6a60\u8001\u6a69\u8001\u6ac0\u8001\u6ac9\u8001\u6af0\u8001"+
|
||||
"\u6af4\u8001\u6b30\u8001\u6b36\u8001\u6b50\u8001\u6b59\u8001\u6f4f\u8001"+
|
||||
"\u6f4f\u8001\u6f51\u8001\u6f87\u8001\u6f8f\u8001\u6f92\u8001\u6fe4\u8001"+
|
||||
"\u6fe4\u8001\u6ff0\u8001\u6ff1\u8001\ubc9d\u8001\ubc9e\u8001\ubca0\u8001"+
|
||||
"\ubca3\u8001\ucf00\u8001\ucf2d\u8001\ucf30\u8001\ucf46\u8001\ud165\u8001"+
|
||||
"\ud169\u8001\ud16d\u8001\ud182\u8001\ud185\u8001\ud18b\u8001\ud1aa\u8001"+
|
||||
"\ud1ad\u8001\ud242\u8001\ud244\u8001\ud7ce\u8001\ud7ff\u8001\uda00\u8001"+
|
||||
"\uda36\u8001\uda3b\u8001\uda6c\u8001\uda75\u8001\uda75\u8001\uda84\u8001"+
|
||||
"\uda84\u8001\uda9b\u8001\uda9f\u8001\udaa1\u8001\udaaf\u8001\ue000\u8001"+
|
||||
"\ue006\u8001\ue008\u8001\ue018\u8001\ue01b\u8001\ue021\u8001\ue023\u8001"+
|
||||
"\ue024\u8001\ue026\u8001\ue02a\u8001\ue08f\u8001\ue08f\u8001\ue130\u8001"+
|
||||
"\ue136\u8001\ue140\u8001\ue149\u8001\ue2ae\u8001\ue2ae\u8001\ue2ec\u8001"+
|
||||
"\ue2f9\u8001\ue4ec\u8001\ue4f9\u8001\ue8d0\u8001\ue8d6\u8001\ue944\u8001"+
|
||||
"\ue94a\u8001\ue950\u8001\ue959\u8001\ufbf0\u8001\ufbf9\u800e\u0001\u800e"+
|
||||
"\u0001\u800e \u800e\u007f\u800e\u0100\u800e\u01ef\u0001\u000009\u0002"+
|
||||
"\u0000\'\'\\\\\u0002\u0000\"\"\\\\\u0003\u0000\t\n\f\r \u0002\u0000\n"+
|
||||
"\n\r\r\u02f8\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000"+
|
||||
"\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000"+
|
||||
"\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000"+
|
||||
"\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000"+
|
||||
"\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000"+
|
||||
"\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%"+
|
||||
"\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+
|
||||
"\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+
|
||||
"\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+
|
||||
"3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+
|
||||
"\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+
|
||||
"\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+
|
||||
"A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+
|
||||
"\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+
|
||||
"\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+
|
||||
"O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+
|
||||
"\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+
|
||||
"\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+
|
||||
"]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+
|
||||
"\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+
|
||||
"\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+
|
||||
"k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+
|
||||
"\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+
|
||||
"\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+
|
||||
"y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000\u0000\u0085\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000\u0000\u0089\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000\u0000\u008d\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000\u0000\u0091\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000\u0000\u0095\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000\u0000\u0099\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000\u0000\u009d\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000\u0000\u00a1\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000\u0000\u00a5\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000\u0000\u00a9\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000\u0000\u00ad\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000\u0000\u00b1\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000\u0000\u00b5\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000\u0000\u00b9\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000\u0000\u00c1\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000\u0000\u00c5\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000\u0000\u00c9\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000\u0000\u00cd\u0001"+
|
||||
"\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000\u0000\u00d1\u0001"+
|
||||
"\u0000\u0000\u0000\u0001\u00d3\u0001\u0000\u0000\u0000\u0003\u00dc\u0001"+
|
||||
"\u0000\u0000\u0000\u0005\u00e3\u0001\u0000\u0000\u0000\u0007\u00eb\u0001"+
|
||||
"\u0000\u0000\u0000\t\u00f1\u0001\u0000\u0000\u0000\u000b\u00f6\u0001\u0000"+
|
||||
"\u0000\u0000\r\u00fb\u0001\u0000\u0000\u0000\u000f\u0101\u0001\u0000\u0000"+
|
||||
"\u0000\u0011\u0106\u0001\u0000\u0000\u0000\u0013\u010c\u0001\u0000\u0000"+
|
||||
"\u0000\u0015\u0115\u0001\u0000\u0000\u0000\u0017\u011d\u0001\u0000\u0000"+
|
||||
"\u0000\u0019\u0120\u0001\u0000\u0000\u0000\u001b\u0127\u0001\u0000\u0000"+
|
||||
"\u0000\u001d\u012c\u0001\u0000\u0000\u0000\u001f\u0134\u0001\u0000\u0000"+
|
||||
"\u0000!\u013a\u0001\u0000\u0000\u0000#\u0142\u0001\u0000\u0000\u0000%"+
|
||||
"\u0148\u0001\u0000\u0000\u0000\'\u014c\u0001\u0000\u0000\u0000)\u014f"+
|
||||
"\u0001\u0000\u0000\u0000+\u015a\u0001\u0000\u0000\u0000-\u0161\u0001\u0000"+
|
||||
"\u0000\u0000/\u016c\u0001\u0000\u0000\u00001\u0170\u0001\u0000\u0000\u0000"+
|
||||
"3\u017a\u0001\u0000\u0000\u00005\u017f\u0001\u0000\u0000\u00007\u0186"+
|
||||
"\u0001\u0000\u0000\u00009\u018a\u0001\u0000\u0000\u0000;\u0192\u0001\u0000"+
|
||||
"\u0000\u0000=\u019a\u0001\u0000\u0000\u0000?\u01a4\u0001\u0000\u0000\u0000"+
|
||||
"A\u01ab\u0001\u0000\u0000\u0000C\u01b2\u0001\u0000\u0000\u0000E\u01b8"+
|
||||
"\u0001\u0000\u0000\u0000G\u01bf\u0001\u0000\u0000\u0000I\u01c8\u0001\u0000"+
|
||||
"\u0000\u0000K\u01ce\u0001\u0000\u0000\u0000M\u01d5\u0001\u0000\u0000\u0000"+
|
||||
"O\u01e2\u0001\u0000\u0000\u0000Q\u01e7\u0001\u0000\u0000\u0000S\u01ed"+
|
||||
"\u0001\u0000\u0000\u0000U\u01f4\u0001\u0000\u0000\u0000W\u01fe\u0001\u0000"+
|
||||
"\u0000\u0000Y\u0202\u0001\u0000\u0000\u0000[\u0207\u0001\u0000\u0000\u0000"+
|
||||
"]\u0210\u0001\u0000\u0000\u0000_\u0216\u0001\u0000\u0000\u0000a\u0218"+
|
||||
"\u0001\u0000\u0000\u0000c\u021a\u0001\u0000\u0000\u0000e\u021c\u0001\u0000"+
|
||||
"\u0000\u0000g\u021e\u0001\u0000\u0000\u0000i\u0220\u0001\u0000\u0000\u0000"+
|
||||
"k\u0222\u0001\u0000\u0000\u0000m\u0224\u0001\u0000\u0000\u0000o\u0226"+
|
||||
"\u0001\u0000\u0000\u0000q\u0228\u0001\u0000\u0000\u0000s\u022a\u0001\u0000"+
|
||||
"\u0000\u0000u\u022c\u0001\u0000\u0000\u0000w\u022e\u0001\u0000\u0000\u0000"+
|
||||
"y\u0230\u0001\u0000\u0000\u0000{\u0232\u0001\u0000\u0000\u0000}\u0234"+
|
||||
"\u0001\u0000\u0000\u0000\u007f\u0236\u0001\u0000\u0000\u0000\u0081\u0238"+
|
||||
"\u0001\u0000\u0000\u0000\u0083\u023b\u0001\u0000\u0000\u0000\u0085\u023e"+
|
||||
"\u0001\u0000\u0000\u0000\u0087\u0240\u0001\u0000\u0000\u0000\u0089\u0242"+
|
||||
"\u0001\u0000\u0000\u0000\u008b\u0245\u0001\u0000\u0000\u0000\u008d\u0248"+
|
||||
"\u0001\u0000\u0000\u0000\u008f\u024a\u0001\u0000\u0000\u0000\u0091\u024c"+
|
||||
"\u0001\u0000\u0000\u0000\u0093\u024f\u0001\u0000\u0000\u0000\u0095\u0252"+
|
||||
"\u0001\u0000\u0000\u0000\u0097\u0255\u0001\u0000\u0000\u0000\u0099\u0258"+
|
||||
"\u0001\u0000\u0000\u0000\u009b\u025a\u0001\u0000\u0000\u0000\u009d\u025c"+
|
||||
"\u0001\u0000\u0000\u0000\u009f\u025e\u0001\u0000\u0000\u0000\u00a1\u0261"+
|
||||
"\u0001\u0000\u0000\u0000\u00a3\u0264\u0001\u0000\u0000\u0000\u00a5\u0268"+
|
||||
"\u0001\u0000\u0000\u0000\u00a7\u026b\u0001\u0000\u0000\u0000\u00a9\u026e"+
|
||||
"\u0001\u0000\u0000\u0000\u00ab\u0271\u0001\u0000\u0000\u0000\u00ad\u0274"+
|
||||
"\u0001\u0000\u0000\u0000\u00af\u0277\u0001\u0000\u0000\u0000\u00b1\u027a"+
|
||||
"\u0001\u0000\u0000\u0000\u00b3\u027d\u0001\u0000\u0000\u0000\u00b5\u0280"+
|
||||
"\u0001\u0000\u0000\u0000\u00b7\u0284\u0001\u0000\u0000\u0000\u00b9\u0288"+
|
||||
"\u0001\u0000\u0000\u0000\u00bb\u028d\u0001\u0000\u0000\u0000\u00bd\u0295"+
|
||||
"\u0001\u0000\u0000\u0000\u00bf\u0299\u0001\u0000\u0000\u0000\u00c1\u029c"+
|
||||
"\u0001\u0000\u0000\u0000\u00c3\u02a1\u0001\u0000\u0000\u0000\u00c5\u02ac"+
|
||||
"\u0001\u0000\u0000\u0000\u00c7\u02b4\u0001\u0000\u0000\u0000\u00c9\u02c8"+
|
||||
"\u0001\u0000\u0000\u0000\u00cb\u02ca\u0001\u0000\u0000\u0000\u00cd\u02d0"+
|
||||
"\u0001\u0000\u0000\u0000\u00cf\u02d6\u0001\u0000\u0000\u0000\u00d1\u02e1"+
|
||||
"\u0001\u0000\u0000\u0000\u00d3\u00d4\u0005a\u0000\u0000\u00d4\u00d5\u0005"+
|
||||
"b\u0000\u0000\u00d5\u00d6\u0005s\u0000\u0000\u00d6\u00d7\u0005t\u0000"+
|
||||
"\u0000\u00d7\u00d8\u0005r\u0000\u0000\u00d8\u00d9\u0005a\u0000\u0000\u00d9"+
|
||||
"\u00da\u0005c\u0000\u0000\u00da\u00db\u0005t\u0000\u0000\u00db\u0002\u0001"+
|
||||
"\u0000\u0000\u0000\u00dc\u00dd\u0005a\u0000\u0000\u00dd\u00de\u0005s\u0000"+
|
||||
"\u0000\u00de\u00df\u0005s\u0000\u0000\u00df\u00e0\u0005e\u0000\u0000\u00e0"+
|
||||
"\u00e1\u0005r\u0000\u0000\u00e1\u00e2\u0005t\u0000\u0000\u00e2\u0004\u0001"+
|
||||
"\u0000\u0000\u0000\u00e3\u00e4\u0005b\u0000\u0000\u00e4\u00e5\u0005o\u0000"+
|
||||
"\u0000\u00e5\u00e6\u0005o\u0000\u0000\u00e6\u00e7\u0005l\u0000\u0000\u00e7"+
|
||||
"\u00e8\u0005e\u0000\u0000\u00e8\u00e9\u0005a\u0000\u0000\u00e9\u00ea\u0005"+
|
||||
"n\u0000\u0000\u00ea\u0006\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005b\u0000"+
|
||||
"\u0000\u00ec\u00ed\u0005r\u0000\u0000\u00ed\u00ee\u0005e\u0000\u0000\u00ee"+
|
||||
"\u00ef\u0005a\u0000\u0000\u00ef\u00f0\u0005k\u0000\u0000\u00f0\b\u0001"+
|
||||
"\u0000\u0000\u0000\u00f1\u00f2\u0005b\u0000\u0000\u00f2\u00f3\u0005y\u0000"+
|
||||
"\u0000\u00f3\u00f4\u0005t\u0000\u0000\u00f4\u00f5\u0005e\u0000\u0000\u00f5"+
|
||||
"\n\u0001\u0000\u0000\u0000\u00f6\u00f7\u0005c\u0000\u0000\u00f7\u00f8"+
|
||||
"\u0005a\u0000\u0000\u00f8\u00f9\u0005s\u0000\u0000\u00f9\u00fa\u0005e"+
|
||||
"\u0000\u0000\u00fa\f\u0001\u0000\u0000\u0000\u00fb\u00fc\u0005c\u0000"+
|
||||
"\u0000\u00fc\u00fd\u0005a\u0000\u0000\u00fd\u00fe\u0005t\u0000\u0000\u00fe"+
|
||||
"\u00ff\u0005c\u0000\u0000\u00ff\u0100\u0005h\u0000\u0000\u0100\u000e\u0001"+
|
||||
"\u0000\u0000\u0000\u0101\u0102\u0005c\u0000\u0000\u0102\u0103\u0005h\u0000"+
|
||||
"\u0000\u0103\u0104\u0005a\u0000\u0000\u0104\u0105\u0005r\u0000\u0000\u0105"+
|
||||
"\u0010\u0001\u0000\u0000\u0000\u0106\u0107\u0005c\u0000\u0000\u0107\u0108"+
|
||||
"\u0005l\u0000\u0000\u0108\u0109\u0005a\u0000\u0000\u0109\u010a\u0005s"+
|
||||
"\u0000\u0000\u010a\u010b\u0005s\u0000\u0000\u010b\u0012\u0001\u0000\u0000"+
|
||||
"\u0000\u010c\u010d\u0005c\u0000\u0000\u010d\u010e\u0005o\u0000\u0000\u010e"+
|
||||
"\u010f\u0005n\u0000\u0000\u010f\u0110\u0005t\u0000\u0000\u0110\u0111\u0005"+
|
||||
"i\u0000\u0000\u0111\u0112\u0005n\u0000\u0000\u0112\u0113\u0005u\u0000"+
|
||||
"\u0000\u0113\u0114\u0005e\u0000\u0000\u0114\u0014\u0001\u0000\u0000\u0000"+
|
||||
"\u0115\u0116\u0005d\u0000\u0000\u0116\u0117\u0005e\u0000\u0000\u0117\u0118"+
|
||||
"\u0005f\u0000\u0000\u0118\u0119\u0005a\u0000\u0000\u0119\u011a\u0005u"+
|
||||
"\u0000\u0000\u011a\u011b\u0005l\u0000\u0000\u011b\u011c\u0005t\u0000\u0000"+
|
||||
"\u011c\u0016\u0001\u0000\u0000\u0000\u011d\u011e\u0005d\u0000\u0000\u011e"+
|
||||
"\u011f\u0005o\u0000\u0000\u011f\u0018\u0001\u0000\u0000\u0000\u0120\u0121"+
|
||||
"\u0005d\u0000\u0000\u0121\u0122\u0005o\u0000\u0000\u0122\u0123\u0005u"+
|
||||
"\u0000\u0000\u0123\u0124\u0005b\u0000\u0000\u0124\u0125\u0005l\u0000\u0000"+
|
||||
"\u0125\u0126\u0005e\u0000\u0000\u0126\u001a\u0001\u0000\u0000\u0000\u0127"+
|
||||
"\u0128\u0005e\u0000\u0000\u0128\u0129\u0005l\u0000\u0000\u0129\u012a\u0005"+
|
||||
"s\u0000\u0000\u012a\u012b\u0005e\u0000\u0000\u012b\u001c\u0001\u0000\u0000"+
|
||||
"\u0000\u012c\u012d\u0005e\u0000\u0000\u012d\u012e\u0005x\u0000\u0000\u012e"+
|
||||
"\u012f\u0005t\u0000\u0000\u012f\u0130\u0005e\u0000\u0000\u0130\u0131\u0005"+
|
||||
"n\u0000\u0000\u0131\u0132\u0005d\u0000\u0000\u0132\u0133\u0005s\u0000"+
|
||||
"\u0000\u0133\u001e\u0001\u0000\u0000\u0000\u0134\u0135\u0005f\u0000\u0000"+
|
||||
"\u0135\u0136\u0005i\u0000\u0000\u0136\u0137\u0005n\u0000\u0000\u0137\u0138"+
|
||||
"\u0005a\u0000\u0000\u0138\u0139\u0005l\u0000\u0000\u0139 \u0001\u0000"+
|
||||
"\u0000\u0000\u013a\u013b\u0005f\u0000\u0000\u013b\u013c\u0005i\u0000\u0000"+
|
||||
"\u013c\u013d\u0005n\u0000\u0000\u013d\u013e\u0005a\u0000\u0000\u013e\u013f"+
|
||||
"\u0005l\u0000\u0000\u013f\u0140\u0005l\u0000\u0000\u0140\u0141\u0005y"+
|
||||
"\u0000\u0000\u0141\"\u0001\u0000\u0000\u0000\u0142\u0143\u0005f\u0000"+
|
||||
"\u0000\u0143\u0144\u0005l\u0000\u0000\u0144\u0145\u0005o\u0000\u0000\u0145"+
|
||||
"\u0146\u0005a\u0000\u0000\u0146\u0147\u0005t\u0000\u0000\u0147$\u0001"+
|
||||
"\u0000\u0000\u0000\u0148\u0149\u0005f\u0000\u0000\u0149\u014a\u0005o\u0000"+
|
||||
"\u0000\u014a\u014b\u0005r\u0000\u0000\u014b&\u0001\u0000\u0000\u0000\u014c"+
|
||||
"\u014d\u0005i\u0000\u0000\u014d\u014e\u0005f\u0000\u0000\u014e(\u0001"+
|
||||
"\u0000\u0000\u0000\u014f\u0150\u0005i\u0000\u0000\u0150\u0151\u0005m\u0000"+
|
||||
"\u0000\u0151\u0152\u0005p\u0000\u0000\u0152\u0153\u0005l\u0000\u0000\u0153"+
|
||||
"\u0154\u0005e\u0000\u0000\u0154\u0155\u0005m\u0000\u0000\u0155\u0156\u0005"+
|
||||
"e\u0000\u0000\u0156\u0157\u0005n\u0000\u0000\u0157\u0158\u0005t\u0000"+
|
||||
"\u0000\u0158\u0159\u0005s\u0000\u0000\u0159*\u0001\u0000\u0000\u0000\u015a"+
|
||||
"\u015b\u0005i\u0000\u0000\u015b\u015c\u0005m\u0000\u0000\u015c\u015d\u0005"+
|
||||
"p\u0000\u0000\u015d\u015e\u0005o\u0000\u0000\u015e\u015f\u0005r\u0000"+
|
||||
"\u0000\u015f\u0160\u0005t\u0000\u0000\u0160,\u0001\u0000\u0000\u0000\u0161"+
|
||||
"\u0162\u0005i\u0000\u0000\u0162\u0163\u0005n\u0000\u0000\u0163\u0164\u0005"+
|
||||
"s\u0000\u0000\u0164\u0165\u0005t\u0000\u0000\u0165\u0166\u0005a\u0000"+
|
||||
"\u0000\u0166\u0167\u0005n\u0000\u0000\u0167\u0168\u0005c\u0000\u0000\u0168"+
|
||||
"\u0169\u0005e\u0000\u0000\u0169\u016a\u0005o\u0000\u0000\u016a\u016b\u0005"+
|
||||
"f\u0000\u0000\u016b.\u0001\u0000\u0000\u0000\u016c\u016d\u0005i\u0000"+
|
||||
"\u0000\u016d\u016e\u0005n\u0000\u0000\u016e\u016f\u0005t\u0000\u0000\u016f"+
|
||||
"0\u0001\u0000\u0000\u0000\u0170\u0171\u0005i\u0000\u0000\u0171\u0172\u0005"+
|
||||
"n\u0000\u0000\u0172\u0173\u0005t\u0000\u0000\u0173\u0174\u0005e\u0000"+
|
||||
"\u0000\u0174\u0175\u0005r\u0000\u0000\u0175\u0176\u0005f\u0000\u0000\u0176"+
|
||||
"\u0177\u0005a\u0000\u0000\u0177\u0178\u0005c\u0000\u0000\u0178\u0179\u0005"+
|
||||
"e\u0000\u0000\u01792\u0001\u0000\u0000\u0000\u017a\u017b\u0005l\u0000"+
|
||||
"\u0000\u017b\u017c\u0005o\u0000\u0000\u017c\u017d\u0005n\u0000\u0000\u017d"+
|
||||
"\u017e\u0005g\u0000\u0000\u017e4\u0001\u0000\u0000\u0000\u017f\u0180\u0005"+
|
||||
"n\u0000\u0000\u0180\u0181\u0005a\u0000\u0000\u0181\u0182\u0005t\u0000"+
|
||||
"\u0000\u0182\u0183\u0005i\u0000\u0000\u0183\u0184\u0005v\u0000\u0000\u0184"+
|
||||
"\u0185\u0005e\u0000\u0000\u01856\u0001\u0000\u0000\u0000\u0186\u0187\u0005"+
|
||||
"n\u0000\u0000\u0187\u0188\u0005e\u0000\u0000\u0188\u0189\u0005w\u0000"+
|
||||
"\u0000\u01898\u0001\u0000\u0000\u0000\u018a\u018b\u0005p\u0000\u0000\u018b"+
|
||||
"\u018c\u0005a\u0000\u0000\u018c\u018d\u0005c\u0000\u0000\u018d\u018e\u0005"+
|
||||
"k\u0000\u0000\u018e\u018f\u0005a\u0000\u0000\u018f\u0190\u0005g\u0000"+
|
||||
"\u0000\u0190\u0191\u0005e\u0000\u0000\u0191:\u0001\u0000\u0000\u0000\u0192"+
|
||||
"\u0193\u0005p\u0000\u0000\u0193\u0194\u0005r\u0000\u0000\u0194\u0195\u0005"+
|
||||
"i\u0000\u0000\u0195\u0196\u0005v\u0000\u0000\u0196\u0197\u0005a\u0000"+
|
||||
"\u0000\u0197\u0198\u0005t\u0000\u0000\u0198\u0199\u0005e\u0000\u0000\u0199"+
|
||||
"<\u0001\u0000\u0000\u0000\u019a\u019b\u0005p\u0000\u0000\u019b\u019c\u0005"+
|
||||
"r\u0000\u0000\u019c\u019d\u0005o\u0000\u0000\u019d\u019e\u0005t\u0000"+
|
||||
"\u0000\u019e\u019f\u0005e\u0000\u0000\u019f\u01a0\u0005c\u0000\u0000\u01a0"+
|
||||
"\u01a1\u0005t\u0000\u0000\u01a1\u01a2\u0005e\u0000\u0000\u01a2\u01a3\u0005"+
|
||||
"d\u0000\u0000\u01a3>\u0001\u0000\u0000\u0000\u01a4\u01a5\u0005p\u0000"+
|
||||
"\u0000\u01a5\u01a6\u0005u\u0000\u0000\u01a6\u01a7\u0005b\u0000\u0000\u01a7"+
|
||||
"\u01a8\u0005l\u0000\u0000\u01a8\u01a9\u0005i\u0000\u0000\u01a9\u01aa\u0005"+
|
||||
"c\u0000\u0000\u01aa@\u0001\u0000\u0000\u0000\u01ab\u01ac\u0005r\u0000"+
|
||||
"\u0000\u01ac\u01ad\u0005e\u0000\u0000\u01ad\u01ae\u0005t\u0000\u0000\u01ae"+
|
||||
"\u01af\u0005u\u0000\u0000\u01af\u01b0\u0005r\u0000\u0000\u01b0\u01b1\u0005"+
|
||||
"n\u0000\u0000\u01b1B\u0001\u0000\u0000\u0000\u01b2\u01b3\u0005s\u0000"+
|
||||
"\u0000\u01b3\u01b4\u0005h\u0000\u0000\u01b4\u01b5\u0005o\u0000\u0000\u01b5"+
|
||||
"\u01b6\u0005r\u0000\u0000\u01b6\u01b7\u0005t\u0000\u0000\u01b7D\u0001"+
|
||||
"\u0000\u0000\u0000\u01b8\u01b9\u0005s\u0000\u0000\u01b9\u01ba\u0005t\u0000"+
|
||||
"\u0000\u01ba\u01bb\u0005a\u0000\u0000\u01bb\u01bc\u0005t\u0000\u0000\u01bc"+
|
||||
"\u01bd\u0005i\u0000\u0000\u01bd\u01be\u0005c\u0000\u0000\u01beF\u0001"+
|
||||
"\u0000\u0000\u0000\u01bf\u01c0\u0005s\u0000\u0000\u01c0\u01c1\u0005t\u0000"+
|
||||
"\u0000\u01c1\u01c2\u0005r\u0000\u0000\u01c2\u01c3\u0005i\u0000\u0000\u01c3"+
|
||||
"\u01c4\u0005c\u0000\u0000\u01c4\u01c5\u0005t\u0000\u0000\u01c5\u01c6\u0005"+
|
||||
"f\u0000\u0000\u01c6\u01c7\u0005p\u0000\u0000\u01c7H\u0001\u0000\u0000"+
|
||||
"\u0000\u01c8\u01c9\u0005s\u0000\u0000\u01c9\u01ca\u0005u\u0000\u0000\u01ca"+
|
||||
"\u01cb\u0005p\u0000\u0000\u01cb\u01cc\u0005e\u0000\u0000\u01cc\u01cd\u0005"+
|
||||
"r\u0000\u0000\u01cdJ\u0001\u0000\u0000\u0000\u01ce\u01cf\u0005s\u0000"+
|
||||
"\u0000\u01cf\u01d0\u0005w\u0000\u0000\u01d0\u01d1\u0005i\u0000\u0000\u01d1"+
|
||||
"\u01d2\u0005t\u0000\u0000\u01d2\u01d3\u0005c\u0000\u0000\u01d3\u01d4\u0005"+
|
||||
"h\u0000\u0000\u01d4L\u0001\u0000\u0000\u0000\u01d5\u01d6\u0005s\u0000"+
|
||||
"\u0000\u01d6\u01d7\u0005y\u0000\u0000\u01d7\u01d8\u0005n\u0000\u0000\u01d8"+
|
||||
"\u01d9\u0005c\u0000\u0000\u01d9\u01da\u0005h\u0000\u0000\u01da\u01db\u0005"+
|
||||
"r\u0000\u0000\u01db\u01dc\u0005o\u0000\u0000\u01dc\u01dd\u0005n\u0000"+
|
||||
"\u0000\u01dd\u01de\u0005i\u0000\u0000\u01de\u01df\u0005z\u0000\u0000\u01df"+
|
||||
"\u01e0\u0005e\u0000\u0000\u01e0\u01e1\u0005d\u0000\u0000\u01e1N\u0001"+
|
||||
"\u0000\u0000\u0000\u01e2\u01e3\u0005t\u0000\u0000\u01e3\u01e4\u0005h\u0000"+
|
||||
"\u0000\u01e4\u01e5\u0005i\u0000\u0000\u01e5\u01e6\u0005s\u0000\u0000\u01e6"+
|
||||
"P\u0001\u0000\u0000\u0000\u01e7\u01e8\u0005t\u0000\u0000\u01e8\u01e9\u0005"+
|
||||
"h\u0000\u0000\u01e9\u01ea\u0005r\u0000\u0000\u01ea\u01eb\u0005o\u0000"+
|
||||
"\u0000\u01eb\u01ec\u0005w\u0000\u0000\u01ecR\u0001\u0000\u0000\u0000\u01ed"+
|
||||
"\u01ee\u0005t\u0000\u0000\u01ee\u01ef\u0005h\u0000\u0000\u01ef\u01f0\u0005"+
|
||||
"r\u0000\u0000\u01f0\u01f1\u0005o\u0000\u0000\u01f1\u01f2\u0005w\u0000"+
|
||||
"\u0000\u01f2\u01f3\u0005s\u0000\u0000\u01f3T\u0001\u0000\u0000\u0000\u01f4"+
|
||||
"\u01f5\u0005t\u0000\u0000\u01f5\u01f6\u0005r\u0000\u0000\u01f6\u01f7\u0005"+
|
||||
"a\u0000\u0000\u01f7\u01f8\u0005n\u0000\u0000\u01f8\u01f9\u0005s\u0000"+
|
||||
"\u0000\u01f9\u01fa\u0005i\u0000\u0000\u01fa\u01fb\u0005e\u0000\u0000\u01fb"+
|
||||
"\u01fc\u0005n\u0000\u0000\u01fc\u01fd\u0005t\u0000\u0000\u01fdV\u0001"+
|
||||
"\u0000\u0000\u0000\u01fe\u01ff\u0005t\u0000\u0000\u01ff\u0200\u0005r\u0000"+
|
||||
"\u0000\u0200\u0201\u0005y\u0000\u0000\u0201X\u0001\u0000\u0000\u0000\u0202"+
|
||||
"\u0203\u0005v\u0000\u0000\u0203\u0204\u0005o\u0000\u0000\u0204\u0205\u0005"+
|
||||
"i\u0000\u0000\u0205\u0206\u0005d\u0000\u0000\u0206Z\u0001\u0000\u0000"+
|
||||
"\u0000\u0207\u0208\u0005v\u0000\u0000\u0208\u0209\u0005o\u0000\u0000\u0209"+
|
||||
"\u020a\u0005l\u0000\u0000\u020a\u020b\u0005a\u0000\u0000\u020b\u020c\u0005"+
|
||||
"t\u0000\u0000\u020c\u020d\u0005i\u0000\u0000\u020d\u020e\u0005l\u0000"+
|
||||
"\u0000\u020e\u020f\u0005e\u0000\u0000\u020f\\\u0001\u0000\u0000\u0000"+
|
||||
"\u0210\u0211\u0005w\u0000\u0000\u0211\u0212\u0005h\u0000\u0000\u0212\u0213"+
|
||||
"\u0005i\u0000\u0000\u0213\u0214\u0005l\u0000\u0000\u0214\u0215\u0005e"+
|
||||
"\u0000\u0000\u0215^\u0001\u0000\u0000\u0000\u0216\u0217\u0005;\u0000\u0000"+
|
||||
"\u0217`\u0001\u0000\u0000\u0000\u0218\u0219\u0005,\u0000\u0000\u0219b"+
|
||||
"\u0001\u0000\u0000\u0000\u021a\u021b\u0005.\u0000\u0000\u021bd\u0001\u0000"+
|
||||
"\u0000\u0000\u021c\u021d\u0005(\u0000\u0000\u021df\u0001\u0000\u0000\u0000"+
|
||||
"\u021e\u021f\u0005)\u0000\u0000\u021fh\u0001\u0000\u0000\u0000\u0220\u0221"+
|
||||
"\u0005{\u0000\u0000\u0221j\u0001\u0000\u0000\u0000\u0222\u0223\u0005}"+
|
||||
"\u0000\u0000\u0223l\u0001\u0000\u0000\u0000\u0224\u0225\u0005[\u0000\u0000"+
|
||||
"\u0225n\u0001\u0000\u0000\u0000\u0226\u0227\u0005]\u0000\u0000\u0227p"+
|
||||
"\u0001\u0000\u0000\u0000\u0228\u0229\u0005:\u0000\u0000\u0229r\u0001\u0000"+
|
||||
"\u0000\u0000\u022a\u022b\u0005?\u0000\u0000\u022bt\u0001\u0000\u0000\u0000"+
|
||||
"\u022c\u022d\u0005=\u0000\u0000\u022dv\u0001\u0000\u0000\u0000\u022e\u022f"+
|
||||
"\u0005+\u0000\u0000\u022fx\u0001\u0000\u0000\u0000\u0230\u0231\u0005-"+
|
||||
"\u0000\u0000\u0231z\u0001\u0000\u0000\u0000\u0232\u0233\u0005*\u0000\u0000"+
|
||||
"\u0233|\u0001\u0000\u0000\u0000\u0234\u0235\u0005/\u0000\u0000\u0235~"+
|
||||
"\u0001\u0000\u0000\u0000\u0236\u0237\u0005%\u0000\u0000\u0237\u0080\u0001"+
|
||||
"\u0000\u0000\u0000\u0238\u0239\u0005+\u0000\u0000\u0239\u023a\u0005+\u0000"+
|
||||
"\u0000\u023a\u0082\u0001\u0000\u0000\u0000\u023b\u023c\u0005-\u0000\u0000"+
|
||||
"\u023c\u023d\u0005-\u0000\u0000\u023d\u0084\u0001\u0000\u0000\u0000\u023e"+
|
||||
"\u023f\u0005!\u0000\u0000\u023f\u0086\u0001\u0000\u0000\u0000\u0240\u0241"+
|
||||
"\u0005~\u0000\u0000\u0241\u0088\u0001\u0000\u0000\u0000\u0242\u0243\u0005"+
|
||||
"=\u0000\u0000\u0243\u0244\u0005=\u0000\u0000\u0244\u008a\u0001\u0000\u0000"+
|
||||
"\u0000\u0245\u0246\u0005!\u0000\u0000\u0246\u0247\u0005=\u0000\u0000\u0247"+
|
||||
"\u008c\u0001\u0000\u0000\u0000\u0248\u0249\u0005<\u0000\u0000\u0249\u008e"+
|
||||
"\u0001\u0000\u0000\u0000\u024a\u024b\u0005>\u0000\u0000\u024b\u0090\u0001"+
|
||||
"\u0000\u0000\u0000\u024c\u024d\u0005<\u0000\u0000\u024d\u024e\u0005=\u0000"+
|
||||
"\u0000\u024e\u0092\u0001\u0000\u0000\u0000\u024f\u0250\u0005>\u0000\u0000"+
|
||||
"\u0250\u0251\u0005=\u0000\u0000\u0251\u0094\u0001\u0000\u0000\u0000\u0252"+
|
||||
"\u0253\u0005&\u0000\u0000\u0253\u0254\u0005&\u0000\u0000\u0254\u0096\u0001"+
|
||||
"\u0000\u0000\u0000\u0255\u0256\u0005|\u0000\u0000\u0256\u0257\u0005|\u0000"+
|
||||
"\u0000\u0257\u0098\u0001\u0000\u0000\u0000\u0258\u0259\u0005&\u0000\u0000"+
|
||||
"\u0259\u009a\u0001\u0000\u0000\u0000\u025a\u025b\u0005|\u0000\u0000\u025b"+
|
||||
"\u009c\u0001\u0000\u0000\u0000\u025c\u025d\u0005^\u0000\u0000\u025d\u009e"+
|
||||
"\u0001\u0000\u0000\u0000\u025e\u025f\u0005<\u0000\u0000\u025f\u0260\u0005"+
|
||||
"<\u0000\u0000\u0260\u00a0\u0001\u0000\u0000\u0000\u0261\u0262\u0005>\u0000"+
|
||||
"\u0000\u0262\u0263\u0005>\u0000\u0000\u0263\u00a2\u0001\u0000\u0000\u0000"+
|
||||
"\u0264\u0265\u0005>\u0000\u0000\u0265\u0266\u0005>\u0000\u0000\u0266\u0267"+
|
||||
"\u0005>\u0000\u0000\u0267\u00a4\u0001\u0000\u0000\u0000\u0268\u0269\u0005"+
|
||||
"+\u0000\u0000\u0269\u026a\u0005=\u0000\u0000\u026a\u00a6\u0001\u0000\u0000"+
|
||||
"\u0000\u026b\u026c\u0005-\u0000\u0000\u026c\u026d\u0005=\u0000\u0000\u026d"+
|
||||
"\u00a8\u0001\u0000\u0000\u0000\u026e\u026f\u0005*\u0000\u0000\u026f\u0270"+
|
||||
"\u0005=\u0000\u0000\u0270\u00aa\u0001\u0000\u0000\u0000\u0271\u0272\u0005"+
|
||||
"/\u0000\u0000\u0272\u0273\u0005=\u0000\u0000\u0273\u00ac\u0001\u0000\u0000"+
|
||||
"\u0000\u0274\u0275\u0005&\u0000\u0000\u0275\u0276\u0005=\u0000\u0000\u0276"+
|
||||
"\u00ae\u0001\u0000\u0000\u0000\u0277\u0278\u0005|\u0000\u0000\u0278\u0279"+
|
||||
"\u0005=\u0000\u0000\u0279\u00b0\u0001\u0000\u0000\u0000\u027a\u027b\u0005"+
|
||||
"^\u0000\u0000\u027b\u027c\u0005=\u0000\u0000\u027c\u00b2\u0001\u0000\u0000"+
|
||||
"\u0000\u027d\u027e\u0005%\u0000\u0000\u027e\u027f\u0005=\u0000\u0000\u027f"+
|
||||
"\u00b4\u0001\u0000\u0000\u0000\u0280\u0281\u0005<\u0000\u0000\u0281\u0282"+
|
||||
"\u0005<\u0000\u0000\u0282\u0283\u0005=\u0000\u0000\u0283\u00b6\u0001\u0000"+
|
||||
"\u0000\u0000\u0284\u0285\u0005>\u0000\u0000\u0285\u0286\u0005>\u0000\u0000"+
|
||||
"\u0286\u0287\u0005=\u0000\u0000\u0287\u00b8\u0001\u0000\u0000\u0000\u0288"+
|
||||
"\u0289\u0005>\u0000\u0000\u0289\u028a\u0005>\u0000\u0000\u028a\u028b\u0005"+
|
||||
">\u0000\u0000\u028b\u028c\u0005=\u0000\u0000\u028c\u00ba\u0001\u0000\u0000"+
|
||||
"\u0000\u028d\u0291\u0003\u00bd^\u0000\u028e\u0290\u0003\u00bf_\u0000\u028f"+
|
||||
"\u028e\u0001\u0000\u0000\u0000\u0290\u0293\u0001\u0000\u0000\u0000\u0291"+
|
||||
"\u028f\u0001\u0000\u0000\u0000\u0291\u0292\u0001\u0000\u0000\u0000\u0292"+
|
||||
"\u00bc\u0001\u0000\u0000\u0000\u0293\u0291\u0001\u0000\u0000\u0000\u0294"+
|
||||
"\u0296\u0007\u0000\u0000\u0000\u0295\u0294\u0001\u0000\u0000\u0000\u0296"+
|
||||
"\u00be\u0001\u0000\u0000\u0000\u0297\u029a\u0003\u00bd^\u0000\u0298\u029a"+
|
||||
"\u0007\u0001\u0000\u0000\u0299\u0297\u0001\u0000\u0000\u0000\u0299\u0298"+
|
||||
"\u0001\u0000\u0000\u0000\u029a\u00c0\u0001\u0000\u0000\u0000\u029b\u029d"+
|
||||
"\u0007\u0002\u0000\u0000\u029c\u029b\u0001\u0000\u0000\u0000\u029d\u029e"+
|
||||
"\u0001\u0000\u0000\u0000\u029e\u029c\u0001\u0000\u0000\u0000\u029e\u029f"+
|
||||
"\u0001\u0000\u0000\u0000\u029f\u00c2\u0001\u0000\u0000\u0000\u02a0\u02a2"+
|
||||
"\u0007\u0002\u0000\u0000\u02a1\u02a0\u0001\u0000\u0000\u0000\u02a2\u02a3"+
|
||||
"\u0001\u0000\u0000\u0000\u02a3\u02a1\u0001\u0000\u0000\u0000\u02a3\u02a4"+
|
||||
"\u0001\u0000\u0000\u0000\u02a4\u02a5\u0001\u0000\u0000\u0000\u02a5\u02a9"+
|
||||
"\u0005.\u0000\u0000\u02a6\u02a8\u0007\u0002\u0000\u0000\u02a7\u02a6\u0001"+
|
||||
"\u0000\u0000\u0000\u02a8\u02ab\u0001\u0000\u0000\u0000\u02a9\u02a7\u0001"+
|
||||
"\u0000\u0000\u0000\u02a9\u02aa\u0001\u0000\u0000\u0000\u02aa\u00c4\u0001"+
|
||||
"\u0000\u0000\u0000\u02ab\u02a9\u0001\u0000\u0000\u0000\u02ac\u02b0\u0005"+
|
||||
"\'\u0000\u0000\u02ad\u02b1\b\u0003\u0000\u0000\u02ae\u02af\u0005\\\u0000"+
|
||||
"\u0000\u02af\u02b1\t\u0000\u0000\u0000\u02b0\u02ad\u0001\u0000\u0000\u0000"+
|
||||
"\u02b0\u02ae\u0001\u0000\u0000\u0000\u02b1\u02b2\u0001\u0000\u0000\u0000"+
|
||||
"\u02b2\u02b3\u0005\'\u0000\u0000\u02b3\u00c6\u0001\u0000\u0000\u0000\u02b4"+
|
||||
"\u02ba\u0005\"\u0000\u0000\u02b5\u02b9\b\u0004\u0000\u0000\u02b6\u02b7"+
|
||||
"\u0005\\\u0000\u0000\u02b7\u02b9\t\u0000\u0000\u0000\u02b8\u02b5\u0001"+
|
||||
"\u0000\u0000\u0000\u02b8\u02b6\u0001\u0000\u0000\u0000\u02b9\u02bc\u0001"+
|
||||
"\u0000\u0000\u0000\u02ba\u02b8\u0001\u0000\u0000\u0000\u02ba\u02bb\u0001"+
|
||||
"\u0000\u0000\u0000\u02bb\u02bd\u0001\u0000\u0000\u0000\u02bc\u02ba\u0001"+
|
||||
"\u0000\u0000\u0000\u02bd\u02be\u0005\"\u0000\u0000\u02be\u00c8\u0001\u0000"+
|
||||
"\u0000\u0000\u02bf\u02c0\u0005t\u0000\u0000\u02c0\u02c1\u0005r\u0000\u0000"+
|
||||
"\u02c1\u02c2\u0005u\u0000\u0000\u02c2\u02c9\u0005e\u0000\u0000\u02c3\u02c4"+
|
||||
"\u0005f\u0000\u0000\u02c4\u02c5\u0005a\u0000\u0000\u02c5\u02c6\u0005l"+
|
||||
"\u0000\u0000\u02c6\u02c7\u0005s\u0000\u0000\u02c7\u02c9\u0005e\u0000\u0000"+
|
||||
"\u02c8\u02bf\u0001\u0000\u0000\u0000\u02c8\u02c3\u0001\u0000\u0000\u0000"+
|
||||
"\u02c9\u00ca\u0001\u0000\u0000\u0000\u02ca\u02cb\u0005n\u0000\u0000\u02cb"+
|
||||
"\u02cc\u0005u\u0000\u0000\u02cc\u02cd\u0005l\u0000\u0000\u02cd\u02ce\u0005"+
|
||||
"l\u0000\u0000\u02ce\u00cc\u0001\u0000\u0000\u0000\u02cf\u02d1\u0007\u0005"+
|
||||
"\u0000\u0000\u02d0\u02cf\u0001\u0000\u0000\u0000\u02d1\u02d2\u0001\u0000"+
|
||||
"\u0000\u0000\u02d2\u02d0\u0001\u0000\u0000\u0000\u02d2\u02d3\u0001\u0000"+
|
||||
"\u0000\u0000\u02d3\u02d4\u0001\u0000\u0000\u0000\u02d4\u02d5\u0006f\u0000"+
|
||||
"\u0000\u02d5\u00ce\u0001\u0000\u0000\u0000\u02d6\u02d7\u0005/\u0000\u0000"+
|
||||
"\u02d7\u02d8\u0005/\u0000\u0000\u02d8\u02dc\u0001\u0000\u0000\u0000\u02d9"+
|
||||
"\u02db\b\u0006\u0000\u0000\u02da\u02d9\u0001\u0000\u0000\u0000\u02db\u02de"+
|
||||
"\u0001\u0000\u0000\u0000\u02dc\u02da\u0001\u0000\u0000\u0000\u02dc\u02dd"+
|
||||
"\u0001\u0000\u0000\u0000\u02dd\u02df\u0001\u0000\u0000\u0000\u02de\u02dc"+
|
||||
"\u0001\u0000\u0000\u0000\u02df\u02e0\u0006g\u0000\u0000\u02e0\u00d0\u0001"+
|
||||
"\u0000\u0000\u0000\u02e1\u02e2\u0005/\u0000\u0000\u02e2\u02e3\u0005*\u0000"+
|
||||
"\u0000\u02e3\u02e7\u0001\u0000\u0000\u0000\u02e4\u02e6\t\u0000\u0000\u0000"+
|
||||
"\u02e5\u02e4\u0001\u0000\u0000\u0000\u02e6\u02e9\u0001\u0000\u0000\u0000"+
|
||||
"\u02e7\u02e8\u0001\u0000\u0000\u0000\u02e7\u02e5\u0001\u0000\u0000\u0000"+
|
||||
"\u02e8\u02ea\u0001\u0000\u0000\u0000\u02e9\u02e7\u0001\u0000\u0000\u0000"+
|
||||
"\u02ea\u02eb\u0005*\u0000\u0000\u02eb\u02ec\u0005/\u0000\u0000\u02ec\u02ed"+
|
||||
"\u0001\u0000\u0000\u0000\u02ed\u02ee\u0006h\u0000\u0000\u02ee\u00d2\u0001"+
|
||||
"\u0000\u0000\u0000\u000e\u0000\u0291\u0295\u0299\u029e\u02a3\u02a9\u02b0"+
|
||||
"\u02b8\u02ba\u02c8\u02d2\u02dc\u02e7\u0001\u0006\u0000\u0000";
|
||||
public static final ATN _ATN =
|
||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||
static {
|
||||
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
|
||||
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
|
||||
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,668 +0,0 @@
|
||||
// Generated from Java1_4Parser.g4 by ANTLR 4.13.2
|
||||
|
||||
package org.lsmr.cfg;
|
||||
|
||||
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
|
||||
|
||||
/**
|
||||
* This class provides an empty implementation of {@link Java1_4ParserVisitor},
|
||||
* which can be extended to create a visitor which only needs to handle a subset
|
||||
* of the available methods.
|
||||
*
|
||||
* @param <T> The return type of the visit operation. Use {@link Void} for
|
||||
* operations with no return type.
|
||||
*/
|
||||
@SuppressWarnings("CheckReturnValue")
|
||||
public class Java1_4ParserBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements Java1_4ParserVisitor<T> {
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitIdentifier(Java1_4Parser.IdentifierContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitQualifiedIdentifier(Java1_4Parser.QualifiedIdentifierContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLiteral(Java1_4Parser.LiteralContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitType(Java1_4Parser.TypeContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitBasicType(Java1_4Parser.BasicTypeContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitDims(Java1_4Parser.DimsContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExpression(Java1_4Parser.ExpressionContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitAssignmentOperator(Java1_4Parser.AssignmentOperatorContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExpression1(Java1_4Parser.Expression1Context ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExpression1Rest(Java1_4Parser.Expression1RestContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExpression2(Java1_4Parser.Expression2Context ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExpression2Rest(Java1_4Parser.Expression2RestContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitInfixOp(Java1_4Parser.InfixOpContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExpression3(Java1_4Parser.Expression3Context ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitPrefixOp(Java1_4Parser.PrefixOpContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitPostfixOp(Java1_4Parser.PostfixOpContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitPrimary(Java1_4Parser.PrimaryContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitIdentifierSuffix(Java1_4Parser.IdentifierSuffixContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitSelector(Java1_4Parser.SelectorContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitSuperSuffix(Java1_4Parser.SuperSuffixContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitArguments(Java1_4Parser.ArgumentsContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitCreator(Java1_4Parser.CreatorContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitInnerCreator(Java1_4Parser.InnerCreatorContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitArrayCreatorRest(Java1_4Parser.ArrayCreatorRestContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitClassCreatorRest(Java1_4Parser.ClassCreatorRestContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitArrayInitializer(Java1_4Parser.ArrayInitializerContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitVariableInitializer(Java1_4Parser.VariableInitializerContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitParenthesizedExpression(Java1_4Parser.ParenthesizedExpressionContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitBlock(Java1_4Parser.BlockContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitBlockStatement(Java1_4Parser.BlockStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLocalVariableDeclarationStatement(Java1_4Parser.LocalVariableDeclarationStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitStatement(Java1_4Parser.StatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitIfStatement(Java1_4Parser.IfStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitElseClause(Java1_4Parser.ElseClauseContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitForStatement(Java1_4Parser.ForStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitWhileStatement(Java1_4Parser.WhileStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitDoStatement(Java1_4Parser.DoStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitTryStatement(Java1_4Parser.TryStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitSwitchStatement(Java1_4Parser.SwitchStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitSynchronizedStatement(Java1_4Parser.SynchronizedStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitReturnStatement(Java1_4Parser.ReturnStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitThrowStatement(Java1_4Parser.ThrowStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitBreakStatement(Java1_4Parser.BreakStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitContinueStatement(Java1_4Parser.ContinueStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitEmptyStatement(Java1_4Parser.EmptyStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExpressionStatement(Java1_4Parser.ExpressionStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitAssertStatement(Java1_4Parser.AssertStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitLabeledStatement(Java1_4Parser.LabeledStatementContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitStatementExpression(Java1_4Parser.StatementExpressionContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitConstantExpression(Java1_4Parser.ConstantExpressionContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitCatches(Java1_4Parser.CatchesContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitCatchClause(Java1_4Parser.CatchClauseContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitFinallyClause(Java1_4Parser.FinallyClauseContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitSwitchBlockStatementGroup(Java1_4Parser.SwitchBlockStatementGroupContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitSwitchLabel(Java1_4Parser.SwitchLabelContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitForInit(Java1_4Parser.ForInitContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitForUpdate(Java1_4Parser.ForUpdateContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitModifier(Java1_4Parser.ModifierContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitVariableDeclarators(Java1_4Parser.VariableDeclaratorsContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitVariableDeclarator(Java1_4Parser.VariableDeclaratorContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitVariableDeclaratorId(Java1_4Parser.VariableDeclaratorIdContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitConstantDeclarator(Java1_4Parser.ConstantDeclaratorContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitCompilationUnit(Java1_4Parser.CompilationUnitContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitImportDeclaration(Java1_4Parser.ImportDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitTypeDeclaration(Java1_4Parser.TypeDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitClassOrInterfaceDeclaration(Java1_4Parser.ClassOrInterfaceDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitClassDeclaration(Java1_4Parser.ClassDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitSuperclass(Java1_4Parser.SuperclassContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitSuperinterfaces(Java1_4Parser.SuperinterfacesContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitInterfaceDeclaration(Java1_4Parser.InterfaceDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExtendsInterfaces(Java1_4Parser.ExtendsInterfacesContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitTypeList(Java1_4Parser.TypeListContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitClassBody(Java1_4Parser.ClassBodyContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitInterfaceBody(Java1_4Parser.InterfaceBodyContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitClassBodyDeclaration(Java1_4Parser.ClassBodyDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitEmptyDeclaration(Java1_4Parser.EmptyDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitInitializer(Java1_4Parser.InitializerContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitStaticInitializer(Java1_4Parser.StaticInitializerContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitMemberDeclaration(Java1_4Parser.MemberDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitMethodDeclaration(Java1_4Parser.MethodDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitResult(Java1_4Parser.ResultContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitThrows_(Java1_4Parser.Throws_Context ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitFieldDeclaration(Java1_4Parser.FieldDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitConstructorDeclaration(Java1_4Parser.ConstructorDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitConstructorBody(Java1_4Parser.ConstructorBodyContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitExplicitConstructorInvocation(Java1_4Parser.ExplicitConstructorInvocationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitInterfaceBodyDeclaration(Java1_4Parser.InterfaceBodyDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitInterfaceMemberDeclaration(Java1_4Parser.InterfaceMemberDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitInterfaceMethodDeclaration(Java1_4Parser.InterfaceMethodDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitConstantDeclaration(Java1_4Parser.ConstantDeclarationContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitQualifiedIdentifiers(Java1_4Parser.QualifiedIdentifiersContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitFormalParameters(Java1_4Parser.FormalParametersContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitFormalParameter(Java1_4Parser.FormalParameterContext ctx) { return visitChildren(ctx); }
|
||||
}
|
||||
@@ -1,573 +0,0 @@
|
||||
// Generated from Java1_4Parser.g4 by ANTLR 4.13.2
|
||||
|
||||
package org.lsmr.cfg;
|
||||
|
||||
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
|
||||
|
||||
/**
|
||||
* This interface defines a complete generic visitor for a parse tree produced
|
||||
* by {@link Java1_4Parser}.
|
||||
*
|
||||
* @param <T> The return type of the visit operation. Use {@link Void} for
|
||||
* operations with no return type.
|
||||
*/
|
||||
public interface Java1_4ParserVisitor<T> extends ParseTreeVisitor<T> {
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#identifier}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitIdentifier(Java1_4Parser.IdentifierContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#qualifiedIdentifier}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitQualifiedIdentifier(Java1_4Parser.QualifiedIdentifierContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#literal}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLiteral(Java1_4Parser.LiteralContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#type}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitType(Java1_4Parser.TypeContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#basicType}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitBasicType(Java1_4Parser.BasicTypeContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#dims}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitDims(Java1_4Parser.DimsContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#expression}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExpression(Java1_4Parser.ExpressionContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#assignmentOperator}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitAssignmentOperator(Java1_4Parser.AssignmentOperatorContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#expression1}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExpression1(Java1_4Parser.Expression1Context ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#expression1Rest}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExpression1Rest(Java1_4Parser.Expression1RestContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#expression2}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExpression2(Java1_4Parser.Expression2Context ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#expression2Rest}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExpression2Rest(Java1_4Parser.Expression2RestContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#infixOp}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitInfixOp(Java1_4Parser.InfixOpContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#expression3}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExpression3(Java1_4Parser.Expression3Context ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#prefixOp}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitPrefixOp(Java1_4Parser.PrefixOpContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#postfixOp}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitPostfixOp(Java1_4Parser.PostfixOpContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#primary}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitPrimary(Java1_4Parser.PrimaryContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#identifierSuffix}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitIdentifierSuffix(Java1_4Parser.IdentifierSuffixContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#selector}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitSelector(Java1_4Parser.SelectorContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#superSuffix}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitSuperSuffix(Java1_4Parser.SuperSuffixContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#arguments}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitArguments(Java1_4Parser.ArgumentsContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#creator}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitCreator(Java1_4Parser.CreatorContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#innerCreator}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitInnerCreator(Java1_4Parser.InnerCreatorContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#arrayCreatorRest}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitArrayCreatorRest(Java1_4Parser.ArrayCreatorRestContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#classCreatorRest}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitClassCreatorRest(Java1_4Parser.ClassCreatorRestContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#arrayInitializer}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitArrayInitializer(Java1_4Parser.ArrayInitializerContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#variableInitializer}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitVariableInitializer(Java1_4Parser.VariableInitializerContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#parenthesizedExpression}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitParenthesizedExpression(Java1_4Parser.ParenthesizedExpressionContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#block}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitBlock(Java1_4Parser.BlockContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#blockStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitBlockStatement(Java1_4Parser.BlockStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#localVariableDeclarationStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLocalVariableDeclarationStatement(Java1_4Parser.LocalVariableDeclarationStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#statement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitStatement(Java1_4Parser.StatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#ifStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitIfStatement(Java1_4Parser.IfStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#elseClause}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitElseClause(Java1_4Parser.ElseClauseContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#forStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitForStatement(Java1_4Parser.ForStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#whileStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitWhileStatement(Java1_4Parser.WhileStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#doStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitDoStatement(Java1_4Parser.DoStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#tryStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitTryStatement(Java1_4Parser.TryStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#switchStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitSwitchStatement(Java1_4Parser.SwitchStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#synchronizedStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitSynchronizedStatement(Java1_4Parser.SynchronizedStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#returnStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitReturnStatement(Java1_4Parser.ReturnStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#throwStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitThrowStatement(Java1_4Parser.ThrowStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#breakStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitBreakStatement(Java1_4Parser.BreakStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#continueStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitContinueStatement(Java1_4Parser.ContinueStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#emptyStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitEmptyStatement(Java1_4Parser.EmptyStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#expressionStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExpressionStatement(Java1_4Parser.ExpressionStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#assertStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitAssertStatement(Java1_4Parser.AssertStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#labeledStatement}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitLabeledStatement(Java1_4Parser.LabeledStatementContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#statementExpression}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitStatementExpression(Java1_4Parser.StatementExpressionContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#constantExpression}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitConstantExpression(Java1_4Parser.ConstantExpressionContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#catches}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitCatches(Java1_4Parser.CatchesContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#catchClause}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitCatchClause(Java1_4Parser.CatchClauseContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#finallyClause}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitFinallyClause(Java1_4Parser.FinallyClauseContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#switchBlockStatementGroup}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitSwitchBlockStatementGroup(Java1_4Parser.SwitchBlockStatementGroupContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#switchLabel}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitSwitchLabel(Java1_4Parser.SwitchLabelContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#forInit}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitForInit(Java1_4Parser.ForInitContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#forUpdate}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitForUpdate(Java1_4Parser.ForUpdateContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#modifier}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitModifier(Java1_4Parser.ModifierContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#variableDeclarators}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitVariableDeclarators(Java1_4Parser.VariableDeclaratorsContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#variableDeclarator}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitVariableDeclarator(Java1_4Parser.VariableDeclaratorContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#variableDeclaratorId}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitVariableDeclaratorId(Java1_4Parser.VariableDeclaratorIdContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#constantDeclarator}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitConstantDeclarator(Java1_4Parser.ConstantDeclaratorContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#compilationUnit}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitCompilationUnit(Java1_4Parser.CompilationUnitContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#importDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitImportDeclaration(Java1_4Parser.ImportDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#typeDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitTypeDeclaration(Java1_4Parser.TypeDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#classOrInterfaceDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitClassOrInterfaceDeclaration(Java1_4Parser.ClassOrInterfaceDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#classDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitClassDeclaration(Java1_4Parser.ClassDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#superclass}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitSuperclass(Java1_4Parser.SuperclassContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#superinterfaces}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitSuperinterfaces(Java1_4Parser.SuperinterfacesContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#interfaceDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitInterfaceDeclaration(Java1_4Parser.InterfaceDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#extendsInterfaces}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExtendsInterfaces(Java1_4Parser.ExtendsInterfacesContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#typeList}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitTypeList(Java1_4Parser.TypeListContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#classBody}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitClassBody(Java1_4Parser.ClassBodyContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#interfaceBody}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitInterfaceBody(Java1_4Parser.InterfaceBodyContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#classBodyDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitClassBodyDeclaration(Java1_4Parser.ClassBodyDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#emptyDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitEmptyDeclaration(Java1_4Parser.EmptyDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#initializer}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitInitializer(Java1_4Parser.InitializerContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#staticInitializer}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitStaticInitializer(Java1_4Parser.StaticInitializerContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#memberDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitMemberDeclaration(Java1_4Parser.MemberDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#methodDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitMethodDeclaration(Java1_4Parser.MethodDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#result}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitResult(Java1_4Parser.ResultContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#throws_}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitThrows_(Java1_4Parser.Throws_Context ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#fieldDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitFieldDeclaration(Java1_4Parser.FieldDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#constructorDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitConstructorDeclaration(Java1_4Parser.ConstructorDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#constructorBody}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitConstructorBody(Java1_4Parser.ConstructorBodyContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#explicitConstructorInvocation}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitExplicitConstructorInvocation(Java1_4Parser.ExplicitConstructorInvocationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#interfaceBodyDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitInterfaceBodyDeclaration(Java1_4Parser.InterfaceBodyDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#interfaceMemberDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitInterfaceMemberDeclaration(Java1_4Parser.InterfaceMemberDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#interfaceMethodDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitInterfaceMethodDeclaration(Java1_4Parser.InterfaceMethodDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#constantDeclaration}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitConstantDeclaration(Java1_4Parser.ConstantDeclarationContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#qualifiedIdentifiers}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitQualifiedIdentifiers(Java1_4Parser.QualifiedIdentifiersContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#formalParameters}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitFormalParameters(Java1_4Parser.FormalParametersContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by {@link Java1_4Parser#formalParameter}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitFormalParameter(Java1_4Parser.FormalParameterContext ctx);
|
||||
}
|
||||
@@ -1,182 +0,0 @@
|
||||
package org.lsmr.cfg;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Represents nodes in a CFG. Each node is expected to have a non-null,
|
||||
* non-empty label. A node is tightly connected to a specific graph, so the
|
||||
* creation of nodes is permitted only via
|
||||
* {@link ControlFlowGraph#buildNode(String)}.
|
||||
*/
|
||||
public class Node {
|
||||
private ControlFlowGraph graph;
|
||||
private Set<Edge> inEdges = new HashSet<>();
|
||||
private Set<Edge> outEdges = new HashSet<>();
|
||||
private String label;
|
||||
|
||||
private int lineNumber;
|
||||
|
||||
Node(String label) {
|
||||
if (label == null || label.length() < 1)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public void setLineNumber(int lineNumber) {
|
||||
this.lineNumber = lineNumber;
|
||||
}
|
||||
|
||||
public int getLineNumber() {
|
||||
return this.lineNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accesses the label for this node.
|
||||
*
|
||||
* @return The label for this node. Should not be null; should not be empty.
|
||||
*/
|
||||
public String label() {
|
||||
return label;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accesses the parent graph for this node.
|
||||
*
|
||||
* @return The parent graph for this node. Should not be null.
|
||||
*/
|
||||
public ControlFlowGraph graph() {
|
||||
return graph;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accesses the out-edges of this node as an unmodifiable set.
|
||||
*
|
||||
* @return An unmodifiable set of the out-edges of this node.
|
||||
*/
|
||||
public Set<Edge> outEdges() {
|
||||
return Collections.unmodifiableSet(outEdges);
|
||||
}
|
||||
|
||||
/**
|
||||
* Accesses the in-edges of this node as an unmodifiable set.
|
||||
*
|
||||
* @return An unmodifiable set of the in-edges of this node.
|
||||
*/
|
||||
public Set<Edge> inEdges() {
|
||||
return Collections.unmodifiableSet(inEdges);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the indicated edge to this node as an in-edge.
|
||||
*
|
||||
* @param edge
|
||||
* The edge to be added as an in-edge
|
||||
* @throws IllegalArgumentException
|
||||
* If the edge is null.
|
||||
* @throws IllegalStateException
|
||||
* If the target node of the edge is not
|
||||
* identical to this node.
|
||||
*/
|
||||
public void addInEdge(Edge edge) {
|
||||
if (edge == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
if (edge.target() != this)
|
||||
throw new IllegalStateException();
|
||||
|
||||
if (edge.source().graph() == null || edge.target().graph() == null)
|
||||
throw new IllegalStateException();
|
||||
|
||||
inEdges.add(edge);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the indicated edge to this node as an out-edge.
|
||||
*
|
||||
* @param edge
|
||||
* The edge to be added as an out-edge
|
||||
* @throws IllegalArgumentException
|
||||
* If the edge is null.
|
||||
* @throws IllegalStateException
|
||||
* If the source node of the edge is not
|
||||
* identical to this node.
|
||||
*/
|
||||
public void addOutEdge(Edge edge) {
|
||||
if (edge == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
if (edge.source() != this)
|
||||
throw new IllegalStateException();
|
||||
|
||||
if (edge.source().graph() == null || (edge.target() != null && edge.target().graph() == null))
|
||||
throw new IllegalStateException();
|
||||
|
||||
outEdges.add(edge);
|
||||
}
|
||||
|
||||
void setGraph(ControlFlowGraph graph) {
|
||||
if (this.graph != null) {
|
||||
if (graph == null)
|
||||
this.graph = null;
|
||||
} else if (graph == null)
|
||||
throw new IllegalArgumentException();
|
||||
else
|
||||
this.graph = graph;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return label.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Node) {
|
||||
Node other = (Node) obj;
|
||||
|
||||
return label.equals(other.label);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append("node ");
|
||||
sb.append(label);
|
||||
sb.append(": in-edges [");
|
||||
|
||||
boolean start = true;
|
||||
|
||||
for (Edge edge : inEdges) {
|
||||
if (start)
|
||||
start = false;
|
||||
else
|
||||
sb.append(", ");
|
||||
|
||||
sb.append(edge.toString());
|
||||
}
|
||||
|
||||
sb.append("]; out-edges [");
|
||||
|
||||
start = true;
|
||||
|
||||
for (Edge edge : outEdges) {
|
||||
if (start)
|
||||
start = false;
|
||||
else
|
||||
sb.append(", ");
|
||||
|
||||
sb.append(edge.toString());
|
||||
}
|
||||
|
||||
sb.append("]");
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,607 +0,0 @@
|
||||
package org.lsmr.cfg;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Stack;
|
||||
|
||||
import org.antlr.v4.runtime.tree.ErrorNode;
|
||||
import org.antlr.v4.runtime.tree.ParseTree;
|
||||
import org.antlr.v4.runtime.tree.RuleNode;
|
||||
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||
import org.lsmr.cfg.Edge.EdgeLabel;
|
||||
import org.lsmr.cfg.Java1_4Parser.ArgumentsContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ArrayCreatorRestContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ArrayInitializerContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.AssertStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.AssignmentOperatorContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.BasicTypeContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.BlockContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.BlockStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.BreakStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.CatchClauseContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.CatchesContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ClassBodyContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ClassBodyDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ClassCreatorRestContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ClassDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ClassOrInterfaceDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.CompilationUnitContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ConstantDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ConstantDeclaratorContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ConstantExpressionContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ConstructorBodyContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ConstructorDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ContinueStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.CreatorContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.DimsContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.DoStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ElseClauseContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.EmptyDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.EmptyStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ExplicitConstructorInvocationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.Expression1Context;
|
||||
import org.lsmr.cfg.Java1_4Parser.Expression1RestContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.Expression2Context;
|
||||
import org.lsmr.cfg.Java1_4Parser.Expression2RestContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.Expression3Context;
|
||||
import org.lsmr.cfg.Java1_4Parser.ExpressionContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ExpressionStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ExtendsInterfacesContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.FieldDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.FinallyClauseContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ForInitContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ForStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ForUpdateContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.FormalParameterContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.FormalParametersContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.IdentifierContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.IdentifierSuffixContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.IfStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ImportDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.InfixOpContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.InitializerContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.InnerCreatorContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.InterfaceBodyContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.InterfaceBodyDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.InterfaceDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.InterfaceMemberDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.InterfaceMethodDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.LabeledStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.LiteralContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.LocalVariableDeclarationStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.MemberDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.MethodDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ModifierContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ParenthesizedExpressionContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.PostfixOpContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.PrefixOpContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.PrimaryContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.QualifiedIdentifierContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.QualifiedIdentifiersContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ResultContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ReturnStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.SelectorContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.StatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.StatementExpressionContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.StaticInitializerContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.SuperSuffixContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.SuperclassContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.SuperinterfacesContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.SwitchBlockStatementGroupContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.SwitchLabelContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.SwitchStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.SynchronizedStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.ThrowStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.Throws_Context;
|
||||
import org.lsmr.cfg.Java1_4Parser.TryStatementContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.TypeContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.TypeDeclarationContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.TypeListContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.VariableDeclaratorContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.VariableDeclaratorIdContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.VariableDeclaratorsContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.VariableInitializerContext;
|
||||
import org.lsmr.cfg.Java1_4Parser.WhileStatementContext;
|
||||
|
||||
/**
|
||||
* This class will visit the nodes in a parse tree to print the resulting code.
|
||||
*/
|
||||
public class TreePrinter implements Java1_4ParserVisitor<String> {
|
||||
@Override
|
||||
public String visit(ParseTree arg0) {
|
||||
return arg0.accept(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitChildren(RuleNode arg0) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int childCount = arg0.getChildCount();
|
||||
|
||||
for(int i = 0; i < childCount; i++) {
|
||||
sb.append(visit(arg0.getChild(i)));
|
||||
|
||||
if(sb.charAt(sb.length() - 1) != ' ')
|
||||
sb.append(" ");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitErrorNode(ErrorNode arg0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitTerminal(TerminalNode arg0) {
|
||||
return arg0.getText();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitIdentifier(IdentifierContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitQualifiedIdentifier(QualifiedIdentifierContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitLiteral(LiteralContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitType(TypeContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitBasicType(BasicTypeContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExpression(ExpressionContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitAssignmentOperator(AssignmentOperatorContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExpression1(Expression1Context ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExpression1Rest(Expression1RestContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExpression2(Expression2Context ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExpression2Rest(Expression2RestContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitInfixOp(InfixOpContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExpression3(Expression3Context ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitPrefixOp(PrefixOpContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitPostfixOp(PostfixOpContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitPrimary(PrimaryContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitIdentifierSuffix(IdentifierSuffixContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitSelector(SelectorContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitSuperSuffix(SuperSuffixContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitArguments(ArgumentsContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitCreator(CreatorContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitInnerCreator(InnerCreatorContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitArrayCreatorRest(ArrayCreatorRestContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitClassCreatorRest(ClassCreatorRestContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitArrayInitializer(ArrayInitializerContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitVariableInitializer(VariableInitializerContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitBlock(BlockContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitBlockStatement(BlockStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitLocalVariableDeclarationStatement(LocalVariableDeclarationStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitAssertStatement(AssertStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitBreakStatement(BreakStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitContinueStatement(ContinueStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitDoStatement(DoStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitIfStatement(IfStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitTryStatement(TryStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitForStatement(ForStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitWhileStatement(WhileStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitSwitchStatement(SwitchStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitSynchronizedStatement(SynchronizedStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitReturnStatement(ReturnStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitThrowStatement(ThrowStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitEmptyStatement(EmptyStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExpressionStatement(ExpressionStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitStatementExpression(StatementExpressionContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitConstantExpression(ConstantExpressionContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitCatches(CatchesContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitCatchClause(CatchClauseContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitSwitchBlockStatementGroup(SwitchBlockStatementGroupContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitSwitchLabel(SwitchLabelContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitForInit(ForInitContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitForUpdate(ForUpdateContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitModifier(ModifierContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitVariableDeclarators(VariableDeclaratorsContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitVariableDeclarator(VariableDeclaratorContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitVariableDeclaratorId(VariableDeclaratorIdContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitConstantDeclarator(ConstantDeclaratorContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitCompilationUnit(CompilationUnitContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitImportDeclaration(ImportDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitTypeDeclaration(TypeDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitClassOrInterfaceDeclaration(ClassOrInterfaceDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitClassDeclaration(ClassDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitInterfaceDeclaration(InterfaceDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitTypeList(TypeListContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitClassBody(ClassBodyContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitInterfaceBody(InterfaceBodyContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitClassBodyDeclaration(ClassBodyDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitMemberDeclaration(MemberDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitMethodDeclaration(MethodDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitInterfaceBodyDeclaration(InterfaceBodyDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitFormalParameters(FormalParametersContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitFormalParameter(FormalParameterContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitDims(DimsContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitParenthesizedExpression(ParenthesizedExpressionContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitStatement(StatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitSuperclass(SuperclassContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitSuperinterfaces(SuperinterfacesContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExtendsInterfaces(ExtendsInterfacesContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitEmptyDeclaration(EmptyDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitInitializer(InitializerContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitStaticInitializer(StaticInitializerContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitResult(ResultContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitThrows_(Throws_Context ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitFieldDeclaration(FieldDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitConstructorDeclaration(ConstructorDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitConstructorBody(ConstructorBodyContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitExplicitConstructorInvocation(ExplicitConstructorInvocationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitInterfaceMemberDeclaration(InterfaceMemberDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitInterfaceMethodDeclaration(InterfaceMethodDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitConstantDeclaration(ConstantDeclarationContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitQualifiedIdentifiers(QualifiedIdentifiersContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitElseClause(ElseClauseContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitFinallyClause(FinallyClauseContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitLabeledStatement(LabeledStatementContext ctx) {
|
||||
return visitChildren(ctx);
|
||||
}
|
||||
}
|
||||
403
src/pdg/PDG.java
403
src/pdg/PDG.java
@@ -1,403 +0,0 @@
|
||||
package pdg;
|
||||
|
||||
import org.lsmr.cfg.*;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Implementation notes:
|
||||
* - Control dependencies computed via iterative reachability analysis
|
||||
* - Data dependencies computed via reaching definitions analysis
|
||||
* - Support Java 1.4 syntax with simple pattern matching
|
||||
*
|
||||
*/
|
||||
public class PDG {
|
||||
|
||||
private ControlFlowGraph cfg;
|
||||
private Map<String, Set<String>> controlDeps;
|
||||
private Map<String, Set<String>> dataDeps;
|
||||
|
||||
public PDG(ControlFlowGraph cfg) {
|
||||
this.cfg = cfg;
|
||||
this.controlDeps = new HashMap<>();
|
||||
this.dataDeps = new HashMap<>();
|
||||
|
||||
System.out.println("Building PDG...");
|
||||
computeControlDependencies();
|
||||
computeDataDependencies();
|
||||
System.out.println("PDG complete!");
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute control dependencies using simple reachability
|
||||
*/
|
||||
private void computeControlDependencies() {
|
||||
System.out.println("\tComputing control dependencies...");
|
||||
|
||||
boolean changed = true;
|
||||
|
||||
while (changed) {
|
||||
changed = false;
|
||||
|
||||
for (Node node : cfg.nodes()) {
|
||||
Set<String> deps = new HashSet<>();
|
||||
|
||||
for (Edge inEdge : node.inEdges()) {
|
||||
Node pred = inEdge.source();
|
||||
|
||||
// get all deps from
|
||||
if (controlDeps.containsKey(pred.label())) {
|
||||
deps.addAll(controlDeps.get(pred.label()));
|
||||
}
|
||||
|
||||
// update deps if pred is a branching node liek if and while
|
||||
if (pred.outEdges().size() > 1) {
|
||||
deps.add(pred.label());
|
||||
}
|
||||
}
|
||||
// compare prev iteration to current if we found changes in depns update control
|
||||
// deps. else exit loop
|
||||
Set<String> oldDeps = controlDeps.get(node.label());
|
||||
if (oldDeps == null || !oldDeps.equals(deps)) {
|
||||
controlDeps.put(node.label(), deps);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("\t\tFound " + countDependencies(controlDeps) + " control dependencies");
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute data dependencies using reaching definitions
|
||||
*/
|
||||
private void computeDataDependencies() {
|
||||
System.out.println(" Computing data dependencies...");
|
||||
|
||||
// 1. Find definitions and uses for each node
|
||||
Map<String, Set<String>> defs = new HashMap<>();
|
||||
Map<String, Set<String>> uses = new HashMap<>();
|
||||
|
||||
for (Node node : cfg.nodes()) {
|
||||
String label = node.label();
|
||||
defs.put(label, extractDefs(label));
|
||||
uses.put(label, extractUses(label));
|
||||
}
|
||||
System.out.println(defs.toString());
|
||||
System.out.println(uses.toString());
|
||||
|
||||
// 2. Compute reaching definitions
|
||||
Map<String, Map<String, Set<String>>> reaching = computeReachingDefinitions(defs);
|
||||
|
||||
// 3. Build data dependencies
|
||||
for (Node node : cfg.nodes()) {
|
||||
String label = node.label();
|
||||
Set<String> deps = new HashSet<>();
|
||||
|
||||
for (String var : uses.get(label)) {
|
||||
if (reaching.containsKey(label) && reaching.get(label).containsKey(var)) {
|
||||
deps.addAll(reaching.get(label).get(var));
|
||||
}
|
||||
}
|
||||
|
||||
dataDeps.put(label, deps);
|
||||
}
|
||||
|
||||
System.out.println(" Found " + countDependencies(dataDeps) + " data dependencies");
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract variable definitions from a statement simple pattern matching for
|
||||
* Java 1.4
|
||||
*/
|
||||
private Set<String> extractDefs(String statement) {
|
||||
Set<String> vars = new HashSet<>();
|
||||
// exclude comments
|
||||
if (statement.startsWith("*") || statement.startsWith("/"))
|
||||
return vars;
|
||||
|
||||
// used for normal assignments exclude anything else
|
||||
boolean isDef = statement.contains("=") &&
|
||||
!statement.contains("==") &&
|
||||
!statement.contains("<=") &&
|
||||
!statement.contains(">=") &&
|
||||
!statement.contains("!=");
|
||||
|
||||
if (isDef) {
|
||||
String lhs = statement.substring(0, statement.indexOf('=')).trim();
|
||||
|
||||
// remove left over operators after getting teh substring
|
||||
if (lhs.endsWith("+") || lhs.endsWith("-") || lhs.endsWith("*") || lhs.endsWith("/") || lhs.endsWith("%")
|
||||
|| lhs.endsWith("&") || lhs.endsWith("|") || lhs.endsWith("^")) {
|
||||
lhs = lhs.substring(0, lhs.length() - 1).trim();
|
||||
}
|
||||
|
||||
// for possible arrays
|
||||
if (lhs.contains("[")) {
|
||||
lhs = lhs.substring(0, lhs.indexOf('[')).trim();
|
||||
}
|
||||
|
||||
// get last "word" splits by whitespace
|
||||
String[] tokens = lhs.split("\\s+");
|
||||
if (tokens.length > 0) {
|
||||
String var = tokens[tokens.length - 1];
|
||||
if (!var.isEmpty() && Character.isJavaIdentifierStart(var.charAt(0))) {
|
||||
vars.add(var);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle For Loops
|
||||
if (statement.contains("for") && statement.contains("(")) {
|
||||
String inside = statement.substring(statement.indexOf("(") + 1);
|
||||
if (inside.contains(";")) {
|
||||
String[] parts = inside.split(";");
|
||||
|
||||
// Init def: "int i = 0"
|
||||
if (parts.length > 0 && parts[0].contains("=")) {
|
||||
String part = parts[0].substring(0, parts[0].indexOf('=')).trim();
|
||||
String[] tokens = part.split("\\s+");
|
||||
if (tokens.length > 0) {
|
||||
// retrieve last element
|
||||
String var = tokens[tokens.length - 1];
|
||||
vars.add(var);
|
||||
}
|
||||
}
|
||||
|
||||
// Update def for: "i++", "i--", "++i"
|
||||
if (parts.length >= 3) {
|
||||
String update = parts[parts.length - 1];
|
||||
update = update.replaceAll("\\)", ""); // remove closing paren if present
|
||||
if (update.contains("++") || update.contains("--")) {
|
||||
String var = update;
|
||||
if (!var.isEmpty())
|
||||
vars.add(var);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return vars;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract variable uses from a statement
|
||||
*/
|
||||
private Set<String> extractUses(String statement) {
|
||||
Set<String> vars = new HashSet<>();
|
||||
|
||||
// check for normal definition
|
||||
boolean isDef = statement.contains("=") &&
|
||||
!statement.contains("==") &&
|
||||
!statement.contains("<=") &&
|
||||
!statement.contains(">=") &&
|
||||
!statement.contains("!=");
|
||||
|
||||
String searchArea = statement;
|
||||
|
||||
// Two cases: 1. normal def only RHS matters 2. compound def both LHS and RHS
|
||||
// matter
|
||||
if (isDef) {
|
||||
int eqIndex = statement.indexOf('=');
|
||||
// check for += -= etc. if it exists we found a compound def
|
||||
boolean isCompound = eqIndex > 0 && "+-*/%&|^".indexOf(statement.charAt(eqIndex - 1)) != -1;
|
||||
|
||||
if (isCompound) {
|
||||
// both RHS & LHS
|
||||
searchArea = statement;
|
||||
} else {
|
||||
// only RHS
|
||||
searchArea = statement.substring(eqIndex + 1); // skip anything before =
|
||||
}
|
||||
}
|
||||
|
||||
// Tokenize and filter
|
||||
// fancy split on non-identifier characters to extract all variables used
|
||||
String[] tokens = searchArea.split("[^a-zA-Z0-9_]+");
|
||||
|
||||
for (int i = 0; i < tokens.length; i++) {
|
||||
String token = tokens[i];
|
||||
if (token.isEmpty())
|
||||
continue;
|
||||
|
||||
// Basic validity checks
|
||||
if (Character.isJavaIdentifierStart(token.charAt(0))
|
||||
&& !isKeyword(token)
|
||||
&& !token.matches("\\d+")) {
|
||||
// skip if its a method
|
||||
boolean isMethodCall = statement.matches(".*\\b" + token + "\\s*\\(.*");
|
||||
|
||||
if (!isMethodCall) {
|
||||
vars.add(token);
|
||||
}
|
||||
}
|
||||
}
|
||||
return vars;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a word is a Java keyword
|
||||
*/
|
||||
private boolean isKeyword(String word) {
|
||||
Set<String> keywords = new HashSet<>(Arrays.asList(
|
||||
"if", "else", "while", "for", "do", "return", "break", "continue",
|
||||
"int", "double", "float", "char", "boolean", "void", "String",
|
||||
"new", "null", "true", "false", "class", "public", "private",
|
||||
"static", "final", "this", "super", "try", "catch", "throw", "throws", "EXIT", "block", "ENTRY",
|
||||
"THROWN"));
|
||||
return keywords.contains(word);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute reaching definitions using iterative data flow analysis
|
||||
*/
|
||||
private Map<String, Map<String, Set<String>>> computeReachingDefinitions(
|
||||
Map<String, Set<String>> defs) {
|
||||
|
||||
Map<String, Map<String, Set<String>>> reaching = new HashMap<>();
|
||||
for (Node node : cfg.nodes()) {
|
||||
reaching.put(node.label(), new HashMap<>());
|
||||
}
|
||||
boolean changed = true;
|
||||
while (changed) {
|
||||
changed = false;
|
||||
|
||||
for (Node node : cfg.nodes()) {
|
||||
String label = node.label();
|
||||
Map<String, Set<String>> oldReaching = new HashMap<>(reaching.get(label));
|
||||
Map<String, Set<String>> newReaching = new HashMap<>();
|
||||
for (Edge inEdge : node.inEdges()) {
|
||||
Node pred = inEdge.source();
|
||||
String predLabel = pred.label();
|
||||
|
||||
Map<String, Set<String>> predOut = new HashMap<>();
|
||||
|
||||
// In predecesor def
|
||||
if (reaching.containsKey(predLabel)) {
|
||||
for (Map.Entry<String, Set<String>> entry : reaching.get(predLabel).entrySet()) {
|
||||
// create a copy of the set
|
||||
predOut.put(entry.getKey(), new HashSet<>(entry.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
// kill & gen
|
||||
if (defs.containsKey(predLabel)) {
|
||||
for (String var : defs.get(predLabel)) {
|
||||
// since new def, we update definition of x to new definition
|
||||
Set<String> newDef = new HashSet<>();
|
||||
newDef.add(predLabel);
|
||||
predOut.put(var, newDef);
|
||||
}
|
||||
}
|
||||
|
||||
// merge
|
||||
for (Map.Entry<String, Set<String>> entry : predOut.entrySet()) {
|
||||
String var = entry.getKey();
|
||||
newReaching.putIfAbsent(var, new HashSet<>());
|
||||
newReaching.get(var).addAll(entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
reaching.put(label, newReaching);
|
||||
// nothing changed then exit
|
||||
if (!mapsEqual(oldReaching, newReaching)) {
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return reaching;
|
||||
}
|
||||
|
||||
private boolean mapsEqual(Map<String, Set<String>> m1, Map<String, Set<String>> m2) {
|
||||
if (m1.size() != m2.size())
|
||||
return false;
|
||||
for (String key : m1.keySet()) {
|
||||
if (!m2.containsKey(key))
|
||||
return false;
|
||||
if (!m1.get(key).equals(m2.get(key)))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private int countDependencies(Map<String, Set<String>> deps) {
|
||||
int count = 0;
|
||||
for (Set<String> set : deps.values()) {
|
||||
count += set.size();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
public Set<String> getDependencies(String nodeLabel) {
|
||||
Set<String> all = new HashSet<>();
|
||||
if (controlDeps.containsKey(nodeLabel)) {
|
||||
all.addAll(controlDeps.get(nodeLabel));
|
||||
}
|
||||
if (dataDeps.containsKey(nodeLabel)) {
|
||||
all.addAll(dataDeps.get(nodeLabel));
|
||||
}
|
||||
return all;
|
||||
}
|
||||
|
||||
public Set<String> computeForwardSlice(String nodeLabel) {
|
||||
Set<String> slice = new HashSet<>();
|
||||
Queue<String> worklist = new LinkedList<>();
|
||||
|
||||
slice.add(nodeLabel);
|
||||
worklist.add(nodeLabel);
|
||||
while (!worklist.isEmpty()) {
|
||||
String current = worklist.poll();
|
||||
for (String node : getAllNodes()) {
|
||||
if (!slice.contains(node)) {
|
||||
Set<String> deps = getDependencies(node);
|
||||
if (deps.contains(current)) {
|
||||
slice.add(node);
|
||||
worklist.add(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return slice;
|
||||
}
|
||||
|
||||
private Set<String> getAllNodes() {
|
||||
Set<String> nodes = new HashSet<>();
|
||||
for (Node node : cfg.nodes()) {
|
||||
nodes.add(node.label());
|
||||
}
|
||||
return nodes;
|
||||
}
|
||||
|
||||
public void printPDG() {
|
||||
System.out.println("CONTROL DEPENDENCIES:");
|
||||
for (Map.Entry<String, Set<String>> entry : controlDeps.entrySet()) {
|
||||
if (!entry.getValue().isEmpty()) {
|
||||
System.out.println(" " + entry.getKey());
|
||||
for (String dep : entry.getValue()) {
|
||||
System.out.println(" <- " + dep);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("\nDATA DEPENDENCIES:");
|
||||
for (Map.Entry<String, Set<String>> entry : dataDeps.entrySet()) {
|
||||
if (!entry.getValue().isEmpty()) {
|
||||
System.out.println(" " + entry.getKey());
|
||||
for (String dep : entry.getValue()) {
|
||||
System.out.println(" <- " + dep);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, Set<String>> getControlDependencies() {
|
||||
return new HashMap<>(controlDeps);
|
||||
}
|
||||
|
||||
public Map<String, Set<String>> getDataDependencies() {
|
||||
return new HashMap<>(dataDeps);
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
public class Example1 {
|
||||
// public void test() {
|
||||
// int x = 5;
|
||||
// int y = x + 10;
|
||||
// int z = y * 2;
|
||||
// int result = z + x;
|
||||
// }
|
||||
// public void test1(int a) {
|
||||
// int x = 5;
|
||||
// int y = 0;
|
||||
|
||||
// if (a > 10) {
|
||||
// y = x + a;
|
||||
// } else {
|
||||
// y = x - a;
|
||||
// }
|
||||
|
||||
// int result = y * 2;
|
||||
// }
|
||||
public void test2() {
|
||||
int sum = 0;
|
||||
int i = 0;
|
||||
|
||||
while (i < 10) {
|
||||
i = 2;
|
||||
sum = sum + i;
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
public class test1 {
|
||||
public static void main(String[] args) {
|
||||
int x = 5; // Line 3
|
||||
int y = x + 2; // Line 4
|
||||
int z = y * 3; // Line 5
|
||||
System.out.println(z); // Line 6
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
public class test10{
|
||||
public static void main(String[] args) {
|
||||
int a = 2; // Line 3
|
||||
int b = 3; // Line 4
|
||||
int c = 4; // Line 5
|
||||
int result = (a + b) * c; // Line 6
|
||||
int x = result / 2; // Line 7
|
||||
if (x > 5) { // Line 8
|
||||
System.out.println(x); // Line 9
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
public class test2{
|
||||
public static void main(String[] args) {
|
||||
int x = 10; // Line 3
|
||||
int y = 0; // Line 4
|
||||
if (x > 5) { // Line 5
|
||||
y = x * 2; // Line 6
|
||||
}
|
||||
int z = y + 1; // Line 8
|
||||
System.out.println(z); // Line 9
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
public class test3 {
|
||||
public static void main(String[] args) {
|
||||
int sum = 0; // Line 3
|
||||
int i; // Line 4
|
||||
for (i = 0; i < 5; i++) { // Line 5
|
||||
sum = sum + i; // Line 6
|
||||
}
|
||||
System.out.println(sum); // Line 8
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
public class test4{
|
||||
public static void main(String[] args) {
|
||||
int x = 10; // Line 3
|
||||
int y = 0; // Line 4
|
||||
if (x > 5) { // Line 5
|
||||
y = x + 10; // Line 6
|
||||
} else {
|
||||
y = x - 10; // Line 8
|
||||
}
|
||||
int z = y * 2; // Line 10
|
||||
System.out.println(z); // Line 11
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
public class test5 {
|
||||
public static void main(String[] args) {
|
||||
int a = 5; // Line 3
|
||||
int b = a + 2; // Line 4
|
||||
int c = a * 3; // Line 5
|
||||
int d = b + c; // Line 6
|
||||
System.out.println(d); // Line 7
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
public class test6{
|
||||
public static void main(String[] args) {
|
||||
int x = 10; // Line 3
|
||||
int y = 0; // Line 4
|
||||
if (x > 5) { // Line 5
|
||||
if (x > 8) { // Line 6
|
||||
y = x * 2; // Line 7
|
||||
}
|
||||
}
|
||||
int z = y + 1; // Line 10
|
||||
System.out.println(z); // Line 11
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
public class test7 {
|
||||
public static void main(String[] args) {
|
||||
int count = 0; // Line 3
|
||||
int sum = 0; // Line 4
|
||||
while (count < 5) { // Line 5
|
||||
sum = sum + count; // Line 6
|
||||
count = count + 1; // Line 7
|
||||
}
|
||||
System.out.println(sum); // Line 9
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
public class test8 {
|
||||
public static void main(String[] args) {
|
||||
int x = 5; // Line 3
|
||||
int y = x + 1; // Line 4
|
||||
x = 10; // Line 5
|
||||
int z = x * 2; // Line 6
|
||||
System.out.println(y); // Line 7
|
||||
System.out.println(z); // Line 8
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
public class test9{
|
||||
public static void main(String[] args) {
|
||||
int x = 5; // Line 3
|
||||
int y = 10; // Line 4
|
||||
int z = x + 1; // Line 5
|
||||
int w = y + 2; // Line 6
|
||||
System.out.println(z); // Line 7
|
||||
System.out.println(w); // Line 8
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user