diff --git a/.gitignore b/.gitignore index 5b5bd2b..f2c52f6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ __pycache__ .vscode .lh test.py +venv/ build/ *.egg-info diff --git a/ic/candid.py b/ic/candid.py index 5a6b0ce..42a2689 100755 --- a/ic/candid.py +++ b/ic/candid.py @@ -1014,6 +1014,8 @@ def _encodeAnnotation(self, ann: str): return int.to_bytes(1, 1, byteorder='big') elif ann == 'oneway': return int.to_bytes(2, 1, byteorder='big') + elif ann == "composite_query": + return int.to_bytes(3, 1, byteorder='big') else: raise ValueError('Illeagal function annotation') diff --git a/ic/canister.py b/ic/canister.py index 96b34f9..76d0ddb 100644 --- a/ic/canister.py +++ b/ic/canister.py @@ -53,7 +53,7 @@ def __call__(self, *args, **kwargs): arguments.append({"type": self.args[i], "value": arg}) effective_cansiter_id = args[0]['canister_id'] if self.canister_id == 'aaaaa-aa' and len(args) > 0 and type(args[0]) == dict and 'canister_id' in args[0] else self.canister_id - if self.anno == 'query': + if self.anno == 'query' or self.anno == 'composite_query': res = self.agent.query_raw( self.canister_id, self.name, @@ -93,7 +93,7 @@ async def __call__(self, *args, **kwargs): arguments.append({"type": self.args[i], "value": arg}) effective_cansiter_id = args[0]['canister_id'] if self.canister_id == 'aaaaa-aa' and len(args) > 0 and type(args[0]) == dict and 'canister_id' in args[0] else self.canister_id - if self.anno == 'query': + if self.anno == 'query' or self.anno == 'composite_query': res = await self.agent.query_raw_async( self.canister_id, self.name, diff --git a/ic/parser/DIDLexer.py b/ic/parser/DIDLexer.py index 5198134..c36203d 100644 --- a/ic/parser/DIDLexer.py +++ b/ic/parser/DIDLexer.py @@ -11,123 +11,131 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\32") - buf.write("\u011a\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\33") + buf.write("\u012c\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") - buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\3\2") - buf.write("\3\2\3\2\3\2\7\2@\n\2\f\2\16\2C\13\2\3\2\3\2\3\2\3\2\3") - buf.write("\2\3\3\3\3\3\3\3\3\7\3N\n\3\f\3\16\3Q\13\3\3\3\3\3\3\4") - buf.write("\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3") - buf.write("\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3") - buf.write("\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b") - buf.write("\3\b\3\b\5\b\u008e\n\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") + buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36") + buf.write("\t\36\3\2\3\2\3\2\3\2\7\2B\n\2\f\2\16\2E\13\2\3\2\3\2") + buf.write("\3\2\3\2\3\2\3\3\3\3\3\3\3\3\7\3P\n\3\f\3\16\3S\13\3\3") + buf.write("\3\3\3\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6") + buf.write("\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3") + buf.write("\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t") buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t") - buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3") - buf.write("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u00ca\n\t\3") - buf.write("\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f") - buf.write("\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16") - buf.write("\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20") - buf.write("\3\20\3\21\3\21\3\22\3\22\3\22\5\22\u00f7\n\22\3\23\3") - buf.write("\23\3\24\5\24\u00fc\n\24\3\24\3\24\7\24\u0100\n\24\f\24") - buf.write("\16\24\u0103\13\24\3\24\5\24\u0106\n\24\3\25\3\25\3\26") - buf.write("\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\33") - buf.write("\3\33\3\34\3\34\3\35\3\35\3A\2\36\3\3\5\4\7\5\t\6\13\7") - buf.write("\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\2") - buf.write("!\2#\2%\2\'\21)\22+\23-\24/\25\61\26\63\27\65\30\67\31") - buf.write("9\32\3\2\7\4\2\f\f\17\17\5\2\13\f\17\17\"\"\4\2C\\c|\3") - buf.write("\2\62;\5\2C\\aac|\2\u012d\2\3\3\2\2\2\2\5\3\2\2\2\2\7") - buf.write("\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2") - buf.write("\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2") - buf.write("\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\'\3\2\2\2") - buf.write("\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2") - buf.write("\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2") - buf.write("\3;\3\2\2\2\5I\3\2\2\2\7T\3\2\2\2\tX\3\2\2\2\13]\3\2\2") - buf.write("\2\rc\3\2\2\2\17\u008d\3\2\2\2\21\u00c9\3\2\2\2\23\u00cb") - buf.write("\3\2\2\2\25\u00cf\3\2\2\2\27\u00d3\3\2\2\2\31\u00da\3") - buf.write("\2\2\2\33\u00e2\3\2\2\2\35\u00ea\3\2\2\2\37\u00ef\3\2") - buf.write("\2\2!\u00f1\3\2\2\2#\u00f6\3\2\2\2%\u00f8\3\2\2\2\'\u00fb") - buf.write("\3\2\2\2)\u0107\3\2\2\2+\u0109\3\2\2\2-\u010b\3\2\2\2") - buf.write("/\u010d\3\2\2\2\61\u010f\3\2\2\2\63\u0112\3\2\2\2\65\u0114") - buf.write("\3\2\2\2\67\u0116\3\2\2\29\u0118\3\2\2\2;<\7\61\2\2<=") - buf.write("\7,\2\2=A\3\2\2\2>@\13\2\2\2?>\3\2\2\2@C\3\2\2\2AB\3\2") - buf.write("\2\2A?\3\2\2\2BD\3\2\2\2CA\3\2\2\2DE\7,\2\2EF\7\61\2\2") - buf.write("FG\3\2\2\2GH\b\2\2\2H\4\3\2\2\2IJ\7\61\2\2JK\7\61\2\2") - buf.write("KO\3\2\2\2LN\n\2\2\2ML\3\2\2\2NQ\3\2\2\2OM\3\2\2\2OP\3") - buf.write("\2\2\2PR\3\2\2\2QO\3\2\2\2RS\b\3\2\2S\6\3\2\2\2TU\t\3") - buf.write("\2\2UV\3\2\2\2VW\b\4\2\2W\b\3\2\2\2XY\7v\2\2YZ\7{\2\2") - buf.write("Z[\7r\2\2[\\\7g\2\2\\\n\3\2\2\2]^\7s\2\2^_\7w\2\2_`\7") - buf.write("g\2\2`a\7t\2\2ab\7{\2\2b\f\3\2\2\2cd\7q\2\2de\7p\2\2e") - buf.write("f\7g\2\2fg\7y\2\2gh\7c\2\2hi\7{\2\2i\16\3\2\2\2j\u008e") - buf.write("\5\21\t\2kl\7d\2\2lm\7q\2\2mn\7q\2\2n\u008e\7n\2\2op\7") - buf.write("v\2\2pq\7g\2\2qr\7z\2\2r\u008e\7v\2\2st\7p\2\2tu\7w\2") - buf.write("\2uv\7n\2\2v\u008e\7n\2\2wx\7t\2\2xy\7g\2\2yz\7u\2\2z") - buf.write("{\7g\2\2{|\7t\2\2|}\7x\2\2}~\7g\2\2~\u008e\7f\2\2\177") - buf.write("\u0080\7g\2\2\u0080\u0081\7o\2\2\u0081\u0082\7r\2\2\u0082") - buf.write("\u0083\7v\2\2\u0083\u008e\7{\2\2\u0084\u0085\7r\2\2\u0085") - buf.write("\u0086\7t\2\2\u0086\u0087\7k\2\2\u0087\u0088\7p\2\2\u0088") - buf.write("\u0089\7e\2\2\u0089\u008a\7k\2\2\u008a\u008b\7r\2\2\u008b") - buf.write("\u008c\7c\2\2\u008c\u008e\7n\2\2\u008dj\3\2\2\2\u008d") - buf.write("k\3\2\2\2\u008do\3\2\2\2\u008ds\3\2\2\2\u008dw\3\2\2\2") - buf.write("\u008d\177\3\2\2\2\u008d\u0084\3\2\2\2\u008e\20\3\2\2") - buf.write("\2\u008f\u0090\7p\2\2\u0090\u0091\7c\2\2\u0091\u00ca\7") - buf.write("v\2\2\u0092\u0093\7p\2\2\u0093\u0094\7c\2\2\u0094\u0095") - buf.write("\7v\2\2\u0095\u00ca\7:\2\2\u0096\u0097\7p\2\2\u0097\u0098") - buf.write("\7c\2\2\u0098\u0099\7v\2\2\u0099\u009a\7\63\2\2\u009a") - buf.write("\u00ca\78\2\2\u009b\u009c\7p\2\2\u009c\u009d\7c\2\2\u009d") - buf.write("\u009e\7v\2\2\u009e\u009f\7\65\2\2\u009f\u00ca\7\64\2") - buf.write("\2\u00a0\u00a1\7p\2\2\u00a1\u00a2\7c\2\2\u00a2\u00a3\7") - buf.write("v\2\2\u00a3\u00a4\78\2\2\u00a4\u00ca\7\66\2\2\u00a5\u00a6") - buf.write("\7k\2\2\u00a6\u00a7\7p\2\2\u00a7\u00ca\7v\2\2\u00a8\u00a9") - buf.write("\7k\2\2\u00a9\u00aa\7p\2\2\u00aa\u00ab\7v\2\2\u00ab\u00ca") - buf.write("\7:\2\2\u00ac\u00ad\7k\2\2\u00ad\u00ae\7p\2\2\u00ae\u00af") - buf.write("\7v\2\2\u00af\u00b0\7\63\2\2\u00b0\u00ca\78\2\2\u00b1") - buf.write("\u00b2\7k\2\2\u00b2\u00b3\7p\2\2\u00b3\u00b4\7v\2\2\u00b4") - buf.write("\u00b5\7\65\2\2\u00b5\u00ca\7\64\2\2\u00b6\u00b7\7k\2") - buf.write("\2\u00b7\u00b8\7p\2\2\u00b8\u00b9\7v\2\2\u00b9\u00ba\7") - buf.write("8\2\2\u00ba\u00ca\7\66\2\2\u00bb\u00bc\7h\2\2\u00bc\u00bd") - buf.write("\7n\2\2\u00bd\u00be\7q\2\2\u00be\u00bf\7c\2\2\u00bf\u00c0") - buf.write("\7v\2\2\u00c0\u00c1\7\65\2\2\u00c1\u00ca\7\64\2\2\u00c2") - buf.write("\u00c3\7h\2\2\u00c3\u00c4\7n\2\2\u00c4\u00c5\7q\2\2\u00c5") - buf.write("\u00c6\7c\2\2\u00c6\u00c7\7v\2\2\u00c7\u00c8\78\2\2\u00c8") - buf.write("\u00ca\7\66\2\2\u00c9\u008f\3\2\2\2\u00c9\u0092\3\2\2") - buf.write("\2\u00c9\u0096\3\2\2\2\u00c9\u009b\3\2\2\2\u00c9\u00a0") - buf.write("\3\2\2\2\u00c9\u00a5\3\2\2\2\u00c9\u00a8\3\2\2\2\u00c9") - buf.write("\u00ac\3\2\2\2\u00c9\u00b1\3\2\2\2\u00c9\u00b6\3\2\2\2") - buf.write("\u00c9\u00bb\3\2\2\2\u00c9\u00c2\3\2\2\2\u00ca\22\3\2") - buf.write("\2\2\u00cb\u00cc\7q\2\2\u00cc\u00cd\7r\2\2\u00cd\u00ce") - buf.write("\7v\2\2\u00ce\24\3\2\2\2\u00cf\u00d0\7x\2\2\u00d0\u00d1") - buf.write("\7g\2\2\u00d1\u00d2\7e\2\2\u00d2\26\3\2\2\2\u00d3\u00d4") - buf.write("\7t\2\2\u00d4\u00d5\7g\2\2\u00d5\u00d6\7e\2\2\u00d6\u00d7") - buf.write("\7q\2\2\u00d7\u00d8\7t\2\2\u00d8\u00d9\7f\2\2\u00d9\30") - buf.write("\3\2\2\2\u00da\u00db\7x\2\2\u00db\u00dc\7c\2\2\u00dc\u00dd") - buf.write("\7t\2\2\u00dd\u00de\7k\2\2\u00de\u00df\7c\2\2\u00df\u00e0") - buf.write("\7p\2\2\u00e0\u00e1\7v\2\2\u00e1\32\3\2\2\2\u00e2\u00e3") - buf.write("\7u\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5\7t\2\2\u00e5\u00e6") - buf.write("\7x\2\2\u00e6\u00e7\7k\2\2\u00e7\u00e8\7e\2\2\u00e8\u00e9") - buf.write("\7g\2\2\u00e9\34\3\2\2\2\u00ea\u00eb\7h\2\2\u00eb\u00ec") - buf.write("\7w\2\2\u00ec\u00ed\7p\2\2\u00ed\u00ee\7e\2\2\u00ee\36") - buf.write("\3\2\2\2\u00ef\u00f0\t\4\2\2\u00f0 \3\2\2\2\u00f1\u00f2") - buf.write("\t\5\2\2\u00f2\"\3\2\2\2\u00f3\u00f7\5%\23\2\u00f4\u00f7") - buf.write("\7a\2\2\u00f5\u00f7\5!\21\2\u00f6\u00f3\3\2\2\2\u00f6") - buf.write("\u00f4\3\2\2\2\u00f6\u00f5\3\2\2\2\u00f7$\3\2\2\2\u00f8") - buf.write("\u00f9\t\6\2\2\u00f9&\3\2\2\2\u00fa\u00fc\7$\2\2\u00fb") - buf.write("\u00fa\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc\u00fd\3\2\2\2") - buf.write("\u00fd\u0101\5%\23\2\u00fe\u0100\5#\22\2\u00ff\u00fe\3") - buf.write("\2\2\2\u0100\u0103\3\2\2\2\u0101\u00ff\3\2\2\2\u0101\u0102") - buf.write("\3\2\2\2\u0102\u0105\3\2\2\2\u0103\u0101\3\2\2\2\u0104") - buf.write("\u0106\7$\2\2\u0105\u0104\3\2\2\2\u0105\u0106\3\2\2\2") - buf.write("\u0106(\3\2\2\2\u0107\u0108\7*\2\2\u0108*\3\2\2\2\u0109") - buf.write("\u010a\7+\2\2\u010a,\3\2\2\2\u010b\u010c\7}\2\2\u010c") - buf.write(".\3\2\2\2\u010d\u010e\7\177\2\2\u010e\60\3\2\2\2\u010f") - buf.write("\u0110\7/\2\2\u0110\u0111\7@\2\2\u0111\62\3\2\2\2\u0112") - buf.write("\u0113\7<\2\2\u0113\64\3\2\2\2\u0114\u0115\7=\2\2\u0115") - buf.write("\66\3\2\2\2\u0116\u0117\7?\2\2\u01178\3\2\2\2\u0118\u0119") - buf.write("\7.\2\2\u0119:\3\2\2\2\13\2AO\u008d\u00c9\u00f6\u00fb") - buf.write("\u0101\u0105\3\b\2\2") + buf.write("\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u00a0\n\t\3\n\3\n\3\n") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") + buf.write("\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3") + buf.write("\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n") + buf.write("\3\n\5\n\u00dc\n\n\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f") + buf.write("\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16") + buf.write("\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17") + buf.write("\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23") + buf.write("\3\23\5\23\u0109\n\23\3\24\3\24\3\25\5\25\u010e\n\25\3") + buf.write("\25\3\25\7\25\u0112\n\25\f\25\16\25\u0115\13\25\3\25\5") + buf.write("\25\u0118\n\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31") + buf.write("\3\32\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36") + buf.write("\3C\2\37\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f") + buf.write("\27\r\31\16\33\17\35\20\37\21!\2#\2%\2\'\2)\22+\23-\24") + buf.write("/\25\61\26\63\27\65\30\67\319\32;\33\3\2\7\4\2\f\f\17") + buf.write("\17\5\2\13\f\17\17\"\"\4\2C\\c|\3\2\62;\5\2C\\aac|\2\u013f") + buf.write("\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13") + buf.write("\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3") + buf.write("\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2") + buf.write("\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2") + buf.write("-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3") + buf.write("\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\3=\3\2\2\2\5") + buf.write("K\3\2\2\2\7V\3\2\2\2\tZ\3\2\2\2\13_\3\2\2\2\re\3\2\2\2") + buf.write("\17u\3\2\2\2\21\u009f\3\2\2\2\23\u00db\3\2\2\2\25\u00dd") + buf.write("\3\2\2\2\27\u00e1\3\2\2\2\31\u00e5\3\2\2\2\33\u00ec\3") + buf.write("\2\2\2\35\u00f4\3\2\2\2\37\u00fc\3\2\2\2!\u0101\3\2\2") + buf.write("\2#\u0103\3\2\2\2%\u0108\3\2\2\2\'\u010a\3\2\2\2)\u010d") + buf.write("\3\2\2\2+\u0119\3\2\2\2-\u011b\3\2\2\2/\u011d\3\2\2\2") + buf.write("\61\u011f\3\2\2\2\63\u0121\3\2\2\2\65\u0124\3\2\2\2\67") + buf.write("\u0126\3\2\2\29\u0128\3\2\2\2;\u012a\3\2\2\2=>\7\61\2") + buf.write("\2>?\7,\2\2?C\3\2\2\2@B\13\2\2\2A@\3\2\2\2BE\3\2\2\2C") + buf.write("D\3\2\2\2CA\3\2\2\2DF\3\2\2\2EC\3\2\2\2FG\7,\2\2GH\7\61") + buf.write("\2\2HI\3\2\2\2IJ\b\2\2\2J\4\3\2\2\2KL\7\61\2\2LM\7\61") + buf.write("\2\2MQ\3\2\2\2NP\n\2\2\2ON\3\2\2\2PS\3\2\2\2QO\3\2\2\2") + buf.write("QR\3\2\2\2RT\3\2\2\2SQ\3\2\2\2TU\b\3\2\2U\6\3\2\2\2VW") + buf.write("\t\3\2\2WX\3\2\2\2XY\b\4\2\2Y\b\3\2\2\2Z[\7v\2\2[\\\7") + buf.write("{\2\2\\]\7r\2\2]^\7g\2\2^\n\3\2\2\2_`\7s\2\2`a\7w\2\2") + buf.write("ab\7g\2\2bc\7t\2\2cd\7{\2\2d\f\3\2\2\2ef\7e\2\2fg\7q\2") + buf.write("\2gh\7o\2\2hi\7r\2\2ij\7q\2\2jk\7u\2\2kl\7k\2\2lm\7v\2") + buf.write("\2mn\7g\2\2no\7a\2\2op\7s\2\2pq\7w\2\2qr\7g\2\2rs\7t\2") + buf.write("\2st\7{\2\2t\16\3\2\2\2uv\7q\2\2vw\7p\2\2wx\7g\2\2xy\7") + buf.write("y\2\2yz\7c\2\2z{\7{\2\2{\20\3\2\2\2|\u00a0\5\23\n\2}~") + buf.write("\7d\2\2~\177\7q\2\2\177\u0080\7q\2\2\u0080\u00a0\7n\2") + buf.write("\2\u0081\u0082\7v\2\2\u0082\u0083\7g\2\2\u0083\u0084\7") + buf.write("z\2\2\u0084\u00a0\7v\2\2\u0085\u0086\7p\2\2\u0086\u0087") + buf.write("\7w\2\2\u0087\u0088\7n\2\2\u0088\u00a0\7n\2\2\u0089\u008a") + buf.write("\7t\2\2\u008a\u008b\7g\2\2\u008b\u008c\7u\2\2\u008c\u008d") + buf.write("\7g\2\2\u008d\u008e\7t\2\2\u008e\u008f\7x\2\2\u008f\u0090") + buf.write("\7g\2\2\u0090\u00a0\7f\2\2\u0091\u0092\7g\2\2\u0092\u0093") + buf.write("\7o\2\2\u0093\u0094\7r\2\2\u0094\u0095\7v\2\2\u0095\u00a0") + buf.write("\7{\2\2\u0096\u0097\7r\2\2\u0097\u0098\7t\2\2\u0098\u0099") + buf.write("\7k\2\2\u0099\u009a\7p\2\2\u009a\u009b\7e\2\2\u009b\u009c") + buf.write("\7k\2\2\u009c\u009d\7r\2\2\u009d\u009e\7c\2\2\u009e\u00a0") + buf.write("\7n\2\2\u009f|\3\2\2\2\u009f}\3\2\2\2\u009f\u0081\3\2") + buf.write("\2\2\u009f\u0085\3\2\2\2\u009f\u0089\3\2\2\2\u009f\u0091") + buf.write("\3\2\2\2\u009f\u0096\3\2\2\2\u00a0\22\3\2\2\2\u00a1\u00a2") + buf.write("\7p\2\2\u00a2\u00a3\7c\2\2\u00a3\u00dc\7v\2\2\u00a4\u00a5") + buf.write("\7p\2\2\u00a5\u00a6\7c\2\2\u00a6\u00a7\7v\2\2\u00a7\u00dc") + buf.write("\7:\2\2\u00a8\u00a9\7p\2\2\u00a9\u00aa\7c\2\2\u00aa\u00ab") + buf.write("\7v\2\2\u00ab\u00ac\7\63\2\2\u00ac\u00dc\78\2\2\u00ad") + buf.write("\u00ae\7p\2\2\u00ae\u00af\7c\2\2\u00af\u00b0\7v\2\2\u00b0") + buf.write("\u00b1\7\65\2\2\u00b1\u00dc\7\64\2\2\u00b2\u00b3\7p\2") + buf.write("\2\u00b3\u00b4\7c\2\2\u00b4\u00b5\7v\2\2\u00b5\u00b6\7") + buf.write("8\2\2\u00b6\u00dc\7\66\2\2\u00b7\u00b8\7k\2\2\u00b8\u00b9") + buf.write("\7p\2\2\u00b9\u00dc\7v\2\2\u00ba\u00bb\7k\2\2\u00bb\u00bc") + buf.write("\7p\2\2\u00bc\u00bd\7v\2\2\u00bd\u00dc\7:\2\2\u00be\u00bf") + buf.write("\7k\2\2\u00bf\u00c0\7p\2\2\u00c0\u00c1\7v\2\2\u00c1\u00c2") + buf.write("\7\63\2\2\u00c2\u00dc\78\2\2\u00c3\u00c4\7k\2\2\u00c4") + buf.write("\u00c5\7p\2\2\u00c5\u00c6\7v\2\2\u00c6\u00c7\7\65\2\2") + buf.write("\u00c7\u00dc\7\64\2\2\u00c8\u00c9\7k\2\2\u00c9\u00ca\7") + buf.write("p\2\2\u00ca\u00cb\7v\2\2\u00cb\u00cc\78\2\2\u00cc\u00dc") + buf.write("\7\66\2\2\u00cd\u00ce\7h\2\2\u00ce\u00cf\7n\2\2\u00cf") + buf.write("\u00d0\7q\2\2\u00d0\u00d1\7c\2\2\u00d1\u00d2\7v\2\2\u00d2") + buf.write("\u00d3\7\65\2\2\u00d3\u00dc\7\64\2\2\u00d4\u00d5\7h\2") + buf.write("\2\u00d5\u00d6\7n\2\2\u00d6\u00d7\7q\2\2\u00d7\u00d8\7") + buf.write("c\2\2\u00d8\u00d9\7v\2\2\u00d9\u00da\78\2\2\u00da\u00dc") + buf.write("\7\66\2\2\u00db\u00a1\3\2\2\2\u00db\u00a4\3\2\2\2\u00db") + buf.write("\u00a8\3\2\2\2\u00db\u00ad\3\2\2\2\u00db\u00b2\3\2\2\2") + buf.write("\u00db\u00b7\3\2\2\2\u00db\u00ba\3\2\2\2\u00db\u00be\3") + buf.write("\2\2\2\u00db\u00c3\3\2\2\2\u00db\u00c8\3\2\2\2\u00db\u00cd") + buf.write("\3\2\2\2\u00db\u00d4\3\2\2\2\u00dc\24\3\2\2\2\u00dd\u00de") + buf.write("\7q\2\2\u00de\u00df\7r\2\2\u00df\u00e0\7v\2\2\u00e0\26") + buf.write("\3\2\2\2\u00e1\u00e2\7x\2\2\u00e2\u00e3\7g\2\2\u00e3\u00e4") + buf.write("\7e\2\2\u00e4\30\3\2\2\2\u00e5\u00e6\7t\2\2\u00e6\u00e7") + buf.write("\7g\2\2\u00e7\u00e8\7e\2\2\u00e8\u00e9\7q\2\2\u00e9\u00ea") + buf.write("\7t\2\2\u00ea\u00eb\7f\2\2\u00eb\32\3\2\2\2\u00ec\u00ed") + buf.write("\7x\2\2\u00ed\u00ee\7c\2\2\u00ee\u00ef\7t\2\2\u00ef\u00f0") + buf.write("\7k\2\2\u00f0\u00f1\7c\2\2\u00f1\u00f2\7p\2\2\u00f2\u00f3") + buf.write("\7v\2\2\u00f3\34\3\2\2\2\u00f4\u00f5\7u\2\2\u00f5\u00f6") + buf.write("\7g\2\2\u00f6\u00f7\7t\2\2\u00f7\u00f8\7x\2\2\u00f8\u00f9") + buf.write("\7k\2\2\u00f9\u00fa\7e\2\2\u00fa\u00fb\7g\2\2\u00fb\36") + buf.write("\3\2\2\2\u00fc\u00fd\7h\2\2\u00fd\u00fe\7w\2\2\u00fe\u00ff") + buf.write("\7p\2\2\u00ff\u0100\7e\2\2\u0100 \3\2\2\2\u0101\u0102") + buf.write("\t\4\2\2\u0102\"\3\2\2\2\u0103\u0104\t\5\2\2\u0104$\3") + buf.write("\2\2\2\u0105\u0109\5\'\24\2\u0106\u0109\7a\2\2\u0107\u0109") + buf.write("\5#\22\2\u0108\u0105\3\2\2\2\u0108\u0106\3\2\2\2\u0108") + buf.write("\u0107\3\2\2\2\u0109&\3\2\2\2\u010a\u010b\t\6\2\2\u010b") + buf.write("(\3\2\2\2\u010c\u010e\7$\2\2\u010d\u010c\3\2\2\2\u010d") + buf.write("\u010e\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0113\5\'\24") + buf.write("\2\u0110\u0112\5%\23\2\u0111\u0110\3\2\2\2\u0112\u0115") + buf.write("\3\2\2\2\u0113\u0111\3\2\2\2\u0113\u0114\3\2\2\2\u0114") + buf.write("\u0117\3\2\2\2\u0115\u0113\3\2\2\2\u0116\u0118\7$\2\2") + buf.write("\u0117\u0116\3\2\2\2\u0117\u0118\3\2\2\2\u0118*\3\2\2") + buf.write("\2\u0119\u011a\7*\2\2\u011a,\3\2\2\2\u011b\u011c\7+\2") + buf.write("\2\u011c.\3\2\2\2\u011d\u011e\7}\2\2\u011e\60\3\2\2\2") + buf.write("\u011f\u0120\7\177\2\2\u0120\62\3\2\2\2\u0121\u0122\7") + buf.write("/\2\2\u0122\u0123\7@\2\2\u0123\64\3\2\2\2\u0124\u0125") + buf.write("\7<\2\2\u0125\66\3\2\2\2\u0126\u0127\7=\2\2\u01278\3\2") + buf.write("\2\2\u0128\u0129\7?\2\2\u0129:\3\2\2\2\u012a\u012b\7.") + buf.write("\2\2\u012b<\3\2\2\2\13\2CQ\u009f\u00db\u0108\u010d\u0113") + buf.write("\u0117\3\b\2\2") return buf.getvalue() @@ -142,46 +150,47 @@ class DIDLexer(Lexer): S = 3 Type = 4 Query = 5 - Oneway = 6 - PrimType = 7 - NumType = 8 - OPT = 9 - VEC = 10 - RECORD = 11 - VARIANT = 12 - Service = 13 - FUNC = 14 - Name = 15 - LeftP = 16 - RightP = 17 - LeftB = 18 - RightB = 19 - Arrow = 20 - Colon = 21 - Semicolon = 22 - Eq = 23 - Comma = 24 + CompositeQuery = 6 + Oneway = 7 + PrimType = 8 + NumType = 9 + OPT = 10 + VEC = 11 + RECORD = 12 + VARIANT = 13 + Service = 14 + FUNC = 15 + Name = 16 + LeftP = 17 + RightP = 18 + LeftB = 19 + RightB = 20 + Arrow = 21 + Colon = 22 + Semicolon = 23 + Eq = 24 + Comma = 25 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] modeNames = [ "DEFAULT_MODE" ] literalNames = [ "", - "'type'", "'query'", "'oneway'", "'opt'", "'vec'", "'record'", - "'variant'", "'service'", "'func'", "'('", "')'", "'{'", "'}'", - "'->'", "':'", "';'", "'='", "','" ] + "'type'", "'query'", "'composite_query'", "'oneway'", "'opt'", + "'vec'", "'record'", "'variant'", "'service'", "'func'", "'('", + "')'", "'{'", "'}'", "'->'", "':'", "';'", "'='", "','" ] symbolicNames = [ "", - "BlockComment", "LineComment", "S", "Type", "Query", "Oneway", - "PrimType", "NumType", "OPT", "VEC", "RECORD", "VARIANT", "Service", - "FUNC", "Name", "LeftP", "RightP", "LeftB", "RightB", "Arrow", - "Colon", "Semicolon", "Eq", "Comma" ] - - ruleNames = [ "BlockComment", "LineComment", "S", "Type", "Query", "Oneway", - "PrimType", "NumType", "OPT", "VEC", "RECORD", "VARIANT", - "Service", "FUNC", "Letter", "DIGIT", "NameChar", "NameStartChar", - "Name", "LeftP", "RightP", "LeftB", "RightB", "Arrow", - "Colon", "Semicolon", "Eq", "Comma" ] + "BlockComment", "LineComment", "S", "Type", "Query", "CompositeQuery", + "Oneway", "PrimType", "NumType", "OPT", "VEC", "RECORD", "VARIANT", + "Service", "FUNC", "Name", "LeftP", "RightP", "LeftB", "RightB", + "Arrow", "Colon", "Semicolon", "Eq", "Comma" ] + + ruleNames = [ "BlockComment", "LineComment", "S", "Type", "Query", "CompositeQuery", + "Oneway", "PrimType", "NumType", "OPT", "VEC", "RECORD", + "VARIANT", "Service", "FUNC", "Letter", "DIGIT", "NameChar", + "NameStartChar", "Name", "LeftP", "RightP", "LeftB", "RightB", + "Arrow", "Colon", "Semicolon", "Eq", "Comma" ] grammarFileName = "DIDLexer.g4" diff --git a/ic/parser/DIDParser.py b/ic/parser/DIDParser.py index 38cf068..ea47c51 100644 --- a/ic/parser/DIDParser.py +++ b/ic/parser/DIDParser.py @@ -11,8 +11,8 @@ def serializedATN(): with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\32") - buf.write("\u00b4\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") + buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\33") + buf.write("\u00b5\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7") buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16") buf.write("\t\16\4\17\t\17\4\20\t\20\3\2\7\2\"\n\2\f\2\16\2%\13\2") buf.write("\3\2\5\2(\n\2\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\5\4\62\n") @@ -26,59 +26,61 @@ def serializedATN(): buf.write("\3\13\3\13\3\13\5\13\u008c\n\13\3\f\3\f\3\f\3\f\5\f\u0092") buf.write("\n\f\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u009a\n\r\3\16\3\16\3") buf.write("\16\7\16\u009f\n\16\f\16\16\16\u00a2\13\16\3\16\5\16\u00a5") - buf.write("\n\16\3\16\3\16\3\16\5\16\u00aa\n\16\3\17\3\17\5\17\u00ae") - buf.write("\n\17\3\20\3\20\3\20\3\20\3\20\2\2\21\2\4\6\b\n\f\16\20") - buf.write("\22\24\26\30\32\34\36\2\2\2\u00bf\2#\3\2\2\2\4)\3\2\2") - buf.write("\2\6/\3\2\2\2\b=\3\2\2\2\nK\3\2\2\2\fO\3\2\2\2\16y\3\2") - buf.write("\2\2\20\177\3\2\2\2\22\u0085\3\2\2\2\24\u008b\3\2\2\2") - buf.write("\26\u008d\3\2\2\2\30\u0099\3\2\2\2\32\u00a9\3\2\2\2\34") - buf.write("\u00ad\3\2\2\2\36\u00af\3\2\2\2 \"\5\4\3\2! \3\2\2\2\"") - buf.write("%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$\'\3\2\2\2%#\3\2\2\2&(\5") - buf.write("\6\4\2\'&\3\2\2\2\'(\3\2\2\2(\3\3\2\2\2)*\7\6\2\2*+\7") - buf.write("\21\2\2+,\7\31\2\2,-\5\n\6\2-.\7\30\2\2.\5\3\2\2\2/\61") - buf.write("\7\17\2\2\60\62\7\21\2\2\61\60\3\2\2\2\61\62\3\2\2\2\62") - buf.write("\63\3\2\2\2\63\67\7\27\2\2\64\65\5\30\r\2\65\66\7\26\2") - buf.write("\2\668\3\2\2\2\67\64\3\2\2\2\678\3\2\2\28;\3\2\2\29<\5") - buf.write("\b\5\2:<\7\21\2\2;9\3\2\2\2;:\3\2\2\2<\7\3\2\2\2=C\7\24") - buf.write("\2\2>?\5\36\20\2?@\7\30\2\2@B\3\2\2\2A>\3\2\2\2BE\3\2") - buf.write("\2\2CA\3\2\2\2CD\3\2\2\2DF\3\2\2\2EC\3\2\2\2FG\7\25\2") - buf.write("\2G\t\3\2\2\2HL\7\21\2\2IL\7\t\2\2JL\5\f\7\2KH\3\2\2\2") - buf.write("KI\3\2\2\2KJ\3\2\2\2L\13\3\2\2\2MP\5\16\b\2NP\5\24\13") - buf.write("\2OM\3\2\2\2ON\3\2\2\2P\r\3\2\2\2QR\7\13\2\2Rz\5\n\6\2") - buf.write("ST\7\f\2\2Tz\5\n\6\2UV\7\r\2\2VW\7\24\2\2Wz\7\25\2\2X") - buf.write("Y\7\r\2\2YZ\7\24\2\2Z_\5\20\t\2[\\\7\30\2\2\\^\5\20\t") - buf.write("\2][\3\2\2\2^a\3\2\2\2_]\3\2\2\2_`\3\2\2\2`c\3\2\2\2a") - buf.write("_\3\2\2\2bd\7\30\2\2cb\3\2\2\2cd\3\2\2\2de\3\2\2\2ef\7") - buf.write("\25\2\2fz\3\2\2\2gh\7\16\2\2hi\7\24\2\2iz\7\25\2\2jk\7") - buf.write("\16\2\2kl\7\24\2\2lq\5\22\n\2mn\7\30\2\2np\5\22\n\2om") - buf.write("\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3\2\2\2ru\3\2\2\2sq\3\2") - buf.write("\2\2tv\7\30\2\2ut\3\2\2\2uv\3\2\2\2vw\3\2\2\2wx\7\25\2") - buf.write("\2xz\3\2\2\2yQ\3\2\2\2yS\3\2\2\2yU\3\2\2\2yX\3\2\2\2y") - buf.write("g\3\2\2\2yj\3\2\2\2z\17\3\2\2\2{|\7\21\2\2|}\7\27\2\2") - buf.write("}\u0080\5\n\6\2~\u0080\5\n\6\2\177{\3\2\2\2\177~\3\2\2") - buf.write("\2\u0080\21\3\2\2\2\u0081\u0082\7\21\2\2\u0082\u0083\7") - buf.write("\27\2\2\u0083\u0086\5\n\6\2\u0084\u0086\7\21\2\2\u0085") - buf.write("\u0081\3\2\2\2\u0085\u0084\3\2\2\2\u0086\23\3\2\2\2\u0087") - buf.write("\u0088\7\20\2\2\u0088\u008c\5\26\f\2\u0089\u008a\7\17") - buf.write("\2\2\u008a\u008c\5\b\5\2\u008b\u0087\3\2\2\2\u008b\u0089") - buf.write("\3\2\2\2\u008c\25\3\2\2\2\u008d\u008e\5\30\r\2\u008e\u008f") - buf.write("\7\26\2\2\u008f\u0091\5\30\r\2\u0090\u0092\5\34\17\2\u0091") - buf.write("\u0090\3\2\2\2\u0091\u0092\3\2\2\2\u0092\27\3\2\2\2\u0093") - buf.write("\u0094\7\22\2\2\u0094\u009a\7\23\2\2\u0095\u0096\7\22") - buf.write("\2\2\u0096\u0097\5\32\16\2\u0097\u0098\7\23\2\2\u0098") - buf.write("\u009a\3\2\2\2\u0099\u0093\3\2\2\2\u0099\u0095\3\2\2\2") - buf.write("\u009a\31\3\2\2\2\u009b\u00a0\5\n\6\2\u009c\u009d\7\32") - buf.write("\2\2\u009d\u009f\5\n\6\2\u009e\u009c\3\2\2\2\u009f\u00a2") - buf.write("\3\2\2\2\u00a0\u009e\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1") - buf.write("\u00a4\3\2\2\2\u00a2\u00a0\3\2\2\2\u00a3\u00a5\7\32\2") - buf.write("\2\u00a4\u00a3\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00aa") - buf.write("\3\2\2\2\u00a6\u00a7\7\21\2\2\u00a7\u00a8\7\27\2\2\u00a8") - buf.write("\u00aa\5\n\6\2\u00a9\u009b\3\2\2\2\u00a9\u00a6\3\2\2\2") - buf.write("\u00aa\33\3\2\2\2\u00ab\u00ae\7\7\2\2\u00ac\u00ae\7\b") - buf.write("\2\2\u00ad\u00ab\3\2\2\2\u00ad\u00ac\3\2\2\2\u00ae\35") - buf.write("\3\2\2\2\u00af\u00b0\7\21\2\2\u00b0\u00b1\7\27\2\2\u00b1") - buf.write("\u00b2\5\26\f\2\u00b2\37\3\2\2\2\30#\'\61\67;CKO_cquy") - buf.write("\177\u0085\u008b\u0091\u0099\u00a0\u00a4\u00a9\u00ad") + buf.write("\n\16\3\16\3\16\3\16\5\16\u00aa\n\16\3\17\3\17\3\17\5") + buf.write("\17\u00af\n\17\3\20\3\20\3\20\3\20\3\20\2\2\21\2\4\6\b") + buf.write("\n\f\16\20\22\24\26\30\32\34\36\2\2\2\u00c1\2#\3\2\2\2") + buf.write("\4)\3\2\2\2\6/\3\2\2\2\b=\3\2\2\2\nK\3\2\2\2\fO\3\2\2") + buf.write("\2\16y\3\2\2\2\20\177\3\2\2\2\22\u0085\3\2\2\2\24\u008b") + buf.write("\3\2\2\2\26\u008d\3\2\2\2\30\u0099\3\2\2\2\32\u00a9\3") + buf.write("\2\2\2\34\u00ae\3\2\2\2\36\u00b0\3\2\2\2 \"\5\4\3\2! ") + buf.write("\3\2\2\2\"%\3\2\2\2#!\3\2\2\2#$\3\2\2\2$\'\3\2\2\2%#\3") + buf.write("\2\2\2&(\5\6\4\2\'&\3\2\2\2\'(\3\2\2\2(\3\3\2\2\2)*\7") + buf.write("\6\2\2*+\7\22\2\2+,\7\32\2\2,-\5\n\6\2-.\7\31\2\2.\5\3") + buf.write("\2\2\2/\61\7\20\2\2\60\62\7\22\2\2\61\60\3\2\2\2\61\62") + buf.write("\3\2\2\2\62\63\3\2\2\2\63\67\7\30\2\2\64\65\5\30\r\2\65") + buf.write("\66\7\27\2\2\668\3\2\2\2\67\64\3\2\2\2\678\3\2\2\28;\3") + buf.write("\2\2\29<\5\b\5\2:<\7\22\2\2;9\3\2\2\2;:\3\2\2\2<\7\3\2") + buf.write("\2\2=C\7\25\2\2>?\5\36\20\2?@\7\31\2\2@B\3\2\2\2A>\3\2") + buf.write("\2\2BE\3\2\2\2CA\3\2\2\2CD\3\2\2\2DF\3\2\2\2EC\3\2\2\2") + buf.write("FG\7\26\2\2G\t\3\2\2\2HL\7\22\2\2IL\7\n\2\2JL\5\f\7\2") + buf.write("KH\3\2\2\2KI\3\2\2\2KJ\3\2\2\2L\13\3\2\2\2MP\5\16\b\2") + buf.write("NP\5\24\13\2OM\3\2\2\2ON\3\2\2\2P\r\3\2\2\2QR\7\f\2\2") + buf.write("Rz\5\n\6\2ST\7\r\2\2Tz\5\n\6\2UV\7\16\2\2VW\7\25\2\2W") + buf.write("z\7\26\2\2XY\7\16\2\2YZ\7\25\2\2Z_\5\20\t\2[\\\7\31\2") + buf.write("\2\\^\5\20\t\2][\3\2\2\2^a\3\2\2\2_]\3\2\2\2_`\3\2\2\2") + buf.write("`c\3\2\2\2a_\3\2\2\2bd\7\31\2\2cb\3\2\2\2cd\3\2\2\2de") + buf.write("\3\2\2\2ef\7\26\2\2fz\3\2\2\2gh\7\17\2\2hi\7\25\2\2iz") + buf.write("\7\26\2\2jk\7\17\2\2kl\7\25\2\2lq\5\22\n\2mn\7\31\2\2") + buf.write("np\5\22\n\2om\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3\2\2\2ru") + buf.write("\3\2\2\2sq\3\2\2\2tv\7\31\2\2ut\3\2\2\2uv\3\2\2\2vw\3") + buf.write("\2\2\2wx\7\26\2\2xz\3\2\2\2yQ\3\2\2\2yS\3\2\2\2yU\3\2") + buf.write("\2\2yX\3\2\2\2yg\3\2\2\2yj\3\2\2\2z\17\3\2\2\2{|\7\22") + buf.write("\2\2|}\7\30\2\2}\u0080\5\n\6\2~\u0080\5\n\6\2\177{\3\2") + buf.write("\2\2\177~\3\2\2\2\u0080\21\3\2\2\2\u0081\u0082\7\22\2") + buf.write("\2\u0082\u0083\7\30\2\2\u0083\u0086\5\n\6\2\u0084\u0086") + buf.write("\7\22\2\2\u0085\u0081\3\2\2\2\u0085\u0084\3\2\2\2\u0086") + buf.write("\23\3\2\2\2\u0087\u0088\7\21\2\2\u0088\u008c\5\26\f\2") + buf.write("\u0089\u008a\7\20\2\2\u008a\u008c\5\b\5\2\u008b\u0087") + buf.write("\3\2\2\2\u008b\u0089\3\2\2\2\u008c\25\3\2\2\2\u008d\u008e") + buf.write("\5\30\r\2\u008e\u008f\7\27\2\2\u008f\u0091\5\30\r\2\u0090") + buf.write("\u0092\5\34\17\2\u0091\u0090\3\2\2\2\u0091\u0092\3\2\2") + buf.write("\2\u0092\27\3\2\2\2\u0093\u0094\7\23\2\2\u0094\u009a\7") + buf.write("\24\2\2\u0095\u0096\7\23\2\2\u0096\u0097\5\32\16\2\u0097") + buf.write("\u0098\7\24\2\2\u0098\u009a\3\2\2\2\u0099\u0093\3\2\2") + buf.write("\2\u0099\u0095\3\2\2\2\u009a\31\3\2\2\2\u009b\u00a0\5") + buf.write("\n\6\2\u009c\u009d\7\33\2\2\u009d\u009f\5\n\6\2\u009e") + buf.write("\u009c\3\2\2\2\u009f\u00a2\3\2\2\2\u00a0\u009e\3\2\2\2") + buf.write("\u00a0\u00a1\3\2\2\2\u00a1\u00a4\3\2\2\2\u00a2\u00a0\3") + buf.write("\2\2\2\u00a3\u00a5\7\33\2\2\u00a4\u00a3\3\2\2\2\u00a4") + buf.write("\u00a5\3\2\2\2\u00a5\u00aa\3\2\2\2\u00a6\u00a7\7\22\2") + buf.write("\2\u00a7\u00a8\7\30\2\2\u00a8\u00aa\5\n\6\2\u00a9\u009b") + buf.write("\3\2\2\2\u00a9\u00a6\3\2\2\2\u00aa\33\3\2\2\2\u00ab\u00af") + buf.write("\7\7\2\2\u00ac\u00af\7\b\2\2\u00ad\u00af\7\t\2\2\u00ae") + buf.write("\u00ab\3\2\2\2\u00ae\u00ac\3\2\2\2\u00ae\u00ad\3\2\2\2") + buf.write("\u00af\35\3\2\2\2\u00b0\u00b1\7\22\2\2\u00b1\u00b2\7\30") + buf.write("\2\2\u00b2\u00b3\5\26\f\2\u00b3\37\3\2\2\2\30#\'\61\67") + buf.write(";CKO_cquy\177\u0085\u008b\u0091\u0099\u00a0\u00a4\u00a9") + buf.write("\u00ae") return buf.getvalue() @@ -93,16 +95,16 @@ class DIDParser ( Parser ): sharedContextCache = PredictionContextCache() literalNames = [ "", "", "", "", - "'type'", "'query'", "'oneway'", "", "", - "'opt'", "'vec'", "'record'", "'variant'", "'service'", - "'func'", "", "'('", "')'", "'{'", "'}'", - "'->'", "':'", "';'", "'='", "','" ] + "'type'", "'query'", "'composite_query'", "'oneway'", + "", "", "'opt'", "'vec'", "'record'", + "'variant'", "'service'", "'func'", "", "'('", + "')'", "'{'", "'}'", "'->'", "':'", "';'", "'='", "','" ] symbolicNames = [ "", "BlockComment", "LineComment", "S", "Type", - "Query", "Oneway", "PrimType", "NumType", "OPT", "VEC", - "RECORD", "VARIANT", "Service", "FUNC", "Name", "LeftP", - "RightP", "LeftB", "RightB", "Arrow", "Colon", "Semicolon", - "Eq", "Comma" ] + "Query", "CompositeQuery", "Oneway", "PrimType", "NumType", + "OPT", "VEC", "RECORD", "VARIANT", "Service", "FUNC", + "Name", "LeftP", "RightP", "LeftB", "RightB", "Arrow", + "Colon", "Semicolon", "Eq", "Comma" ] RULE_program = 0 RULE_defination = 1 @@ -131,25 +133,26 @@ class DIDParser ( Parser ): S=3 Type=4 Query=5 - Oneway=6 - PrimType=7 - NumType=8 - OPT=9 - VEC=10 - RECORD=11 - VARIANT=12 - Service=13 - FUNC=14 - Name=15 - LeftP=16 - RightP=17 - LeftB=18 - RightB=19 - Arrow=20 - Colon=21 - Semicolon=22 - Eq=23 - Comma=24 + CompositeQuery=6 + Oneway=7 + PrimType=8 + NumType=9 + OPT=10 + VEC=11 + RECORD=12 + VARIANT=13 + Service=14 + FUNC=15 + Name=16 + LeftP=17 + RightP=18 + LeftB=19 + RightB=20 + Arrow=21 + Colon=22 + Semicolon=23 + Eq=24 + Comma=25 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -1234,7 +1237,7 @@ def functype(self): self.state = 143 self._errHandler.sync(self) _la = self._input.LA(1) - if _la==DIDParser.Query or _la==DIDParser.Oneway: + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << DIDParser.Query) | (1 << DIDParser.CompositeQuery) | (1 << DIDParser.Oneway))) != 0): self.state = 142 self.funcann() @@ -1496,13 +1499,31 @@ def exitRule(self, listener:ParseTreeListener): listener.exitOneway(self) + class CompositeQueryContext(FuncannContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a DIDParser.FuncannContext + super().__init__(parser) + self.copyFrom(ctx) + + def CompositeQuery(self): + return self.getToken(DIDParser.CompositeQuery, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCompositeQuery" ): + listener.enterCompositeQuery(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCompositeQuery" ): + listener.exitCompositeQuery(self) + + def funcann(self): localctx = DIDParser.FuncannContext(self, self._ctx, self.state) self.enterRule(localctx, 26, self.RULE_funcann) try: - self.state = 171 + self.state = 172 self._errHandler.sync(self) token = self._input.LA(1) if token in [DIDParser.Query]: @@ -1511,10 +1532,16 @@ def funcann(self): self.state = 169 self.match(DIDParser.Query) pass - elif token in [DIDParser.Oneway]: - localctx = DIDParser.OnewayContext(self, localctx) + elif token in [DIDParser.CompositeQuery]: + localctx = DIDParser.CompositeQueryContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 170 + self.match(DIDParser.CompositeQuery) + pass + elif token in [DIDParser.Oneway]: + localctx = DIDParser.OnewayContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 171 self.match(DIDParser.Oneway) pass else: @@ -1566,11 +1593,11 @@ def methodtype(self): self.enterRule(localctx, 28, self.RULE_methodtype) try: self.enterOuterAlt(localctx, 1) - self.state = 173 - self.match(DIDParser.Name) self.state = 174 - self.match(DIDParser.Colon) + self.match(DIDParser.Name) self.state = 175 + self.match(DIDParser.Colon) + self.state = 176 self.functype() except RecognitionException as re: localctx.exception = re diff --git a/ic/parser/DIDParserListener.py b/ic/parser/DIDParserListener.py index 5fb472e..6fb01ee 100644 --- a/ic/parser/DIDParserListener.py +++ b/ic/parser/DIDParserListener.py @@ -224,6 +224,15 @@ def exitQuery(self, ctx:DIDParser.QueryContext): pass + # Enter a parse tree produced by DIDParser#CompositeQuery. + def enterCompositeQuery(self, ctx:DIDParser.CompositeQueryContext): + pass + + # Exit a parse tree produced by DIDParser#CompositeQuery. + def exitCompositeQuery(self, ctx:DIDParser.CompositeQueryContext): + pass + + # Enter a parse tree produced by DIDParser#Oneway. def enterOneway(self, ctx:DIDParser.OnewayContext): pass diff --git a/parser/DIDLexer.g4 b/parser/DIDLexer.g4 index cd24237..c20ba48 100644 --- a/parser/DIDLexer.g4 +++ b/parser/DIDLexer.g4 @@ -10,6 +10,8 @@ Type: 'type'; Query: 'query'; +CompositeQuery: 'composite_query'; + Oneway: 'oneway'; PrimType: diff --git a/parser/DIDParser.g4 b/parser/DIDParser.g4 index 85b3b33..f0a5c22 100644 --- a/parser/DIDParser.g4 +++ b/parser/DIDParser.g4 @@ -47,6 +47,6 @@ argtypes: datatype (Comma datatype)* Comma? | Name Colon datatype; -funcann: Query # Query | Oneway # Oneway; +funcann: Query # Query | CompositeQuery #CompositeQuery | Oneway # Oneway; methodtype: Name Colon functype; \ No newline at end of file