diff --git a/OFL.g4 b/OFL.g4 index 331b3a7..f07774d 100644 --- a/OFL.g4 +++ b/OFL.g4 @@ -54,10 +54,11 @@ hashtagListMatch: HASHTAG ':' '(' string (',' string)* ')'; typeMatch: TYPE ':' OSMTYPE; idMatch: ID ':' NUMBER; -typeIdMatch: ID ':' OSMID; +typeIdMatch: ID ':' osmid; idRangeMatch: ID ':' '(' range_int ')'; idListMatch: ID ':' '(' NUMBER (',' NUMBER)* ')'; -typeIdListMatch: ID ':' '(' OSMID (',' OSMID)* ')'; +typeIdListMatch: ID ':' '(' osmid (',' osmid)* ')'; +osmid: OSMID | SHORT_OSMID; geometryMatch: GEOMETRY ':' GEOMETRY_TYPE; areaRangeMatch: AREA ':' '(' range_dec ')'; @@ -102,7 +103,9 @@ CHANGESET_CREATEDBY: 'changeset.created_by'; HASHTAG: 'hashtag'; OSMTYPE: 'node' | 'way' | 'relation'; +OSMTYPE_SHORT: 'n' | 'w' | 'r'; OSMID: OSMTYPE '/' NUMBER; +SHORT_OSMID: OSMTYPE_SHORT NUMBER; GEOMETRY_TYPE: 'point' | 'line' | 'polygon' | 'other'; NUMBER: NUMERAL+; diff --git a/ohsome_filter_to_sql/OFLLexer.py b/ohsome_filter_to_sql/OFLLexer.py index 320f535..69cb9ee 100644 --- a/ohsome_filter_to_sql/OFLLexer.py +++ b/ohsome_filter_to_sql/OFLLexer.py @@ -10,126 +10,129 @@ def serializedATN(): return [ - 4,0,32,334,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, + 4,0,34,343,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, 2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2, 13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7, 19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2, 26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7, - 32,2,33,7,33,2,34,7,34,2,35,7,35,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3, - 1,3,1,4,1,4,1,5,1,5,1,5,1,6,1,6,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,9, - 1,9,1,9,1,10,1,10,1,10,1,10,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1, - 13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1, - 15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1, - 16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1, + 32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,1,0,1,0,1,1, + 1,1,1,2,1,2,1,3,1,3,1,3,1,4,1,4,1,5,1,5,1,5,1,6,1,6,1,7,1,7,1,7, + 1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,11,1,11,1,12,1, + 12,1,12,1,12,1,12,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1, + 14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1, + 16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1, 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, - 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, - 19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1, - 20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1, - 21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1, - 22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1, - 23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, - 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,249,8,24,1,25,1,25,1, - 25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1, - 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,276,8,26,1, - 27,4,27,279,8,27,11,27,12,27,280,1,28,4,28,284,8,28,11,28,12,28, - 285,1,28,1,28,4,28,290,8,28,11,28,12,28,291,3,28,294,8,28,1,28,1, - 28,4,28,298,8,28,11,28,12,28,299,3,28,302,8,28,1,29,4,29,305,8,29, - 11,29,12,29,306,1,30,1,30,4,30,311,8,30,11,30,12,30,312,1,30,1,30, - 1,31,4,31,318,8,31,11,31,12,31,319,1,31,1,31,1,32,1,32,1,33,1,33, - 1,34,1,34,3,34,330,8,34,1,35,1,35,1,35,0,0,36,1,1,3,2,5,3,7,4,9, - 5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16, - 33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27, - 55,28,57,29,59,30,61,31,63,32,65,0,67,0,69,0,71,0,1,0,6,2,0,69,69, - 101,101,3,0,9,10,13,13,32,32,1,0,48,57,5,0,45,45,48,57,65,90,95, - 95,97,122,4,0,10,10,13,13,34,34,92,92,4,0,34,34,92,92,110,110,114, - 114,344,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0, - 0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0, - 0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0, - 0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0, - 0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0, - 0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0, - 0,0,0,61,1,0,0,0,0,63,1,0,0,0,1,73,1,0,0,0,3,75,1,0,0,0,5,77,1,0, - 0,0,7,79,1,0,0,0,9,82,1,0,0,0,11,84,1,0,0,0,13,87,1,0,0,0,15,89, - 1,0,0,0,17,92,1,0,0,0,19,96,1,0,0,0,21,99,1,0,0,0,23,103,1,0,0,0, - 25,105,1,0,0,0,27,110,1,0,0,0,29,113,1,0,0,0,31,122,1,0,0,0,33,127, - 1,0,0,0,35,137,1,0,0,0,37,144,1,0,0,0,39,162,1,0,0,0,41,178,1,0, - 0,0,43,194,1,0,0,0,45,204,1,0,0,0,47,225,1,0,0,0,49,248,1,0,0,0, - 51,250,1,0,0,0,53,275,1,0,0,0,55,278,1,0,0,0,57,283,1,0,0,0,59,304, - 1,0,0,0,61,308,1,0,0,0,63,317,1,0,0,0,65,323,1,0,0,0,67,325,1,0, - 0,0,69,329,1,0,0,0,71,331,1,0,0,0,73,74,5,40,0,0,74,2,1,0,0,0,75, - 76,5,41,0,0,76,4,1,0,0,0,77,78,5,61,0,0,78,6,1,0,0,0,79,80,5,105, - 0,0,80,81,5,110,0,0,81,8,1,0,0,0,82,83,5,44,0,0,83,10,1,0,0,0,84, - 85,5,33,0,0,85,86,5,61,0,0,86,12,1,0,0,0,87,88,5,58,0,0,88,14,1, - 0,0,0,89,90,5,46,0,0,90,91,5,46,0,0,91,16,1,0,0,0,92,93,5,97,0,0, - 93,94,5,110,0,0,94,95,5,100,0,0,95,18,1,0,0,0,96,97,5,111,0,0,97, - 98,5,114,0,0,98,20,1,0,0,0,99,100,5,110,0,0,100,101,5,111,0,0,101, - 102,5,116,0,0,102,22,1,0,0,0,103,104,5,42,0,0,104,24,1,0,0,0,105, - 106,5,116,0,0,106,107,5,121,0,0,107,108,5,112,0,0,108,109,5,101, - 0,0,109,26,1,0,0,0,110,111,5,105,0,0,111,112,5,100,0,0,112,28,1, - 0,0,0,113,114,5,103,0,0,114,115,5,101,0,0,115,116,5,111,0,0,116, - 117,5,109,0,0,117,118,5,101,0,0,118,119,5,116,0,0,119,120,5,114, - 0,0,120,121,5,121,0,0,121,30,1,0,0,0,122,123,5,97,0,0,123,124,5, - 114,0,0,124,125,5,101,0,0,125,126,5,97,0,0,126,32,1,0,0,0,127,128, - 5,112,0,0,128,129,5,101,0,0,129,130,5,114,0,0,130,131,5,105,0,0, - 131,132,5,109,0,0,132,133,5,101,0,0,133,134,5,116,0,0,134,135,5, - 101,0,0,135,136,5,114,0,0,136,34,1,0,0,0,137,138,5,108,0,0,138,139, - 5,101,0,0,139,140,5,110,0,0,140,141,5,103,0,0,141,142,5,116,0,0, - 142,143,5,104,0,0,143,36,1,0,0,0,144,145,5,103,0,0,145,146,5,101, - 0,0,146,147,5,111,0,0,147,148,5,109,0,0,148,149,5,101,0,0,149,150, - 5,116,0,0,150,151,5,114,0,0,151,152,5,121,0,0,152,153,5,46,0,0,153, - 154,5,118,0,0,154,155,5,101,0,0,155,156,5,114,0,0,156,157,5,116, - 0,0,157,158,5,105,0,0,158,159,5,99,0,0,159,160,5,101,0,0,160,161, - 5,115,0,0,161,38,1,0,0,0,162,163,5,103,0,0,163,164,5,101,0,0,164, - 165,5,111,0,0,165,166,5,109,0,0,166,167,5,101,0,0,167,168,5,116, - 0,0,168,169,5,114,0,0,169,170,5,121,0,0,170,171,5,46,0,0,171,172, - 5,111,0,0,172,173,5,117,0,0,173,174,5,116,0,0,174,175,5,101,0,0, - 175,176,5,114,0,0,176,177,5,115,0,0,177,40,1,0,0,0,178,179,5,103, - 0,0,179,180,5,101,0,0,180,181,5,111,0,0,181,182,5,109,0,0,182,183, - 5,101,0,0,183,184,5,116,0,0,184,185,5,114,0,0,185,186,5,121,0,0, - 186,187,5,46,0,0,187,188,5,105,0,0,188,189,5,110,0,0,189,190,5,110, - 0,0,190,191,5,101,0,0,191,192,5,114,0,0,192,193,5,115,0,0,193,42, - 1,0,0,0,194,195,5,99,0,0,195,196,5,104,0,0,196,197,5,97,0,0,197, - 198,5,110,0,0,198,199,5,103,0,0,199,200,5,101,0,0,200,201,5,115, - 0,0,201,202,5,101,0,0,202,203,5,116,0,0,203,44,1,0,0,0,204,205,5, - 99,0,0,205,206,5,104,0,0,206,207,5,97,0,0,207,208,5,110,0,0,208, - 209,5,103,0,0,209,210,5,101,0,0,210,211,5,115,0,0,211,212,5,101, - 0,0,212,213,5,116,0,0,213,214,5,46,0,0,214,215,5,99,0,0,215,216, - 5,114,0,0,216,217,5,101,0,0,217,218,5,97,0,0,218,219,5,116,0,0,219, - 220,5,101,0,0,220,221,5,100,0,0,221,222,5,95,0,0,222,223,5,98,0, - 0,223,224,5,121,0,0,224,46,1,0,0,0,225,226,5,104,0,0,226,227,5,97, - 0,0,227,228,5,115,0,0,228,229,5,104,0,0,229,230,5,116,0,0,230,231, - 5,97,0,0,231,232,5,103,0,0,232,48,1,0,0,0,233,234,5,110,0,0,234, - 235,5,111,0,0,235,236,5,100,0,0,236,249,5,101,0,0,237,238,5,119, - 0,0,238,239,5,97,0,0,239,249,5,121,0,0,240,241,5,114,0,0,241,242, - 5,101,0,0,242,243,5,108,0,0,243,244,5,97,0,0,244,245,5,116,0,0,245, - 246,5,105,0,0,246,247,5,111,0,0,247,249,5,110,0,0,248,233,1,0,0, - 0,248,237,1,0,0,0,248,240,1,0,0,0,249,50,1,0,0,0,250,251,3,49,24, - 0,251,252,5,47,0,0,252,253,3,55,27,0,253,52,1,0,0,0,254,255,5,112, - 0,0,255,256,5,111,0,0,256,257,5,105,0,0,257,258,5,110,0,0,258,276, - 5,116,0,0,259,260,5,108,0,0,260,261,5,105,0,0,261,262,5,110,0,0, - 262,276,5,101,0,0,263,264,5,112,0,0,264,265,5,111,0,0,265,266,5, - 108,0,0,266,267,5,121,0,0,267,268,5,103,0,0,268,269,5,111,0,0,269, - 276,5,110,0,0,270,271,5,111,0,0,271,272,5,116,0,0,272,273,5,104, - 0,0,273,274,5,101,0,0,274,276,5,114,0,0,275,254,1,0,0,0,275,259, - 1,0,0,0,275,263,1,0,0,0,275,270,1,0,0,0,276,54,1,0,0,0,277,279,3, - 65,32,0,278,277,1,0,0,0,279,280,1,0,0,0,280,278,1,0,0,0,280,281, - 1,0,0,0,281,56,1,0,0,0,282,284,3,65,32,0,283,282,1,0,0,0,284,285, - 1,0,0,0,285,283,1,0,0,0,285,286,1,0,0,0,286,293,1,0,0,0,287,289, - 5,46,0,0,288,290,3,65,32,0,289,288,1,0,0,0,290,291,1,0,0,0,291,289, - 1,0,0,0,291,292,1,0,0,0,292,294,1,0,0,0,293,287,1,0,0,0,293,294, - 1,0,0,0,294,301,1,0,0,0,295,297,7,0,0,0,296,298,3,65,32,0,297,296, - 1,0,0,0,298,299,1,0,0,0,299,297,1,0,0,0,299,300,1,0,0,0,300,302, - 1,0,0,0,301,295,1,0,0,0,301,302,1,0,0,0,302,58,1,0,0,0,303,305,3, - 67,33,0,304,303,1,0,0,0,305,306,1,0,0,0,306,304,1,0,0,0,306,307, - 1,0,0,0,307,60,1,0,0,0,308,310,5,34,0,0,309,311,3,69,34,0,310,309, - 1,0,0,0,311,312,1,0,0,0,312,310,1,0,0,0,312,313,1,0,0,0,313,314, - 1,0,0,0,314,315,5,34,0,0,315,62,1,0,0,0,316,318,7,1,0,0,317,316, - 1,0,0,0,318,319,1,0,0,0,319,317,1,0,0,0,319,320,1,0,0,0,320,321, - 1,0,0,0,321,322,6,31,0,0,322,64,1,0,0,0,323,324,7,2,0,0,324,66,1, - 0,0,0,325,326,7,3,0,0,326,68,1,0,0,0,327,330,8,4,0,0,328,330,3,71, - 35,0,329,327,1,0,0,0,329,328,1,0,0,0,330,70,1,0,0,0,331,332,5,92, - 0,0,332,333,7,5,0,0,333,72,1,0,0,0,13,0,248,275,280,285,291,293, - 299,301,306,312,319,329,1,6,0,0 + 18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, + 19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1, + 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1, + 21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1, + 22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,253, + 8,24,1,25,1,25,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,28,1,28,1,28, + 1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28, + 1,28,1,28,1,28,1,28,1,28,3,28,285,8,28,1,29,4,29,288,8,29,11,29, + 12,29,289,1,30,4,30,293,8,30,11,30,12,30,294,1,30,1,30,4,30,299, + 8,30,11,30,12,30,300,3,30,303,8,30,1,30,1,30,4,30,307,8,30,11,30, + 12,30,308,3,30,311,8,30,1,31,4,31,314,8,31,11,31,12,31,315,1,32, + 1,32,4,32,320,8,32,11,32,12,32,321,1,32,1,32,1,33,4,33,327,8,33, + 11,33,12,33,328,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1,36,3,36,339, + 8,36,1,37,1,37,1,37,0,0,38,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17, + 9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39, + 20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61, + 31,63,32,65,33,67,34,69,0,71,0,73,0,75,0,1,0,7,3,0,110,110,114,114, + 119,119,2,0,69,69,101,101,3,0,9,10,13,13,32,32,1,0,48,57,5,0,45, + 45,48,57,65,90,95,95,97,122,4,0,10,10,13,13,34,34,92,92,4,0,34,34, + 92,92,110,110,114,114,353,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0, + 7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17, + 1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27, + 1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37, + 1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47, + 1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57, + 1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67, + 1,0,0,0,1,77,1,0,0,0,3,79,1,0,0,0,5,81,1,0,0,0,7,83,1,0,0,0,9,86, + 1,0,0,0,11,88,1,0,0,0,13,91,1,0,0,0,15,93,1,0,0,0,17,96,1,0,0,0, + 19,100,1,0,0,0,21,103,1,0,0,0,23,107,1,0,0,0,25,109,1,0,0,0,27,114, + 1,0,0,0,29,117,1,0,0,0,31,126,1,0,0,0,33,131,1,0,0,0,35,141,1,0, + 0,0,37,148,1,0,0,0,39,166,1,0,0,0,41,182,1,0,0,0,43,198,1,0,0,0, + 45,208,1,0,0,0,47,229,1,0,0,0,49,252,1,0,0,0,51,254,1,0,0,0,53,256, + 1,0,0,0,55,260,1,0,0,0,57,284,1,0,0,0,59,287,1,0,0,0,61,292,1,0, + 0,0,63,313,1,0,0,0,65,317,1,0,0,0,67,326,1,0,0,0,69,332,1,0,0,0, + 71,334,1,0,0,0,73,338,1,0,0,0,75,340,1,0,0,0,77,78,5,40,0,0,78,2, + 1,0,0,0,79,80,5,41,0,0,80,4,1,0,0,0,81,82,5,61,0,0,82,6,1,0,0,0, + 83,84,5,105,0,0,84,85,5,110,0,0,85,8,1,0,0,0,86,87,5,44,0,0,87,10, + 1,0,0,0,88,89,5,33,0,0,89,90,5,61,0,0,90,12,1,0,0,0,91,92,5,58,0, + 0,92,14,1,0,0,0,93,94,5,46,0,0,94,95,5,46,0,0,95,16,1,0,0,0,96,97, + 5,97,0,0,97,98,5,110,0,0,98,99,5,100,0,0,99,18,1,0,0,0,100,101,5, + 111,0,0,101,102,5,114,0,0,102,20,1,0,0,0,103,104,5,110,0,0,104,105, + 5,111,0,0,105,106,5,116,0,0,106,22,1,0,0,0,107,108,5,42,0,0,108, + 24,1,0,0,0,109,110,5,116,0,0,110,111,5,121,0,0,111,112,5,112,0,0, + 112,113,5,101,0,0,113,26,1,0,0,0,114,115,5,105,0,0,115,116,5,100, + 0,0,116,28,1,0,0,0,117,118,5,103,0,0,118,119,5,101,0,0,119,120,5, + 111,0,0,120,121,5,109,0,0,121,122,5,101,0,0,122,123,5,116,0,0,123, + 124,5,114,0,0,124,125,5,121,0,0,125,30,1,0,0,0,126,127,5,97,0,0, + 127,128,5,114,0,0,128,129,5,101,0,0,129,130,5,97,0,0,130,32,1,0, + 0,0,131,132,5,112,0,0,132,133,5,101,0,0,133,134,5,114,0,0,134,135, + 5,105,0,0,135,136,5,109,0,0,136,137,5,101,0,0,137,138,5,116,0,0, + 138,139,5,101,0,0,139,140,5,114,0,0,140,34,1,0,0,0,141,142,5,108, + 0,0,142,143,5,101,0,0,143,144,5,110,0,0,144,145,5,103,0,0,145,146, + 5,116,0,0,146,147,5,104,0,0,147,36,1,0,0,0,148,149,5,103,0,0,149, + 150,5,101,0,0,150,151,5,111,0,0,151,152,5,109,0,0,152,153,5,101, + 0,0,153,154,5,116,0,0,154,155,5,114,0,0,155,156,5,121,0,0,156,157, + 5,46,0,0,157,158,5,118,0,0,158,159,5,101,0,0,159,160,5,114,0,0,160, + 161,5,116,0,0,161,162,5,105,0,0,162,163,5,99,0,0,163,164,5,101,0, + 0,164,165,5,115,0,0,165,38,1,0,0,0,166,167,5,103,0,0,167,168,5,101, + 0,0,168,169,5,111,0,0,169,170,5,109,0,0,170,171,5,101,0,0,171,172, + 5,116,0,0,172,173,5,114,0,0,173,174,5,121,0,0,174,175,5,46,0,0,175, + 176,5,111,0,0,176,177,5,117,0,0,177,178,5,116,0,0,178,179,5,101, + 0,0,179,180,5,114,0,0,180,181,5,115,0,0,181,40,1,0,0,0,182,183,5, + 103,0,0,183,184,5,101,0,0,184,185,5,111,0,0,185,186,5,109,0,0,186, + 187,5,101,0,0,187,188,5,116,0,0,188,189,5,114,0,0,189,190,5,121, + 0,0,190,191,5,46,0,0,191,192,5,105,0,0,192,193,5,110,0,0,193,194, + 5,110,0,0,194,195,5,101,0,0,195,196,5,114,0,0,196,197,5,115,0,0, + 197,42,1,0,0,0,198,199,5,99,0,0,199,200,5,104,0,0,200,201,5,97,0, + 0,201,202,5,110,0,0,202,203,5,103,0,0,203,204,5,101,0,0,204,205, + 5,115,0,0,205,206,5,101,0,0,206,207,5,116,0,0,207,44,1,0,0,0,208, + 209,5,99,0,0,209,210,5,104,0,0,210,211,5,97,0,0,211,212,5,110,0, + 0,212,213,5,103,0,0,213,214,5,101,0,0,214,215,5,115,0,0,215,216, + 5,101,0,0,216,217,5,116,0,0,217,218,5,46,0,0,218,219,5,99,0,0,219, + 220,5,114,0,0,220,221,5,101,0,0,221,222,5,97,0,0,222,223,5,116,0, + 0,223,224,5,101,0,0,224,225,5,100,0,0,225,226,5,95,0,0,226,227,5, + 98,0,0,227,228,5,121,0,0,228,46,1,0,0,0,229,230,5,104,0,0,230,231, + 5,97,0,0,231,232,5,115,0,0,232,233,5,104,0,0,233,234,5,116,0,0,234, + 235,5,97,0,0,235,236,5,103,0,0,236,48,1,0,0,0,237,238,5,110,0,0, + 238,239,5,111,0,0,239,240,5,100,0,0,240,253,5,101,0,0,241,242,5, + 119,0,0,242,243,5,97,0,0,243,253,5,121,0,0,244,245,5,114,0,0,245, + 246,5,101,0,0,246,247,5,108,0,0,247,248,5,97,0,0,248,249,5,116,0, + 0,249,250,5,105,0,0,250,251,5,111,0,0,251,253,5,110,0,0,252,237, + 1,0,0,0,252,241,1,0,0,0,252,244,1,0,0,0,253,50,1,0,0,0,254,255,7, + 0,0,0,255,52,1,0,0,0,256,257,3,49,24,0,257,258,5,47,0,0,258,259, + 3,59,29,0,259,54,1,0,0,0,260,261,3,51,25,0,261,262,3,59,29,0,262, + 56,1,0,0,0,263,264,5,112,0,0,264,265,5,111,0,0,265,266,5,105,0,0, + 266,267,5,110,0,0,267,285,5,116,0,0,268,269,5,108,0,0,269,270,5, + 105,0,0,270,271,5,110,0,0,271,285,5,101,0,0,272,273,5,112,0,0,273, + 274,5,111,0,0,274,275,5,108,0,0,275,276,5,121,0,0,276,277,5,103, + 0,0,277,278,5,111,0,0,278,285,5,110,0,0,279,280,5,111,0,0,280,281, + 5,116,0,0,281,282,5,104,0,0,282,283,5,101,0,0,283,285,5,114,0,0, + 284,263,1,0,0,0,284,268,1,0,0,0,284,272,1,0,0,0,284,279,1,0,0,0, + 285,58,1,0,0,0,286,288,3,69,34,0,287,286,1,0,0,0,288,289,1,0,0,0, + 289,287,1,0,0,0,289,290,1,0,0,0,290,60,1,0,0,0,291,293,3,69,34,0, + 292,291,1,0,0,0,293,294,1,0,0,0,294,292,1,0,0,0,294,295,1,0,0,0, + 295,302,1,0,0,0,296,298,5,46,0,0,297,299,3,69,34,0,298,297,1,0,0, + 0,299,300,1,0,0,0,300,298,1,0,0,0,300,301,1,0,0,0,301,303,1,0,0, + 0,302,296,1,0,0,0,302,303,1,0,0,0,303,310,1,0,0,0,304,306,7,1,0, + 0,305,307,3,69,34,0,306,305,1,0,0,0,307,308,1,0,0,0,308,306,1,0, + 0,0,308,309,1,0,0,0,309,311,1,0,0,0,310,304,1,0,0,0,310,311,1,0, + 0,0,311,62,1,0,0,0,312,314,3,71,35,0,313,312,1,0,0,0,314,315,1,0, + 0,0,315,313,1,0,0,0,315,316,1,0,0,0,316,64,1,0,0,0,317,319,5,34, + 0,0,318,320,3,73,36,0,319,318,1,0,0,0,320,321,1,0,0,0,321,319,1, + 0,0,0,321,322,1,0,0,0,322,323,1,0,0,0,323,324,5,34,0,0,324,66,1, + 0,0,0,325,327,7,2,0,0,326,325,1,0,0,0,327,328,1,0,0,0,328,326,1, + 0,0,0,328,329,1,0,0,0,329,330,1,0,0,0,330,331,6,33,0,0,331,68,1, + 0,0,0,332,333,7,3,0,0,333,70,1,0,0,0,334,335,7,4,0,0,335,72,1,0, + 0,0,336,339,8,5,0,0,337,339,3,75,37,0,338,336,1,0,0,0,338,337,1, + 0,0,0,339,74,1,0,0,0,340,341,5,92,0,0,341,342,7,6,0,0,342,76,1,0, + 0,0,13,0,252,284,289,294,300,302,308,310,315,321,328,338,1,6,0,0 ] class OFLLexer(Lexer): @@ -163,13 +166,15 @@ class OFLLexer(Lexer): CHANGESET_CREATEDBY = 23 HASHTAG = 24 OSMTYPE = 25 - OSMID = 26 - GEOMETRY_TYPE = 27 - NUMBER = 28 - DECIMAL = 29 - WORD = 30 - QUOTED = 31 - WHITESPACE = 32 + OSMTYPE_SHORT = 26 + OSMID = 27 + SHORT_OSMID = 28 + GEOMETRY_TYPE = 29 + NUMBER = 30 + DECIMAL = 31 + WORD = 32 + QUOTED = 33 + WHITESPACE = 34 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -186,16 +191,16 @@ class OFLLexer(Lexer): "AND", "OR", "NOT", "WILDCARD", "TYPE", "ID", "GEOMETRY", "AREA", "PERIMETER", "LENGTH", "GEOMETRY_VERTICES", "GEOMETRY_OUTERS", "GEOMETRY_INNERS", "CHANGESET", "CHANGESET_CREATEDBY", "HASHTAG", - "OSMTYPE", "OSMID", "GEOMETRY_TYPE", "NUMBER", "DECIMAL", "WORD", - "QUOTED", "WHITESPACE" ] + "OSMTYPE", "OSMTYPE_SHORT", "OSMID", "SHORT_OSMID", "GEOMETRY_TYPE", + "NUMBER", "DECIMAL", "WORD", "QUOTED", "WHITESPACE" ] ruleNames = [ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "AND", "OR", "NOT", "WILDCARD", "TYPE", "ID", "GEOMETRY", "AREA", "PERIMETER", "LENGTH", "GEOMETRY_VERTICES", "GEOMETRY_OUTERS", "GEOMETRY_INNERS", "CHANGESET", "CHANGESET_CREATEDBY", - "HASHTAG", "OSMTYPE", "OSMID", "GEOMETRY_TYPE", "NUMBER", - "DECIMAL", "WORD", "QUOTED", "WHITESPACE", "NUMERAL", - "LETTER", "CHARACTER", "EscapeSequence" ] + "HASHTAG", "OSMTYPE", "OSMTYPE_SHORT", "OSMID", "SHORT_OSMID", + "GEOMETRY_TYPE", "NUMBER", "DECIMAL", "WORD", "QUOTED", + "WHITESPACE", "NUMERAL", "LETTER", "CHARACTER", "EscapeSequence" ] grammarFileName = "OFL.g4" diff --git a/ohsome_filter_to_sql/OFLListener.py b/ohsome_filter_to_sql/OFLListener.py index dc1b688..37eab8b 100644 --- a/ohsome_filter_to_sql/OFLListener.py +++ b/ohsome_filter_to_sql/OFLListener.py @@ -152,6 +152,15 @@ def exitTypeIdListMatch(self, ctx:OFLParser.TypeIdListMatchContext): pass + # Enter a parse tree produced by OFLParser#osmid. + def enterOsmid(self, ctx:OFLParser.OsmidContext): + pass + + # Exit a parse tree produced by OFLParser#osmid. + def exitOsmid(self, ctx:OFLParser.OsmidContext): + pass + + # Enter a parse tree produced by OFLParser#geometryMatch. def enterGeometryMatch(self, ctx:OFLParser.GeometryMatchContext): pass diff --git a/ohsome_filter_to_sql/OFLParser.py b/ohsome_filter_to_sql/OFLParser.py index 37e53c5..6aa0c5b 100644 --- a/ohsome_filter_to_sql/OFLParser.py +++ b/ohsome_filter_to_sql/OFLParser.py @@ -10,124 +10,125 @@ def serializedATN(): return [ - 4,1,32,334,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, + 4,1,34,338,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, 6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13, 2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20, 7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26, - 2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,1,0,3,0,66,8,0, - 1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,1,0, + 3,0,68,8,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,3,1,104,8,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,112,8,1, - 10,1,12,1,115,9,1,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1, - 4,1,4,1,4,5,4,131,8,4,10,4,12,4,134,9,4,1,4,1,4,1,5,1,5,1,5,1,5, - 1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9, - 1,9,1,9,1,9,5,9,161,8,9,10,9,12,9,164,9,9,1,9,1,9,1,10,1,10,1,10, - 1,10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13, - 1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,5,14,192,8,14,10,14,12,14, - 195,9,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,5,15,205,8,15,10, - 15,12,15,208,9,15,1,15,1,15,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1, - 17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1, - 19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,22,1, - 22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1, - 24,1,24,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,5,26,270, - 8,26,10,26,12,26,273,9,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27, - 1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, - 5,29,309,8,29,10,29,12,29,312,9,29,3,29,314,8,29,1,30,1,30,1,30, - 1,30,1,30,1,30,1,30,3,30,323,8,30,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,3,31,332,8,31,1,31,0,1,2,32,0,2,4,6,8,10,12,14,16,18,20,22, - 24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,0,2, - 4,0,9,11,13,25,27,27,30,30,1,0,28,29,361,0,65,1,0,0,0,2,103,1,0, - 0,0,4,116,1,0,0,0,6,120,1,0,0,0,8,124,1,0,0,0,10,137,1,0,0,0,12, - 141,1,0,0,0,14,145,1,0,0,0,16,149,1,0,0,0,18,154,1,0,0,0,20,167, - 1,0,0,0,22,171,1,0,0,0,24,175,1,0,0,0,26,179,1,0,0,0,28,185,1,0, - 0,0,30,198,1,0,0,0,32,211,1,0,0,0,34,215,1,0,0,0,36,221,1,0,0,0, - 38,227,1,0,0,0,40,233,1,0,0,0,42,239,1,0,0,0,44,243,1,0,0,0,46,249, - 1,0,0,0,48,253,1,0,0,0,50,259,1,0,0,0,52,263,1,0,0,0,54,276,1,0, - 0,0,56,282,1,0,0,0,58,313,1,0,0,0,60,322,1,0,0,0,62,331,1,0,0,0, - 64,66,3,2,1,0,65,64,1,0,0,0,65,66,1,0,0,0,66,67,1,0,0,0,67,68,5, - 0,0,1,68,1,1,0,0,0,69,70,6,1,-1,0,70,71,5,1,0,0,71,72,3,2,1,0,72, - 73,5,2,0,0,73,104,1,0,0,0,74,75,5,11,0,0,75,104,3,2,1,30,76,104, - 3,14,7,0,77,104,3,16,8,0,78,104,3,18,9,0,79,104,3,4,2,0,80,104,3, - 6,3,0,81,104,3,10,5,0,82,104,3,12,6,0,83,104,3,8,4,0,84,104,3,20, - 10,0,85,104,3,22,11,0,86,104,3,24,12,0,87,104,3,26,13,0,88,104,3, - 28,14,0,89,104,3,30,15,0,90,104,3,32,16,0,91,104,3,34,17,0,92,104, - 3,36,18,0,93,104,3,38,19,0,94,104,3,40,20,0,95,104,3,42,21,0,96, - 104,3,44,22,0,97,104,3,46,23,0,98,104,3,48,24,0,99,104,3,50,25,0, - 100,104,3,52,26,0,101,104,3,54,27,0,102,104,3,56,28,0,103,69,1,0, - 0,0,103,74,1,0,0,0,103,76,1,0,0,0,103,77,1,0,0,0,103,78,1,0,0,0, - 103,79,1,0,0,0,103,80,1,0,0,0,103,81,1,0,0,0,103,82,1,0,0,0,103, - 83,1,0,0,0,103,84,1,0,0,0,103,85,1,0,0,0,103,86,1,0,0,0,103,87,1, - 0,0,0,103,88,1,0,0,0,103,89,1,0,0,0,103,90,1,0,0,0,103,91,1,0,0, - 0,103,92,1,0,0,0,103,93,1,0,0,0,103,94,1,0,0,0,103,95,1,0,0,0,103, - 96,1,0,0,0,103,97,1,0,0,0,103,98,1,0,0,0,103,99,1,0,0,0,103,100, - 1,0,0,0,103,101,1,0,0,0,103,102,1,0,0,0,104,113,1,0,0,0,105,106, - 10,29,0,0,106,107,5,9,0,0,107,112,3,2,1,30,108,109,10,28,0,0,109, - 110,5,10,0,0,110,112,3,2,1,29,111,105,1,0,0,0,111,108,1,0,0,0,112, - 115,1,0,0,0,113,111,1,0,0,0,113,114,1,0,0,0,114,3,1,0,0,0,115,113, - 1,0,0,0,116,117,3,58,29,0,117,118,5,3,0,0,118,119,3,58,29,0,119, - 5,1,0,0,0,120,121,3,58,29,0,121,122,5,3,0,0,122,123,5,12,0,0,123, - 7,1,0,0,0,124,125,3,58,29,0,125,126,5,4,0,0,126,127,5,1,0,0,127, - 132,3,58,29,0,128,129,5,5,0,0,129,131,3,58,29,0,130,128,1,0,0,0, - 131,134,1,0,0,0,132,130,1,0,0,0,132,133,1,0,0,0,133,135,1,0,0,0, - 134,132,1,0,0,0,135,136,5,2,0,0,136,9,1,0,0,0,137,138,3,58,29,0, - 138,139,5,6,0,0,139,140,3,58,29,0,140,11,1,0,0,0,141,142,3,58,29, - 0,142,143,5,6,0,0,143,144,5,12,0,0,144,13,1,0,0,0,145,146,5,24,0, - 0,146,147,5,7,0,0,147,148,3,58,29,0,148,15,1,0,0,0,149,150,5,24, - 0,0,150,151,5,7,0,0,151,152,5,30,0,0,152,153,5,12,0,0,153,17,1,0, - 0,0,154,155,5,24,0,0,155,156,5,7,0,0,156,157,5,1,0,0,157,162,3,58, - 29,0,158,159,5,5,0,0,159,161,3,58,29,0,160,158,1,0,0,0,161,164,1, - 0,0,0,162,160,1,0,0,0,162,163,1,0,0,0,163,165,1,0,0,0,164,162,1, - 0,0,0,165,166,5,2,0,0,166,19,1,0,0,0,167,168,5,13,0,0,168,169,5, - 7,0,0,169,170,5,25,0,0,170,21,1,0,0,0,171,172,5,14,0,0,172,173,5, - 7,0,0,173,174,5,28,0,0,174,23,1,0,0,0,175,176,5,14,0,0,176,177,5, - 7,0,0,177,178,5,26,0,0,178,25,1,0,0,0,179,180,5,14,0,0,180,181,5, - 7,0,0,181,182,5,1,0,0,182,183,3,60,30,0,183,184,5,2,0,0,184,27,1, - 0,0,0,185,186,5,14,0,0,186,187,5,7,0,0,187,188,5,1,0,0,188,193,5, - 28,0,0,189,190,5,5,0,0,190,192,5,28,0,0,191,189,1,0,0,0,192,195, - 1,0,0,0,193,191,1,0,0,0,193,194,1,0,0,0,194,196,1,0,0,0,195,193, - 1,0,0,0,196,197,5,2,0,0,197,29,1,0,0,0,198,199,5,14,0,0,199,200, - 5,7,0,0,200,201,5,1,0,0,201,206,5,26,0,0,202,203,5,5,0,0,203,205, - 5,26,0,0,204,202,1,0,0,0,205,208,1,0,0,0,206,204,1,0,0,0,206,207, - 1,0,0,0,207,209,1,0,0,0,208,206,1,0,0,0,209,210,5,2,0,0,210,31,1, - 0,0,0,211,212,5,15,0,0,212,213,5,7,0,0,213,214,5,27,0,0,214,33,1, - 0,0,0,215,216,5,16,0,0,216,217,5,7,0,0,217,218,5,1,0,0,218,219,3, - 62,31,0,219,220,5,2,0,0,220,35,1,0,0,0,221,222,5,17,0,0,222,223, - 5,7,0,0,223,224,5,1,0,0,224,225,3,62,31,0,225,226,5,2,0,0,226,37, - 1,0,0,0,227,228,5,18,0,0,228,229,5,7,0,0,229,230,5,1,0,0,230,231, - 3,62,31,0,231,232,5,2,0,0,232,39,1,0,0,0,233,234,5,19,0,0,234,235, - 5,7,0,0,235,236,5,1,0,0,236,237,3,60,30,0,237,238,5,2,0,0,238,41, - 1,0,0,0,239,240,5,20,0,0,240,241,5,7,0,0,241,242,5,28,0,0,242,43, - 1,0,0,0,243,244,5,20,0,0,244,245,5,7,0,0,245,246,5,1,0,0,246,247, - 3,60,30,0,247,248,5,2,0,0,248,45,1,0,0,0,249,250,5,21,0,0,250,251, - 5,7,0,0,251,252,5,28,0,0,252,47,1,0,0,0,253,254,5,21,0,0,254,255, - 5,7,0,0,255,256,5,1,0,0,256,257,3,60,30,0,257,258,5,2,0,0,258,49, - 1,0,0,0,259,260,5,22,0,0,260,261,5,7,0,0,261,262,5,28,0,0,262,51, - 1,0,0,0,263,264,5,22,0,0,264,265,5,7,0,0,265,266,5,1,0,0,266,271, - 5,28,0,0,267,268,5,5,0,0,268,270,5,28,0,0,269,267,1,0,0,0,270,273, - 1,0,0,0,271,269,1,0,0,0,271,272,1,0,0,0,272,274,1,0,0,0,273,271, - 1,0,0,0,274,275,5,2,0,0,275,53,1,0,0,0,276,277,5,22,0,0,277,278, - 5,7,0,0,278,279,5,1,0,0,279,280,3,60,30,0,280,281,5,2,0,0,281,55, - 1,0,0,0,282,283,5,23,0,0,283,284,5,7,0,0,284,285,3,58,29,0,285,57, - 1,0,0,0,286,314,5,31,0,0,287,314,5,28,0,0,288,310,7,0,0,0,289,290, - 5,7,0,0,290,309,5,30,0,0,291,309,5,9,0,0,292,309,5,10,0,0,293,309, - 5,11,0,0,294,309,5,13,0,0,295,309,5,14,0,0,296,309,5,15,0,0,297, - 309,5,16,0,0,298,309,5,17,0,0,299,309,5,18,0,0,300,309,5,19,0,0, - 301,309,5,20,0,0,302,309,5,21,0,0,303,309,5,22,0,0,304,309,5,23, - 0,0,305,309,5,24,0,0,306,309,5,25,0,0,307,309,5,27,0,0,308,289,1, - 0,0,0,308,291,1,0,0,0,308,292,1,0,0,0,308,293,1,0,0,0,308,294,1, - 0,0,0,308,295,1,0,0,0,308,296,1,0,0,0,308,297,1,0,0,0,308,298,1, - 0,0,0,308,299,1,0,0,0,308,300,1,0,0,0,308,301,1,0,0,0,308,302,1, - 0,0,0,308,303,1,0,0,0,308,304,1,0,0,0,308,305,1,0,0,0,308,306,1, - 0,0,0,308,307,1,0,0,0,309,312,1,0,0,0,310,308,1,0,0,0,310,311,1, - 0,0,0,311,314,1,0,0,0,312,310,1,0,0,0,313,286,1,0,0,0,313,287,1, - 0,0,0,313,288,1,0,0,0,314,59,1,0,0,0,315,316,5,28,0,0,316,317,5, - 8,0,0,317,323,5,28,0,0,318,319,5,8,0,0,319,323,5,28,0,0,320,321, - 5,28,0,0,321,323,5,8,0,0,322,315,1,0,0,0,322,318,1,0,0,0,322,320, - 1,0,0,0,323,61,1,0,0,0,324,325,7,1,0,0,325,326,5,8,0,0,326,332,7, - 1,0,0,327,328,5,8,0,0,328,332,7,1,0,0,329,330,7,1,0,0,330,332,5, - 8,0,0,331,324,1,0,0,0,331,327,1,0,0,0,331,329,1,0,0,0,332,63,1,0, - 0,0,14,65,103,111,113,132,162,193,206,271,308,310,313,322,331 + 1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,106,8,1,1,1,1,1,1,1,1,1,1,1,1,1,5, + 1,114,8,1,10,1,12,1,117,9,1,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,4, + 1,4,1,4,1,4,1,4,1,4,5,4,133,8,4,10,4,12,4,136,9,4,1,4,1,4,1,5,1, + 5,1,5,1,5,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1, + 9,1,9,1,9,1,9,1,9,1,9,5,9,163,8,9,10,9,12,9,166,9,9,1,9,1,9,1,10, + 1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13, + 1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,5,14,194,8,14, + 10,14,12,14,197,9,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,5,15, + 207,8,15,10,15,12,15,210,9,15,1,15,1,15,1,16,1,16,1,17,1,17,1,17, + 1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19, + 1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,22, + 1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24, + 1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,27,1,27,1,27, + 1,27,1,27,1,27,5,27,274,8,27,10,27,12,27,277,9,27,1,27,1,27,1,28, + 1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30, + 1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, + 1,30,1,30,1,30,1,30,1,30,5,30,313,8,30,10,30,12,30,316,9,30,3,30, + 318,8,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,3,31,327,8,31,1,32,1, + 32,1,32,1,32,1,32,1,32,1,32,3,32,336,8,32,1,32,0,1,2,33,0,2,4,6, + 8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50, + 52,54,56,58,60,62,64,0,3,1,0,27,28,4,0,9,11,13,25,29,29,32,32,1, + 0,30,31,364,0,67,1,0,0,0,2,105,1,0,0,0,4,118,1,0,0,0,6,122,1,0,0, + 0,8,126,1,0,0,0,10,139,1,0,0,0,12,143,1,0,0,0,14,147,1,0,0,0,16, + 151,1,0,0,0,18,156,1,0,0,0,20,169,1,0,0,0,22,173,1,0,0,0,24,177, + 1,0,0,0,26,181,1,0,0,0,28,187,1,0,0,0,30,200,1,0,0,0,32,213,1,0, + 0,0,34,215,1,0,0,0,36,219,1,0,0,0,38,225,1,0,0,0,40,231,1,0,0,0, + 42,237,1,0,0,0,44,243,1,0,0,0,46,247,1,0,0,0,48,253,1,0,0,0,50,257, + 1,0,0,0,52,263,1,0,0,0,54,267,1,0,0,0,56,280,1,0,0,0,58,286,1,0, + 0,0,60,317,1,0,0,0,62,326,1,0,0,0,64,335,1,0,0,0,66,68,3,2,1,0,67, + 66,1,0,0,0,67,68,1,0,0,0,68,69,1,0,0,0,69,70,5,0,0,1,70,1,1,0,0, + 0,71,72,6,1,-1,0,72,73,5,1,0,0,73,74,3,2,1,0,74,75,5,2,0,0,75,106, + 1,0,0,0,76,77,5,11,0,0,77,106,3,2,1,30,78,106,3,14,7,0,79,106,3, + 16,8,0,80,106,3,18,9,0,81,106,3,4,2,0,82,106,3,6,3,0,83,106,3,10, + 5,0,84,106,3,12,6,0,85,106,3,8,4,0,86,106,3,20,10,0,87,106,3,22, + 11,0,88,106,3,24,12,0,89,106,3,26,13,0,90,106,3,28,14,0,91,106,3, + 30,15,0,92,106,3,34,17,0,93,106,3,36,18,0,94,106,3,38,19,0,95,106, + 3,40,20,0,96,106,3,42,21,0,97,106,3,44,22,0,98,106,3,46,23,0,99, + 106,3,48,24,0,100,106,3,50,25,0,101,106,3,52,26,0,102,106,3,54,27, + 0,103,106,3,56,28,0,104,106,3,58,29,0,105,71,1,0,0,0,105,76,1,0, + 0,0,105,78,1,0,0,0,105,79,1,0,0,0,105,80,1,0,0,0,105,81,1,0,0,0, + 105,82,1,0,0,0,105,83,1,0,0,0,105,84,1,0,0,0,105,85,1,0,0,0,105, + 86,1,0,0,0,105,87,1,0,0,0,105,88,1,0,0,0,105,89,1,0,0,0,105,90,1, + 0,0,0,105,91,1,0,0,0,105,92,1,0,0,0,105,93,1,0,0,0,105,94,1,0,0, + 0,105,95,1,0,0,0,105,96,1,0,0,0,105,97,1,0,0,0,105,98,1,0,0,0,105, + 99,1,0,0,0,105,100,1,0,0,0,105,101,1,0,0,0,105,102,1,0,0,0,105,103, + 1,0,0,0,105,104,1,0,0,0,106,115,1,0,0,0,107,108,10,29,0,0,108,109, + 5,9,0,0,109,114,3,2,1,30,110,111,10,28,0,0,111,112,5,10,0,0,112, + 114,3,2,1,29,113,107,1,0,0,0,113,110,1,0,0,0,114,117,1,0,0,0,115, + 113,1,0,0,0,115,116,1,0,0,0,116,3,1,0,0,0,117,115,1,0,0,0,118,119, + 3,60,30,0,119,120,5,3,0,0,120,121,3,60,30,0,121,5,1,0,0,0,122,123, + 3,60,30,0,123,124,5,3,0,0,124,125,5,12,0,0,125,7,1,0,0,0,126,127, + 3,60,30,0,127,128,5,4,0,0,128,129,5,1,0,0,129,134,3,60,30,0,130, + 131,5,5,0,0,131,133,3,60,30,0,132,130,1,0,0,0,133,136,1,0,0,0,134, + 132,1,0,0,0,134,135,1,0,0,0,135,137,1,0,0,0,136,134,1,0,0,0,137, + 138,5,2,0,0,138,9,1,0,0,0,139,140,3,60,30,0,140,141,5,6,0,0,141, + 142,3,60,30,0,142,11,1,0,0,0,143,144,3,60,30,0,144,145,5,6,0,0,145, + 146,5,12,0,0,146,13,1,0,0,0,147,148,5,24,0,0,148,149,5,7,0,0,149, + 150,3,60,30,0,150,15,1,0,0,0,151,152,5,24,0,0,152,153,5,7,0,0,153, + 154,5,32,0,0,154,155,5,12,0,0,155,17,1,0,0,0,156,157,5,24,0,0,157, + 158,5,7,0,0,158,159,5,1,0,0,159,164,3,60,30,0,160,161,5,5,0,0,161, + 163,3,60,30,0,162,160,1,0,0,0,163,166,1,0,0,0,164,162,1,0,0,0,164, + 165,1,0,0,0,165,167,1,0,0,0,166,164,1,0,0,0,167,168,5,2,0,0,168, + 19,1,0,0,0,169,170,5,13,0,0,170,171,5,7,0,0,171,172,5,25,0,0,172, + 21,1,0,0,0,173,174,5,14,0,0,174,175,5,7,0,0,175,176,5,30,0,0,176, + 23,1,0,0,0,177,178,5,14,0,0,178,179,5,7,0,0,179,180,3,32,16,0,180, + 25,1,0,0,0,181,182,5,14,0,0,182,183,5,7,0,0,183,184,5,1,0,0,184, + 185,3,62,31,0,185,186,5,2,0,0,186,27,1,0,0,0,187,188,5,14,0,0,188, + 189,5,7,0,0,189,190,5,1,0,0,190,195,5,30,0,0,191,192,5,5,0,0,192, + 194,5,30,0,0,193,191,1,0,0,0,194,197,1,0,0,0,195,193,1,0,0,0,195, + 196,1,0,0,0,196,198,1,0,0,0,197,195,1,0,0,0,198,199,5,2,0,0,199, + 29,1,0,0,0,200,201,5,14,0,0,201,202,5,7,0,0,202,203,5,1,0,0,203, + 208,3,32,16,0,204,205,5,5,0,0,205,207,3,32,16,0,206,204,1,0,0,0, + 207,210,1,0,0,0,208,206,1,0,0,0,208,209,1,0,0,0,209,211,1,0,0,0, + 210,208,1,0,0,0,211,212,5,2,0,0,212,31,1,0,0,0,213,214,7,0,0,0,214, + 33,1,0,0,0,215,216,5,15,0,0,216,217,5,7,0,0,217,218,5,29,0,0,218, + 35,1,0,0,0,219,220,5,16,0,0,220,221,5,7,0,0,221,222,5,1,0,0,222, + 223,3,64,32,0,223,224,5,2,0,0,224,37,1,0,0,0,225,226,5,17,0,0,226, + 227,5,7,0,0,227,228,5,1,0,0,228,229,3,64,32,0,229,230,5,2,0,0,230, + 39,1,0,0,0,231,232,5,18,0,0,232,233,5,7,0,0,233,234,5,1,0,0,234, + 235,3,64,32,0,235,236,5,2,0,0,236,41,1,0,0,0,237,238,5,19,0,0,238, + 239,5,7,0,0,239,240,5,1,0,0,240,241,3,62,31,0,241,242,5,2,0,0,242, + 43,1,0,0,0,243,244,5,20,0,0,244,245,5,7,0,0,245,246,5,30,0,0,246, + 45,1,0,0,0,247,248,5,20,0,0,248,249,5,7,0,0,249,250,5,1,0,0,250, + 251,3,62,31,0,251,252,5,2,0,0,252,47,1,0,0,0,253,254,5,21,0,0,254, + 255,5,7,0,0,255,256,5,30,0,0,256,49,1,0,0,0,257,258,5,21,0,0,258, + 259,5,7,0,0,259,260,5,1,0,0,260,261,3,62,31,0,261,262,5,2,0,0,262, + 51,1,0,0,0,263,264,5,22,0,0,264,265,5,7,0,0,265,266,5,30,0,0,266, + 53,1,0,0,0,267,268,5,22,0,0,268,269,5,7,0,0,269,270,5,1,0,0,270, + 275,5,30,0,0,271,272,5,5,0,0,272,274,5,30,0,0,273,271,1,0,0,0,274, + 277,1,0,0,0,275,273,1,0,0,0,275,276,1,0,0,0,276,278,1,0,0,0,277, + 275,1,0,0,0,278,279,5,2,0,0,279,55,1,0,0,0,280,281,5,22,0,0,281, + 282,5,7,0,0,282,283,5,1,0,0,283,284,3,62,31,0,284,285,5,2,0,0,285, + 57,1,0,0,0,286,287,5,23,0,0,287,288,5,7,0,0,288,289,3,60,30,0,289, + 59,1,0,0,0,290,318,5,33,0,0,291,318,5,30,0,0,292,314,7,1,0,0,293, + 294,5,7,0,0,294,313,5,32,0,0,295,313,5,9,0,0,296,313,5,10,0,0,297, + 313,5,11,0,0,298,313,5,13,0,0,299,313,5,14,0,0,300,313,5,15,0,0, + 301,313,5,16,0,0,302,313,5,17,0,0,303,313,5,18,0,0,304,313,5,19, + 0,0,305,313,5,20,0,0,306,313,5,21,0,0,307,313,5,22,0,0,308,313,5, + 23,0,0,309,313,5,24,0,0,310,313,5,25,0,0,311,313,5,29,0,0,312,293, + 1,0,0,0,312,295,1,0,0,0,312,296,1,0,0,0,312,297,1,0,0,0,312,298, + 1,0,0,0,312,299,1,0,0,0,312,300,1,0,0,0,312,301,1,0,0,0,312,302, + 1,0,0,0,312,303,1,0,0,0,312,304,1,0,0,0,312,305,1,0,0,0,312,306, + 1,0,0,0,312,307,1,0,0,0,312,308,1,0,0,0,312,309,1,0,0,0,312,310, + 1,0,0,0,312,311,1,0,0,0,313,316,1,0,0,0,314,312,1,0,0,0,314,315, + 1,0,0,0,315,318,1,0,0,0,316,314,1,0,0,0,317,290,1,0,0,0,317,291, + 1,0,0,0,317,292,1,0,0,0,318,61,1,0,0,0,319,320,5,30,0,0,320,321, + 5,8,0,0,321,327,5,30,0,0,322,323,5,8,0,0,323,327,5,30,0,0,324,325, + 5,30,0,0,325,327,5,8,0,0,326,319,1,0,0,0,326,322,1,0,0,0,326,324, + 1,0,0,0,327,63,1,0,0,0,328,329,7,2,0,0,329,330,5,8,0,0,330,336,7, + 2,0,0,331,332,5,8,0,0,332,336,7,2,0,0,333,334,7,2,0,0,334,336,5, + 8,0,0,335,328,1,0,0,0,335,331,1,0,0,0,335,333,1,0,0,0,336,65,1,0, + 0,0,14,67,105,113,115,134,164,195,208,275,312,314,317,326,335 ] class OFLParser ( Parser ): @@ -151,9 +152,9 @@ class OFLParser ( Parser ): "", "AND", "OR", "NOT", "WILDCARD", "TYPE", "ID", "GEOMETRY", "AREA", "PERIMETER", "LENGTH", "GEOMETRY_VERTICES", "GEOMETRY_OUTERS", "GEOMETRY_INNERS", "CHANGESET", - "CHANGESET_CREATEDBY", "HASHTAG", "OSMTYPE", "OSMID", - "GEOMETRY_TYPE", "NUMBER", "DECIMAL", "WORD", "QUOTED", - "WHITESPACE" ] + "CHANGESET_CREATEDBY", "HASHTAG", "OSMTYPE", "OSMTYPE_SHORT", + "OSMID", "SHORT_OSMID", "GEOMETRY_TYPE", "NUMBER", + "DECIMAL", "WORD", "QUOTED", "WHITESPACE" ] RULE_root = 0 RULE_expression = 1 @@ -171,33 +172,34 @@ class OFLParser ( Parser ): RULE_idRangeMatch = 13 RULE_idListMatch = 14 RULE_typeIdListMatch = 15 - RULE_geometryMatch = 16 - RULE_areaRangeMatch = 17 - RULE_perimeterRangeMatch = 18 - RULE_lengthRangeMatch = 19 - RULE_geometryVerticesRangeMatch = 20 - RULE_geometryOutersMatch = 21 - RULE_geometryOutersRangeMatch = 22 - RULE_geometryInnersMatch = 23 - RULE_geometryInnersRangeMatch = 24 - RULE_changesetMatch = 25 - RULE_changesetListMatch = 26 - RULE_changesetRangeMatch = 27 - RULE_changesetCreatedByMatch = 28 - RULE_string = 29 - RULE_range_int = 30 - RULE_range_dec = 31 + RULE_osmid = 16 + RULE_geometryMatch = 17 + RULE_areaRangeMatch = 18 + RULE_perimeterRangeMatch = 19 + RULE_lengthRangeMatch = 20 + RULE_geometryVerticesRangeMatch = 21 + RULE_geometryOutersMatch = 22 + RULE_geometryOutersRangeMatch = 23 + RULE_geometryInnersMatch = 24 + RULE_geometryInnersRangeMatch = 25 + RULE_changesetMatch = 26 + RULE_changesetListMatch = 27 + RULE_changesetRangeMatch = 28 + RULE_changesetCreatedByMatch = 29 + RULE_string = 30 + RULE_range_int = 31 + RULE_range_dec = 32 ruleNames = [ "root", "expression", "tagMatch", "tagWildcardMatch", "tagListMatch", "tagNotMatch", "tagNotWildcardMatch", "hashtagMatch", "hashtagWildcardMatch", "hashtagListMatch", "typeMatch", "idMatch", "typeIdMatch", "idRangeMatch", - "idListMatch", "typeIdListMatch", "geometryMatch", "areaRangeMatch", - "perimeterRangeMatch", "lengthRangeMatch", "geometryVerticesRangeMatch", - "geometryOutersMatch", "geometryOutersRangeMatch", "geometryInnersMatch", - "geometryInnersRangeMatch", "changesetMatch", "changesetListMatch", - "changesetRangeMatch", "changesetCreatedByMatch", "string", - "range_int", "range_dec" ] + "idListMatch", "typeIdListMatch", "osmid", "geometryMatch", + "areaRangeMatch", "perimeterRangeMatch", "lengthRangeMatch", + "geometryVerticesRangeMatch", "geometryOutersMatch", + "geometryOutersRangeMatch", "geometryInnersMatch", "geometryInnersRangeMatch", + "changesetMatch", "changesetListMatch", "changesetRangeMatch", + "changesetCreatedByMatch", "string", "range_int", "range_dec" ] EOF = Token.EOF T__0=1 @@ -225,13 +227,15 @@ class OFLParser ( Parser ): CHANGESET_CREATEDBY=23 HASHTAG=24 OSMTYPE=25 - OSMID=26 - GEOMETRY_TYPE=27 - NUMBER=28 - DECIMAL=29 - WORD=30 - QUOTED=31 - WHITESPACE=32 + OSMTYPE_SHORT=26 + OSMID=27 + SHORT_OSMID=28 + GEOMETRY_TYPE=29 + NUMBER=30 + DECIMAL=31 + WORD=32 + QUOTED=33 + WHITESPACE=34 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -277,15 +281,15 @@ def root(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 65 + self.state = 67 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 3690982914) != 0): - self.state = 64 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 14562618882) != 0): + self.state = 66 self.expression(0) - self.state = 67 + self.state = 69 self.match(OFLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -449,163 +453,163 @@ def expression(self, _p:int=0): self.enterRecursionRule(localctx, 2, self.RULE_expression, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 103 + self.state = 105 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,1,self._ctx) if la_ == 1: - self.state = 70 + self.state = 72 self.match(OFLParser.T__0) - self.state = 71 + self.state = 73 self.expression(0) - self.state = 72 + self.state = 74 self.match(OFLParser.T__1) pass elif la_ == 2: - self.state = 74 + self.state = 76 self.match(OFLParser.NOT) - self.state = 75 + self.state = 77 self.expression(30) pass elif la_ == 3: - self.state = 76 + self.state = 78 self.hashtagMatch() pass elif la_ == 4: - self.state = 77 + self.state = 79 self.hashtagWildcardMatch() pass elif la_ == 5: - self.state = 78 + self.state = 80 self.hashtagListMatch() pass elif la_ == 6: - self.state = 79 + self.state = 81 self.tagMatch() pass elif la_ == 7: - self.state = 80 + self.state = 82 self.tagWildcardMatch() pass elif la_ == 8: - self.state = 81 + self.state = 83 self.tagNotMatch() pass elif la_ == 9: - self.state = 82 + self.state = 84 self.tagNotWildcardMatch() pass elif la_ == 10: - self.state = 83 + self.state = 85 self.tagListMatch() pass elif la_ == 11: - self.state = 84 + self.state = 86 self.typeMatch() pass elif la_ == 12: - self.state = 85 + self.state = 87 self.idMatch() pass elif la_ == 13: - self.state = 86 + self.state = 88 self.typeIdMatch() pass elif la_ == 14: - self.state = 87 + self.state = 89 self.idRangeMatch() pass elif la_ == 15: - self.state = 88 + self.state = 90 self.idListMatch() pass elif la_ == 16: - self.state = 89 + self.state = 91 self.typeIdListMatch() pass elif la_ == 17: - self.state = 90 + self.state = 92 self.geometryMatch() pass elif la_ == 18: - self.state = 91 + self.state = 93 self.areaRangeMatch() pass elif la_ == 19: - self.state = 92 + self.state = 94 self.perimeterRangeMatch() pass elif la_ == 20: - self.state = 93 + self.state = 95 self.lengthRangeMatch() pass elif la_ == 21: - self.state = 94 + self.state = 96 self.geometryVerticesRangeMatch() pass elif la_ == 22: - self.state = 95 + self.state = 97 self.geometryOutersMatch() pass elif la_ == 23: - self.state = 96 + self.state = 98 self.geometryOutersRangeMatch() pass elif la_ == 24: - self.state = 97 + self.state = 99 self.geometryInnersMatch() pass elif la_ == 25: - self.state = 98 + self.state = 100 self.geometryInnersRangeMatch() pass elif la_ == 26: - self.state = 99 + self.state = 101 self.changesetMatch() pass elif la_ == 27: - self.state = 100 + self.state = 102 self.changesetListMatch() pass elif la_ == 28: - self.state = 101 + self.state = 103 self.changesetRangeMatch() pass elif la_ == 29: - self.state = 102 + self.state = 104 self.changesetCreatedByMatch() pass self._ctx.stop = self._input.LT(-1) - self.state = 113 + self.state = 115 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -613,37 +617,37 @@ def expression(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 111 + self.state = 113 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,2,self._ctx) if la_ == 1: localctx = OFLParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 105 + self.state = 107 if not self.precpred(self._ctx, 29): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 29)") - self.state = 106 + self.state = 108 self.match(OFLParser.AND) - self.state = 107 + self.state = 109 self.expression(30) pass elif la_ == 2: localctx = OFLParser.ExpressionContext(self, _parentctx, _parentState) self.pushNewRecursionContext(localctx, _startState, self.RULE_expression) - self.state = 108 + self.state = 110 if not self.precpred(self._ctx, 28): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 28)") - self.state = 109 + self.state = 111 self.match(OFLParser.OR) - self.state = 110 + self.state = 112 self.expression(29) pass - self.state = 115 + self.state = 117 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,3,self._ctx) @@ -690,11 +694,11 @@ def tagMatch(self): self.enterRule(localctx, 4, self.RULE_tagMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 116 + self.state = 118 self.string() - self.state = 117 + self.state = 119 self.match(OFLParser.T__2) - self.state = 118 + self.state = 120 self.string() except RecognitionException as re: localctx.exception = re @@ -739,11 +743,11 @@ def tagWildcardMatch(self): self.enterRule(localctx, 6, self.RULE_tagWildcardMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 120 + self.state = 122 self.string() - self.state = 121 + self.state = 123 self.match(OFLParser.T__2) - self.state = 122 + self.state = 124 self.match(OFLParser.WILDCARD) except RecognitionException as re: localctx.exception = re @@ -789,27 +793,27 @@ def tagListMatch(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 124 + self.state = 126 self.string() - self.state = 125 + self.state = 127 self.match(OFLParser.T__3) - self.state = 126 + self.state = 128 self.match(OFLParser.T__0) - self.state = 127 + self.state = 129 self.string() - self.state = 132 + self.state = 134 self._errHandler.sync(self) _la = self._input.LA(1) while _la==5: - self.state = 128 + self.state = 130 self.match(OFLParser.T__4) - self.state = 129 + self.state = 131 self.string() - self.state = 134 + self.state = 136 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 135 + self.state = 137 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -854,11 +858,11 @@ def tagNotMatch(self): self.enterRule(localctx, 10, self.RULE_tagNotMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 137 + self.state = 139 self.string() - self.state = 138 + self.state = 140 self.match(OFLParser.T__5) - self.state = 139 + self.state = 141 self.string() except RecognitionException as re: localctx.exception = re @@ -903,11 +907,11 @@ def tagNotWildcardMatch(self): self.enterRule(localctx, 12, self.RULE_tagNotWildcardMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 141 + self.state = 143 self.string() - self.state = 142 + self.state = 144 self.match(OFLParser.T__5) - self.state = 143 + self.state = 145 self.match(OFLParser.WILDCARD) except RecognitionException as re: localctx.exception = re @@ -952,11 +956,11 @@ def hashtagMatch(self): self.enterRule(localctx, 14, self.RULE_hashtagMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 145 + self.state = 147 self.match(OFLParser.HASHTAG) - self.state = 146 + self.state = 148 self.match(OFLParser.T__6) - self.state = 147 + self.state = 149 self.string() except RecognitionException as re: localctx.exception = re @@ -1003,13 +1007,13 @@ def hashtagWildcardMatch(self): self.enterRule(localctx, 16, self.RULE_hashtagWildcardMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 149 + self.state = 151 self.match(OFLParser.HASHTAG) - self.state = 150 + self.state = 152 self.match(OFLParser.T__6) - self.state = 151 + self.state = 153 self.match(OFLParser.WORD) - self.state = 152 + self.state = 154 self.match(OFLParser.WILDCARD) except RecognitionException as re: localctx.exception = re @@ -1058,27 +1062,27 @@ def hashtagListMatch(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 154 + self.state = 156 self.match(OFLParser.HASHTAG) - self.state = 155 + self.state = 157 self.match(OFLParser.T__6) - self.state = 156 + self.state = 158 self.match(OFLParser.T__0) - self.state = 157 + self.state = 159 self.string() - self.state = 162 + self.state = 164 self._errHandler.sync(self) _la = self._input.LA(1) while _la==5: - self.state = 158 + self.state = 160 self.match(OFLParser.T__4) - self.state = 159 + self.state = 161 self.string() - self.state = 164 + self.state = 166 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 165 + self.state = 167 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1122,11 +1126,11 @@ def typeMatch(self): self.enterRule(localctx, 20, self.RULE_typeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 167 + self.state = 169 self.match(OFLParser.TYPE) - self.state = 168 + self.state = 170 self.match(OFLParser.T__6) - self.state = 169 + self.state = 171 self.match(OFLParser.OSMTYPE) except RecognitionException as re: localctx.exception = re @@ -1170,11 +1174,11 @@ def idMatch(self): self.enterRule(localctx, 22, self.RULE_idMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 171 + self.state = 173 self.match(OFLParser.ID) - self.state = 172 + self.state = 174 self.match(OFLParser.T__6) - self.state = 173 + self.state = 175 self.match(OFLParser.NUMBER) except RecognitionException as re: localctx.exception = re @@ -1195,8 +1199,9 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def ID(self): return self.getToken(OFLParser.ID, 0) - def OSMID(self): - return self.getToken(OFLParser.OSMID, 0) + def osmid(self): + return self.getTypedRuleContext(OFLParser.OsmidContext,0) + def getRuleIndex(self): return OFLParser.RULE_typeIdMatch @@ -1218,12 +1223,12 @@ def typeIdMatch(self): self.enterRule(localctx, 24, self.RULE_typeIdMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 175 + self.state = 177 self.match(OFLParser.ID) - self.state = 176 + self.state = 178 self.match(OFLParser.T__6) - self.state = 177 - self.match(OFLParser.OSMID) + self.state = 179 + self.osmid() except RecognitionException as re: localctx.exception = re self._errHandler.reportError(self, re) @@ -1267,15 +1272,15 @@ def idRangeMatch(self): self.enterRule(localctx, 26, self.RULE_idRangeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 179 + self.state = 181 self.match(OFLParser.ID) - self.state = 180 + self.state = 182 self.match(OFLParser.T__6) - self.state = 181 + self.state = 183 self.match(OFLParser.T__0) - self.state = 182 + self.state = 184 self.range_int() - self.state = 183 + self.state = 185 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1323,27 +1328,27 @@ def idListMatch(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 185 + self.state = 187 self.match(OFLParser.ID) - self.state = 186 + self.state = 188 self.match(OFLParser.T__6) - self.state = 187 + self.state = 189 self.match(OFLParser.T__0) - self.state = 188 + self.state = 190 self.match(OFLParser.NUMBER) - self.state = 193 + self.state = 195 self._errHandler.sync(self) _la = self._input.LA(1) while _la==5: - self.state = 189 + self.state = 191 self.match(OFLParser.T__4) - self.state = 190 + self.state = 192 self.match(OFLParser.NUMBER) - self.state = 195 + self.state = 197 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 196 + self.state = 198 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1364,11 +1369,12 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def ID(self): return self.getToken(OFLParser.ID, 0) - def OSMID(self, i:int=None): + def osmid(self, i:int=None): if i is None: - return self.getTokens(OFLParser.OSMID) + return self.getTypedRuleContexts(OFLParser.OsmidContext) else: - return self.getToken(OFLParser.OSMID, i) + return self.getTypedRuleContext(OFLParser.OsmidContext,i) + def getRuleIndex(self): return OFLParser.RULE_typeIdListMatch @@ -1391,27 +1397,27 @@ def typeIdListMatch(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 198 + self.state = 200 self.match(OFLParser.ID) - self.state = 199 + self.state = 201 self.match(OFLParser.T__6) - self.state = 200 + self.state = 202 self.match(OFLParser.T__0) - self.state = 201 - self.match(OFLParser.OSMID) - self.state = 206 + self.state = 203 + self.osmid() + self.state = 208 self._errHandler.sync(self) _la = self._input.LA(1) while _la==5: - self.state = 202 + self.state = 204 self.match(OFLParser.T__4) - self.state = 203 - self.match(OFLParser.OSMID) - self.state = 208 + self.state = 205 + self.osmid() + self.state = 210 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 209 + self.state = 211 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1422,6 +1428,56 @@ def typeIdListMatch(self): return localctx + class OsmidContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OSMID(self): + return self.getToken(OFLParser.OSMID, 0) + + def SHORT_OSMID(self): + return self.getToken(OFLParser.SHORT_OSMID, 0) + + def getRuleIndex(self): + return OFLParser.RULE_osmid + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOsmid" ): + listener.enterOsmid(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOsmid" ): + listener.exitOsmid(self) + + + + + def osmid(self): + + localctx = OFLParser.OsmidContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_osmid) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 213 + _la = self._input.LA(1) + if not(_la==27 or _la==28): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class GeometryMatchContext(ParserRuleContext): __slots__ = 'parser' @@ -1452,14 +1508,14 @@ def exitRule(self, listener:ParseTreeListener): def geometryMatch(self): localctx = OFLParser.GeometryMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 32, self.RULE_geometryMatch) + self.enterRule(localctx, 34, self.RULE_geometryMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 211 + self.state = 215 self.match(OFLParser.GEOMETRY) - self.state = 212 + self.state = 216 self.match(OFLParser.T__6) - self.state = 213 + self.state = 217 self.match(OFLParser.GEOMETRY_TYPE) except RecognitionException as re: localctx.exception = re @@ -1501,18 +1557,18 @@ def exitRule(self, listener:ParseTreeListener): def areaRangeMatch(self): localctx = OFLParser.AreaRangeMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 34, self.RULE_areaRangeMatch) + self.enterRule(localctx, 36, self.RULE_areaRangeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 215 + self.state = 219 self.match(OFLParser.AREA) - self.state = 216 + self.state = 220 self.match(OFLParser.T__6) - self.state = 217 + self.state = 221 self.match(OFLParser.T__0) - self.state = 218 + self.state = 222 self.range_dec() - self.state = 219 + self.state = 223 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1554,18 +1610,18 @@ def exitRule(self, listener:ParseTreeListener): def perimeterRangeMatch(self): localctx = OFLParser.PerimeterRangeMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 36, self.RULE_perimeterRangeMatch) + self.enterRule(localctx, 38, self.RULE_perimeterRangeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 221 + self.state = 225 self.match(OFLParser.PERIMETER) - self.state = 222 + self.state = 226 self.match(OFLParser.T__6) - self.state = 223 + self.state = 227 self.match(OFLParser.T__0) - self.state = 224 + self.state = 228 self.range_dec() - self.state = 225 + self.state = 229 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1607,18 +1663,18 @@ def exitRule(self, listener:ParseTreeListener): def lengthRangeMatch(self): localctx = OFLParser.LengthRangeMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 38, self.RULE_lengthRangeMatch) + self.enterRule(localctx, 40, self.RULE_lengthRangeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 227 + self.state = 231 self.match(OFLParser.LENGTH) - self.state = 228 + self.state = 232 self.match(OFLParser.T__6) - self.state = 229 + self.state = 233 self.match(OFLParser.T__0) - self.state = 230 + self.state = 234 self.range_dec() - self.state = 231 + self.state = 235 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1660,18 +1716,18 @@ def exitRule(self, listener:ParseTreeListener): def geometryVerticesRangeMatch(self): localctx = OFLParser.GeometryVerticesRangeMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 40, self.RULE_geometryVerticesRangeMatch) + self.enterRule(localctx, 42, self.RULE_geometryVerticesRangeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 233 + self.state = 237 self.match(OFLParser.GEOMETRY_VERTICES) - self.state = 234 + self.state = 238 self.match(OFLParser.T__6) - self.state = 235 + self.state = 239 self.match(OFLParser.T__0) - self.state = 236 + self.state = 240 self.range_int() - self.state = 237 + self.state = 241 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1712,14 +1768,14 @@ def exitRule(self, listener:ParseTreeListener): def geometryOutersMatch(self): localctx = OFLParser.GeometryOutersMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 42, self.RULE_geometryOutersMatch) + self.enterRule(localctx, 44, self.RULE_geometryOutersMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 239 + self.state = 243 self.match(OFLParser.GEOMETRY_OUTERS) - self.state = 240 + self.state = 244 self.match(OFLParser.T__6) - self.state = 241 + self.state = 245 self.match(OFLParser.NUMBER) except RecognitionException as re: localctx.exception = re @@ -1761,18 +1817,18 @@ def exitRule(self, listener:ParseTreeListener): def geometryOutersRangeMatch(self): localctx = OFLParser.GeometryOutersRangeMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 44, self.RULE_geometryOutersRangeMatch) + self.enterRule(localctx, 46, self.RULE_geometryOutersRangeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 243 + self.state = 247 self.match(OFLParser.GEOMETRY_OUTERS) - self.state = 244 + self.state = 248 self.match(OFLParser.T__6) - self.state = 245 + self.state = 249 self.match(OFLParser.T__0) - self.state = 246 + self.state = 250 self.range_int() - self.state = 247 + self.state = 251 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1813,14 +1869,14 @@ def exitRule(self, listener:ParseTreeListener): def geometryInnersMatch(self): localctx = OFLParser.GeometryInnersMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 46, self.RULE_geometryInnersMatch) + self.enterRule(localctx, 48, self.RULE_geometryInnersMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 249 + self.state = 253 self.match(OFLParser.GEOMETRY_INNERS) - self.state = 250 + self.state = 254 self.match(OFLParser.T__6) - self.state = 251 + self.state = 255 self.match(OFLParser.NUMBER) except RecognitionException as re: localctx.exception = re @@ -1862,18 +1918,18 @@ def exitRule(self, listener:ParseTreeListener): def geometryInnersRangeMatch(self): localctx = OFLParser.GeometryInnersRangeMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 48, self.RULE_geometryInnersRangeMatch) + self.enterRule(localctx, 50, self.RULE_geometryInnersRangeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 253 + self.state = 257 self.match(OFLParser.GEOMETRY_INNERS) - self.state = 254 + self.state = 258 self.match(OFLParser.T__6) - self.state = 255 + self.state = 259 self.match(OFLParser.T__0) - self.state = 256 + self.state = 260 self.range_int() - self.state = 257 + self.state = 261 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -1914,14 +1970,14 @@ def exitRule(self, listener:ParseTreeListener): def changesetMatch(self): localctx = OFLParser.ChangesetMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 50, self.RULE_changesetMatch) + self.enterRule(localctx, 52, self.RULE_changesetMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 259 + self.state = 263 self.match(OFLParser.CHANGESET) - self.state = 260 + self.state = 264 self.match(OFLParser.T__6) - self.state = 261 + self.state = 265 self.match(OFLParser.NUMBER) except RecognitionException as re: localctx.exception = re @@ -1965,31 +2021,31 @@ def exitRule(self, listener:ParseTreeListener): def changesetListMatch(self): localctx = OFLParser.ChangesetListMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 52, self.RULE_changesetListMatch) + self.enterRule(localctx, 54, self.RULE_changesetListMatch) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 263 + self.state = 267 self.match(OFLParser.CHANGESET) - self.state = 264 + self.state = 268 self.match(OFLParser.T__6) - self.state = 265 + self.state = 269 self.match(OFLParser.T__0) - self.state = 266 + self.state = 270 self.match(OFLParser.NUMBER) - self.state = 271 + self.state = 275 self._errHandler.sync(self) _la = self._input.LA(1) while _la==5: - self.state = 267 + self.state = 271 self.match(OFLParser.T__4) - self.state = 268 + self.state = 272 self.match(OFLParser.NUMBER) - self.state = 273 + self.state = 277 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 274 + self.state = 278 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2031,18 +2087,18 @@ def exitRule(self, listener:ParseTreeListener): def changesetRangeMatch(self): localctx = OFLParser.ChangesetRangeMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 54, self.RULE_changesetRangeMatch) + self.enterRule(localctx, 56, self.RULE_changesetRangeMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 276 + self.state = 280 self.match(OFLParser.CHANGESET) - self.state = 277 + self.state = 281 self.match(OFLParser.T__6) - self.state = 278 + self.state = 282 self.match(OFLParser.T__0) - self.state = 279 + self.state = 283 self.range_int() - self.state = 280 + self.state = 284 self.match(OFLParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2084,14 +2140,14 @@ def exitRule(self, listener:ParseTreeListener): def changesetCreatedByMatch(self): localctx = OFLParser.ChangesetCreatedByMatchContext(self, self._ctx, self.state) - self.enterRule(localctx, 56, self.RULE_changesetCreatedByMatch) + self.enterRule(localctx, 58, self.RULE_changesetCreatedByMatch) try: self.enterOuterAlt(localctx, 1) - self.state = 282 + self.state = 286 self.match(OFLParser.CHANGESET_CREATEDBY) - self.state = 283 + self.state = 287 self.match(OFLParser.T__6) - self.state = 284 + self.state = 288 self.string() except RecognitionException as re: localctx.exception = re @@ -2240,117 +2296,117 @@ def exitRule(self, listener:ParseTreeListener): def string(self): localctx = OFLParser.StringContext(self, self._ctx, self.state) - self.enterRule(localctx, 58, self.RULE_string) + self.enterRule(localctx, 60, self.RULE_string) self._la = 0 # Token type try: - self.state = 313 + self.state = 317 self._errHandler.sync(self) token = self._input.LA(1) - if token in [31]: + if token in [33]: self.enterOuterAlt(localctx, 1) - self.state = 286 + self.state = 290 self.match(OFLParser.QUOTED) pass - elif token in [28]: + elif token in [30]: self.enterOuterAlt(localctx, 2) - self.state = 287 + self.state = 291 self.match(OFLParser.NUMBER) pass - elif token in [9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 30]: + elif token in [9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29, 32]: self.enterOuterAlt(localctx, 3) - self.state = 288 + self.state = 292 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 1275063808) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4898942464) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 310 + self.state = 314 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,10,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 308 + self.state = 312 self._errHandler.sync(self) token = self._input.LA(1) if token in [7]: - self.state = 289 + self.state = 293 self.match(OFLParser.T__6) - self.state = 290 + self.state = 294 self.match(OFLParser.WORD) pass elif token in [9]: - self.state = 291 + self.state = 295 self.match(OFLParser.AND) pass elif token in [10]: - self.state = 292 + self.state = 296 self.match(OFLParser.OR) pass elif token in [11]: - self.state = 293 + self.state = 297 self.match(OFLParser.NOT) pass elif token in [13]: - self.state = 294 + self.state = 298 self.match(OFLParser.TYPE) pass elif token in [14]: - self.state = 295 + self.state = 299 self.match(OFLParser.ID) pass elif token in [15]: - self.state = 296 + self.state = 300 self.match(OFLParser.GEOMETRY) pass elif token in [16]: - self.state = 297 + self.state = 301 self.match(OFLParser.AREA) pass elif token in [17]: - self.state = 298 + self.state = 302 self.match(OFLParser.PERIMETER) pass elif token in [18]: - self.state = 299 + self.state = 303 self.match(OFLParser.LENGTH) pass elif token in [19]: - self.state = 300 + self.state = 304 self.match(OFLParser.GEOMETRY_VERTICES) pass elif token in [20]: - self.state = 301 + self.state = 305 self.match(OFLParser.GEOMETRY_OUTERS) pass elif token in [21]: - self.state = 302 + self.state = 306 self.match(OFLParser.GEOMETRY_INNERS) pass elif token in [22]: - self.state = 303 + self.state = 307 self.match(OFLParser.CHANGESET) pass elif token in [23]: - self.state = 304 + self.state = 308 self.match(OFLParser.CHANGESET_CREATEDBY) pass elif token in [24]: - self.state = 305 + self.state = 309 self.match(OFLParser.HASHTAG) pass elif token in [25]: - self.state = 306 + self.state = 310 self.match(OFLParser.OSMTYPE) pass - elif token in [27]: - self.state = 307 + elif token in [29]: + self.state = 311 self.match(OFLParser.GEOMETRY_TYPE) pass else: raise NoViableAltException(self) - self.state = 312 + self.state = 316 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,10,self._ctx) @@ -2397,34 +2453,34 @@ def exitRule(self, listener:ParseTreeListener): def range_int(self): localctx = OFLParser.Range_intContext(self, self._ctx, self.state) - self.enterRule(localctx, 60, self.RULE_range_int) + self.enterRule(localctx, 62, self.RULE_range_int) try: - self.state = 322 + self.state = 326 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,12,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 315 + self.state = 319 self.match(OFLParser.NUMBER) - self.state = 316 + self.state = 320 self.match(OFLParser.T__7) - self.state = 317 + self.state = 321 self.match(OFLParser.NUMBER) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 318 + self.state = 322 self.match(OFLParser.T__7) - self.state = 319 + self.state = 323 self.match(OFLParser.NUMBER) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 320 + self.state = 324 self.match(OFLParser.NUMBER) - self.state = 321 + self.state = 325 self.match(OFLParser.T__7) pass @@ -2474,26 +2530,26 @@ def exitRule(self, listener:ParseTreeListener): def range_dec(self): localctx = OFLParser.Range_decContext(self, self._ctx, self.state) - self.enterRule(localctx, 62, self.RULE_range_dec) + self.enterRule(localctx, 64, self.RULE_range_dec) self._la = 0 # Token type try: - self.state = 331 + self.state = 335 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,13,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 324 + self.state = 328 _la = self._input.LA(1) - if not(_la==28 or _la==29): + if not(_la==30 or _la==31): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 325 + self.state = 329 self.match(OFLParser.T__7) - self.state = 326 + self.state = 330 _la = self._input.LA(1) - if not(_la==28 or _la==29): + if not(_la==30 or _la==31): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2502,11 +2558,11 @@ def range_dec(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 327 + self.state = 331 self.match(OFLParser.T__7) - self.state = 328 + self.state = 332 _la = self._input.LA(1) - if not(_la==28 or _la==29): + if not(_la==30 or _la==31): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -2515,14 +2571,14 @@ def range_dec(self): elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 329 + self.state = 333 _la = self._input.LA(1) - if not(_la==28 or _la==29): + if not(_la==30 or _la==31): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 330 + self.state = 334 self.match(OFLParser.T__7) pass diff --git a/ohsome_filter_to_sql/main.py b/ohsome_filter_to_sql/main.py index 8e3cc62..dd63714 100644 --- a/ohsome_filter_to_sql/main.py +++ b/ohsome_filter_to_sql/main.py @@ -1,6 +1,7 @@ import json import sys from collections import deque +from typing import Any from antlr4 import CommonTokenStream, InputStream, ParserRuleContext, ParseTreeWalker from antlr4.error.ErrorListener import ErrorListener @@ -133,7 +134,8 @@ def exitIdMatch(self, ctx: ParserRuleContext): self.stack.append(f"osm_id = {id}") def exitTypeIdMatch(self, ctx: ParserRuleContext): - type_, id = ctx.getChild(2).getText().split("/") + matched_text = ctx.getChild(2).getText() + id, type_ = handle_short_hand_or_normal_osm_id(matched_text) self.stack.append(f"(osm_type = '{type_}' AND osm_id = {id})") def exitIdRangeMatch(self, ctx: ParserRuleContext): @@ -167,7 +169,7 @@ def exitTypeIdListMatch(self, ctx: ParserRuleContext): # skip comma in list in between brackets if child == ",": continue - type_, id = child.split("/") + id, type_ = handle_short_hand_or_normal_osm_id(child) values.append(f"(osm_id = {id} AND osm_type = '{type_}')") if len(values) > 1: values_as_string = "(" + " OR ".join(values) + ")" @@ -278,6 +280,16 @@ def unescape(string: str): return string +def handle_short_hand_or_normal_osm_id(matched_text: str) -> tuple[str, int]: + matched_text = matched_text.replace("(", "").replace(")", "") + if "/" in matched_text: + type_, id = matched_text.split("/") + else: + type_short_mapping = {"n": "node", "w": "way", "r": "relation"} + type_ = type_short_mapping[matched_text[0]] + id = matched_text[1:] + return id, type_ + def ohsome_filter_to_sql(filter: str) -> str: listener = OFLToSql() tree = build_tree(filter) diff --git a/tests/approved/test_main.py--test_build_tree[120394598].approved.txt b/tests/approved/test_main.py--test_build_tree[120394598].approved.txt index a94e586..c8bd6b7 100644 --- a/tests/approved/test_main.py--test_build_tree[120394598].approved.txt +++ b/tests/approved/test_main.py--test_build_tree[120394598].approved.txt @@ -1 +1 @@ -([] ([64] ([2 64] ([84 2 64] type : node)) and ([107 64] ([79 107 64] ([116 79 107 64] natural) = ([118 79 107 64] tree)))) ) +([] ([66] ([2 66] ([86 2 66] type : node)) and ([109 66] ([81 109 66] ([118 81 109 66] natural) = ([120 81 109 66] tree)))) ) diff --git a/tests/approved/test_main.py--test_build_tree[3829097196].approved.txt b/tests/approved/test_main.py--test_build_tree[3829097196].approved.txt index 5983ae4..800a3c7 100644 --- a/tests/approved/test_main.py--test_build_tree[3829097196].approved.txt +++ b/tests/approved/test_main.py--test_build_tree[3829097196].approved.txt @@ -1 +1 @@ -([] ([64] ([2 64] ([89 2 64] id : ( node/1 , way/2 ))) and ([107 64] ([84 107 64] type : way))) ) +([] ([66] ([2 66] ([91 2 66] id : ( ([203 91 2 66] node/1) , ([205 91 2 66] way/2) ))) and ([109 66] ([86 109 66] type : way))) ) diff --git a/tests/approved/test_main.py--test_build_tree[489910419].approved.txt b/tests/approved/test_main.py--test_build_tree[489910419].approved.txt index 60006b2..df7b8a6 100644 --- a/tests/approved/test_main.py--test_build_tree[489910419].approved.txt +++ b/tests/approved/test_main.py--test_build_tree[489910419].approved.txt @@ -1 +1 @@ -([] ([64] ([79 64] ([116 79 64] natural) = ([118 79 64] tree))) ) +([] ([66] ([81 66] ([118 81 66] natural) = ([120 81 66] tree))) ) diff --git a/tests/approved/test_main.py--test_short_type_id_list_match[1296904949].approved.txt b/tests/approved/test_main.py--test_short_type_id_list_match[1296904949].approved.txt new file mode 100644 index 0000000..6ba8d28 --- /dev/null +++ b/tests/approved/test_main.py--test_short_type_id_list_match[1296904949].approved.txt @@ -0,0 +1,5 @@ +id:n4540889804 + +(osm_type = 'node' AND osm_id = 4540889804) + +[] diff --git a/tests/approved/test_main.py--test_short_type_id_list_match[1336911958].approved.txt b/tests/approved/test_main.py--test_short_type_id_list_match[1336911958].approved.txt new file mode 100644 index 0000000..d46fe49 --- /dev/null +++ b/tests/approved/test_main.py--test_short_type_id_list_match[1336911958].approved.txt @@ -0,0 +1,5 @@ +id:(r4540889804) + +(osm_id = 4540889804 AND osm_type = 'relation') + +[] diff --git a/tests/approved/test_main.py--test_short_type_id_list_match[2566310075].approved.txt b/tests/approved/test_main.py--test_short_type_id_list_match[2566310075].approved.txt new file mode 100644 index 0000000..18b29c5 --- /dev/null +++ b/tests/approved/test_main.py--test_short_type_id_list_match[2566310075].approved.txt @@ -0,0 +1,5 @@ +id:w4540889804 + +(osm_type = 'way' AND osm_id = 4540889804) + +[] diff --git a/tests/approved/test_main.py--test_short_type_id_list_match[3919668473].approved.txt b/tests/approved/test_main.py--test_short_type_id_list_match[3919668473].approved.txt new file mode 100644 index 0000000..2276a93 --- /dev/null +++ b/tests/approved/test_main.py--test_short_type_id_list_match[3919668473].approved.txt @@ -0,0 +1,5 @@ +id:r4540889804 + +(osm_type = 'relation' AND osm_id = 4540889804) + +[] diff --git a/tests/approved/test_main.py--test_type_id_list_match_invalid[3559956843].approved.txt b/tests/approved/test_main.py--test_type_id_list_match_invalid[3559956843].approved.txt index f88d503..70544a2 100644 --- a/tests/approved/test_main.py--test_type_id_list_match_invalid[3559956843].approved.txt +++ b/tests/approved/test_main.py--test_type_id_list_match_invalid[3559956843].approved.txt @@ -1,3 +1,3 @@ id:(node/4540889804, way/1136431018, ) -line 1:37 missing OSMID at ')' +line 1:37 missing {OSMID, SHORT_OSMID} at ')' diff --git a/tests/cassettes/test_main.py--test_short_type_id_list_match.cassette.json b/tests/cassettes/test_main.py--test_short_type_id_list_match.cassette.json new file mode 100644 index 0000000..8cfd7c7 --- /dev/null +++ b/tests/cassettes/test_main.py--test_short_type_id_list_match.cassette.json @@ -0,0 +1 @@ +{"2299538076": {"results": [{"count": 0}], "query": "SELECT COUNT(*) FROM contributions WHERE (osm_id = 4540889804 AND osm_type = 'relation')", "args": [], "limit": 0, "timeout": null, "record_class": null}, "3010097021": {"results": [{"count": 0}], "query": "SELECT COUNT(*) FROM contributions WHERE (osm_type = 'relation' AND osm_id = 4540889804)", "args": [], "limit": 0, "timeout": null, "record_class": null}, "3569995583": {"results": [{"count": 0}], "query": "SELECT COUNT(*) FROM contributions WHERE (osm_type = 'way' AND osm_id = 4540889804)", "args": [], "limit": 0, "timeout": null, "record_class": null}, "2392719313": {"results": [{"count": 8}], "query": "SELECT COUNT(*) FROM contributions WHERE (osm_type = 'node' AND osm_id = 4540889804)", "args": [], "limit": 0, "timeout": null, "record_class": null}} \ No newline at end of file diff --git a/tests/cassettes/test_main.py--test_shorthand_osm_type_comparison.cassette.json b/tests/cassettes/test_main.py--test_shorthand_osm_type_comparison.cassette.json new file mode 100644 index 0000000..d287359 --- /dev/null +++ b/tests/cassettes/test_main.py--test_shorthand_osm_type_comparison.cassette.json @@ -0,0 +1 @@ +{"2299538076": {"results": [{"count": 0}], "query": "SELECT COUNT(*) FROM contributions WHERE (osm_id = 4540889804 AND osm_type = 'relation')", "args": [], "limit": 0, "timeout": null, "record_class": null}, "437655465": {"results": [{"count": 0}], "query": "SELECT COUNT(*) FROM contributions WHERE (osm_id = 4540889804 AND osm_type = 'way')", "args": [], "limit": 0, "timeout": null, "record_class": null}, "2355357960": {"results": [{"count": 8}], "query": "SELECT COUNT(*) FROM contributions WHERE (osm_id = 4540889804 AND osm_type = 'node')", "args": [], "limit": 0, "timeout": null, "record_class": null}} \ No newline at end of file diff --git a/tests/test_main.py b/tests/test_main.py index 2ad6253..766f328 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -423,6 +423,21 @@ async def test_type_id_list_match_invalid(filter): verify(filter + "\n\n" + str(e.value)) +@pytest.mark.parametrize( + "filter", + ( + "id:n4540889804", + "id:w4540889804", + "id:r4540889804", + "id:(r4540889804)", + ), +) +@asyncpg_recorder.use_cassette +async def test_short_type_id_list_match(db_con, filter): + sql = ohsome_filter_to_sql(filter) + assert await validate_and_verify(db_con, sql, filter) + + @pytest.mark.parametrize( "filter", ( @@ -667,3 +682,21 @@ async def test_climate_action_navigator_examples(db_con, filter): async def test_strings(str, out): assert unescape(str) == out # fmt: on + +@pytest.mark.parametrize( + "filters", + ( + ("id:(node/4540889804)", "id:(n4540889804)"), + ("id:(way/4540889804)", "id:(w4540889804)"), + ("id:(relation/4540889804)", "id:(r4540889804)"), + ), +) +@asyncpg_recorder.use_cassette +async def test_shorthand_osm_type_comparison(db_con, filters): + sql_where_clause_1 = ohsome_filter_to_sql(filters[0]) + sql_where_clause_2 = ohsome_filter_to_sql(filters[1]) + sql_1 = "SELECT COUNT(*) FROM contributions WHERE " + sql_where_clause_1 + sql_2 = "SELECT COUNT(*) FROM contributions WHERE " + sql_where_clause_2 + results_1: list[Record] = await db_con.fetch(sql_1) + results_2: list[Record] = await db_con.fetch(sql_2) + assert results_1 == results_2