Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c59eb1b5b | ||
|
|
35458c6cbf | ||
|
|
5ac562803a | ||
|
|
4893129144 | ||
|
|
27bc69e837 | ||
|
|
4c7002c263 | ||
|
|
046634109c | ||
|
|
c40bdeb411 | ||
|
|
c70db58e20 | ||
|
|
9437b5e88d | ||
|
|
6d02dc8fa7 | ||
|
|
35b5447c7d | ||
|
|
8579c0bfc0 | ||
|
|
c574bf8100 | ||
|
|
c021b1eabf | ||
|
|
ab9d95be1f | ||
|
|
cd1a698fa5 |
File diff suppressed because one or more lines are too long
@@ -1,795 +0,0 @@
|
|||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,200 +0,0 @@
|
|||||||
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
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -1,200 +0,0 @@
|
|||||||
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
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -1,200 +0,0 @@
|
|||||||
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
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/bin
|
||||||
|
.vscode/
|
||||||
3
.idea/.gitignore
generated
vendored
3
.idea/.gitignore
generated
vendored
@@ -1,3 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
9
.idea/CPSC-499.iml
generated
9
.idea/CPSC-499.iml
generated
@@ -1,9 +0,0 @@
|
|||||||
<?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
4
.idea/misc.xml
generated
@@ -1,4 +0,0 @@
|
|||||||
<?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
8
.idea/modules.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<?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
6
.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
230
ExprLexer.g4
230
ExprLexer.g4
@@ -1,230 +0,0 @@
|
|||||||
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
248
ExprParser.g4
@@ -1,248 +0,0 @@
|
|||||||
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
248
ExprSyntactic.g4
@@ -1,248 +0,0 @@
|
|||||||
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
105
ExprTool.java
@@ -1,105 +0,0 @@
|
|||||||
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 +1,467 @@
|
|||||||
# CPSC-499
|
## 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)
|
||||||
|
|
||||||
|
|
||||||
|
### 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
|
||||||
|
```
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
## Test1 simple data flow
|
||||||
|
### Line 3 (int x = 5;)
|
||||||
|
AIS = {3, 4, 5, 6}
|
||||||
|
|
||||||
|
```bash
|
||||||
|
=== Impact Analysis for Line 3 ===
|
||||||
|
|
||||||
|
Statement(s) at line 3:
|
||||||
|
1: int x = 5 ;
|
||||||
|
|
||||||
|
=== IMPACTED LINES ===
|
||||||
|
Line 3
|
||||||
|
Line 4
|
||||||
|
Line 5
|
||||||
|
Line 6
|
||||||
|
|
||||||
|
Total: 4 lines impacted
|
||||||
|
```
|
||||||
|
1. TP: {3, 4, 5, 6} |TP| = 4
|
||||||
|
2. FP: {} |FP| = 0
|
||||||
|
3. FN: {} |FN| = 0
|
||||||
|
4. TN: {} |TN| = 0
|
||||||
|
|
||||||
|
|
||||||
|
### Line 4 (int y = x + 2;)
|
||||||
|
AIS = {4,5,6}
|
||||||
|
|
||||||
|
```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
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
33
run.sh
Executable file
33
run.sh
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/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
Normal file
BIN
src/.DS_Store
vendored
Normal file
Binary file not shown.
81
src/CFGBuilder.java
Normal file
81
src/CFGBuilder.java
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
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
Normal file
148
src/CIA.java
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
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
Normal file
BIN
src/org/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
src/org/lsmr/.DS_Store
vendored
Normal file
BIN
src/org/lsmr/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
src/org/lsmr/cfg/.DS_Store
vendored
Normal file
BIN
src/org/lsmr/cfg/.DS_Store
vendored
Normal file
Binary file not shown.
312
src/org/lsmr/cfg/ControlFlowGraph.java
Normal file
312
src/org/lsmr/cfg/ControlFlowGraph.java
Normal file
@@ -0,0 +1,312 @@
|
|||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
207
src/org/lsmr/cfg/Edge.java
Normal file
207
src/org/lsmr/cfg/Edge.java
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
891
src/org/lsmr/cfg/Java1_4Lexer.java
Normal file
891
src/org/lsmr/cfg/Java1_4Lexer.java
Normal file
@@ -0,0 +1,891 @@
|
|||||||
|
// 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
6775
src/org/lsmr/cfg/Java1_4Parser.java
Normal file
6775
src/org/lsmr/cfg/Java1_4Parser.java
Normal file
File diff suppressed because it is too large
Load Diff
668
src/org/lsmr/cfg/Java1_4ParserBaseVisitor.java
Normal file
668
src/org/lsmr/cfg/Java1_4ParserBaseVisitor.java
Normal file
@@ -0,0 +1,668 @@
|
|||||||
|
// 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); }
|
||||||
|
}
|
||||||
573
src/org/lsmr/cfg/Java1_4ParserVisitor.java
Normal file
573
src/org/lsmr/cfg/Java1_4ParserVisitor.java
Normal file
@@ -0,0 +1,573 @@
|
|||||||
|
// 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);
|
||||||
|
}
|
||||||
182
src/org/lsmr/cfg/Node.java
Normal file
182
src/org/lsmr/cfg/Node.java
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
1403
src/org/lsmr/cfg/NodeBuilder.java
Normal file
1403
src/org/lsmr/cfg/NodeBuilder.java
Normal file
File diff suppressed because it is too large
Load Diff
607
src/org/lsmr/cfg/TreePrinter.java
Normal file
607
src/org/lsmr/cfg/TreePrinter.java
Normal file
@@ -0,0 +1,607 @@
|
|||||||
|
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
Normal file
403
src/pdg/PDG.java
Normal file
@@ -0,0 +1,403 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
tests/Example1.java
Normal file
30
tests/Example1.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
8
tests/test1.java
Normal file
8
tests/test1.java
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
12
tests/test10.java
Normal file
12
tests/test10.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
tests/test2.java
Normal file
11
tests/test2.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
10
tests/test3.java
Normal file
10
tests/test3.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
13
tests/test4.java
Normal file
13
tests/test4.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
9
tests/test5.java
Normal file
9
tests/test5.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
13
tests/test6.java
Normal file
13
tests/test6.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
11
tests/test7.java
Normal file
11
tests/test7.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
10
tests/test8.java
Normal file
10
tests/test8.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
10
tests/test9.java
Normal file
10
tests/test9.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
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