{"id":36440647,"url":"https://github.com/mloncode/uast2pl","last_synced_at":"2026-01-11T21:56:40.181Z","repository":{"id":57500418,"uuid":"213343935","full_name":"mloncode/uast2pl","owner":"mloncode","description":"Universal Abstract Syntax Tree to Prolog","archived":false,"fork":false,"pushed_at":"2022-05-14T10:04:40.000Z","size":493,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-10-01T05:24:58.355Z","etag":null,"topics":["bblfsh","prolog","syntax-tree","transpiler","uast"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mloncode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-07T09:31:23.000Z","updated_at":"2025-06-22T16:20:03.000Z","dependencies_parsed_at":"2022-08-30T20:51:23.906Z","dependency_job_id":null,"html_url":"https://github.com/mloncode/uast2pl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mloncode/uast2pl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloncode%2Fuast2pl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloncode%2Fuast2pl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloncode%2Fuast2pl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloncode%2Fuast2pl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mloncode","download_url":"https://codeload.github.com/mloncode/uast2pl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mloncode%2Fuast2pl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28324543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T18:42:50.174Z","status":"ssl_error","status_checked_at":"2026-01-11T18:39:13.842Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bblfsh","prolog","syntax-tree","transpiler","uast"],"created_at":"2026-01-11T21:56:39.409Z","updated_at":"2026-01-11T21:56:40.167Z","avatar_url":"https://github.com/mloncode.png","language":"Go","readme":" \u003cimg src=\"logo.png\" name=\"logo\" width=\"200\" /\u003e\n\n\n\n# uast2pl\nis kind of [Universal Abstract Syntax Tree](https://doc.bblf.sh/uast/uast-specification-v2.html) to Prolog transpiler.\n\n\u003cimg src=\"workflow.png\" name=\"workflow\" /\u003e\n\nIt takes *UAST* node as an input and tries to produce equivalent prolog program.\n\n### Tools\n- `./uast2pl -f input-source.file [-f input-source.file2 -f ...] [-o output-prolog.file] [-s babelfish-server]`.\n\nTransforms source code into _uast_ (thanks to babelfish) and next transforms _uast_ into a prolog representation.\n```\ngo build ./cmd/uast2pl\n\n./uast2pl --help\nUsage of ./uast2pl:\n  -f value\n    \tlist of input source files\n  -o string\n    \toutput file (by default stdio)\n  -s string\n    \taddress:port of babelfish server (default \"localhost:9432\")\n```\n\n- `./qpl -f input-prolog.file [-f input-prolog.file2 -f ...] [-o output.file]  -q \"query(Var).\"`.\n\nEmbedded [_wam_](https://en.wikipedia.org/wiki/Warren_Abstract_Machine) lets query prolog DB.\n```\ngo build ./cmd/qpl/\n\n./qpl --help\nUsage of ./qpl:\n  -f value\n    \tlist of input prolog files\n  -q string\n    \tprolog query\n  -o string\n    \toutput file (by default stdio)\n```\n\n### Example (extract function name and arguments)\nFor a given `examples/python/fib.py` file:\n```python\ndef fib(n, a = 0, b = 1):\n    if n == 0:\n        return a\n    if n == 1:\n        return b\n    return fib(n - 1, b, a + b);\n```\n\n\u003cdetails\u003e\n\u003csummary\u003ewe get following UAST\u003c/summary\u003e\n\u003cp\u003e\n\n```\n{ '@type': \"python:Module\",\n   '@role': [File, Module],\n   '@pos': { '@type': \"uast:Positions\",\n   },\n   body: [\n      { '@type': \"uast:FunctionGroup\",\n         '@pos': { '@type': \"uast:Positions\",\n            start: { '@type': \"uast:Position\",\n               offset: 4,\n               line: 1,\n               col: 5,\n            },\n            end: { '@type': \"uast:Position\",\n               offset: 7,\n               line: 1,\n               col: 8,\n            },\n         },\n         Nodes: [\n            {\n               async: false,\n               comments: {},\n               decorators: [],\n            },\n            { '@type': \"uast:Alias\",\n               Name: { '@type': \"uast:Identifier\",\n                  Name: \"fib\",\n               },\n               Node: { '@type': \"uast:Function\",\n                  Body: { '@type': \"uast:Block\",\n                     Statements: [\n                        { '@type': \"python:If\",\n                           '@token': \"if\",\n                           '@role': [Expression, If],\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 30,\n                                 line: 2,\n                                 col: 5,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 32,\n                                 line: 2,\n                                 col: 7,\n                              },\n                           },\n                           body: { '@type': \"python:If.body\",\n                              '@role': [Body, If, Then],\n                              'body_stmts': [\n                                 { '@type': \"python:Return\",\n                                    '@token': \"return\",\n                                    '@role': [Return, Statement],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 49,\n                                          line: 3,\n                                          col: 9,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 55,\n                                          line: 3,\n                                          col: 15,\n                                       },\n                                    },\n                                    value: { '@type': \"python:BoxedName\",\n                                       '@role': [Unannotated],\n                                       'boxed_value': { '@type': \"uast:Identifier\",\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 56,\n                                                line: 3,\n                                                col: 16,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 57,\n                                                line: 3,\n                                                col: 17,\n                                             },\n                                          },\n                                          Name: \"a\",\n                                       },\n                                       ctx: \"Load\",\n                                    },\n                                 },\n                              ],\n                           },\n                           orelse: { '@type': \"python:If.orelse\",\n                              '@token': \"else\",\n                              '@role': [Body, Else, If],\n                              'else_stmts': [],\n                           },\n                           test: { '@type': \"python:Compare\",\n                              '@role': [Binary, Condition, Expression, If],\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 33,\n                                    line: 2,\n                                    col: 8,\n                                 },\n                              },\n                              comparators: { '@type': \"python:Compare.comparators\",\n                                 '@role': [Expression, Right],\n                                 comparators: [\n                                    { '@type': \"python:Num\",\n                                       '@token': 0,\n                                       '@role': [Expression, Literal, Number, Primitive],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 38,\n                                             line: 2,\n                                             col: 13,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 39,\n                                             line: 2,\n                                             col: 14,\n                                          },\n                                       },\n                                    },\n                                 ],\n                              },\n                              left: { '@type': \"python:BoxedName\",\n                                 '@role': [Expression, Left],\n                                 'boxed_value': { '@type': \"uast:Identifier\",\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 33,\n                                          line: 2,\n                                          col: 8,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 34,\n                                          line: 2,\n                                          col: 9,\n                                       },\n                                    },\n                                    Name: \"n\",\n                                 },\n                                 ctx: \"Load\",\n                              },\n                              ops: { '@type': \"python:Compare.ops\",\n                                 '@role': [Expression],\n                                 ops: [\n                                    { '@type': \"python:Eq\",\n                                       '@token': \"==\",\n                                       '@role': [Equal, Operator, Relational],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                       },\n                                    },\n                                 ],\n                              },\n                           },\n                        },\n                        { '@type': \"python:If\",\n                           '@token': \"if\",\n                           '@role': [Expression, If],\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 62,\n                                 line: 4,\n                                 col: 5,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 64,\n                                 line: 4,\n                                 col: 7,\n                              },\n                           },\n                           body: { '@type': \"python:If.body\",\n                              '@role': [Body, If, Then],\n                              'body_stmts': [\n                                 { '@type': \"python:Return\",\n                                    '@token': \"return\",\n                                    '@role': [Return, Statement],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 81,\n                                          line: 5,\n                                          col: 9,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 87,\n                                          line: 5,\n                                          col: 15,\n                                       },\n                                    },\n                                    value: { '@type': \"python:BoxedName\",\n                                       '@role': [Unannotated],\n                                       'boxed_value': { '@type': \"uast:Identifier\",\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 88,\n                                                line: 5,\n                                                col: 16,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 89,\n                                                line: 5,\n                                                col: 17,\n                                             },\n                                          },\n                                          Name: \"b\",\n                                       },\n                                       ctx: \"Load\",\n                                    },\n                                 },\n                              ],\n                           },\n                           orelse: { '@type': \"python:If.orelse\",\n                              '@token': \"else\",\n                              '@role': [Body, Else, If],\n                              'else_stmts': [],\n                           },\n                           test: { '@type': \"python:Compare\",\n                              '@role': [Binary, Condition, Expression, If],\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 65,\n                                    line: 4,\n                                    col: 8,\n                                 },\n                              },\n                              comparators: { '@type': \"python:Compare.comparators\",\n                                 '@role': [Expression, Right],\n                                 comparators: [\n                                    { '@type': \"python:Num\",\n                                       '@token': 1,\n                                       '@role': [Expression, Literal, Number, Primitive],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 70,\n                                             line: 4,\n                                             col: 13,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 71,\n                                             line: 4,\n                                             col: 14,\n                                          },\n                                       },\n                                    },\n                                 ],\n                              },\n                              left: { '@type': \"python:BoxedName\",\n                                 '@role': [Expression, Left],\n                                 'boxed_value': { '@type': \"uast:Identifier\",\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 65,\n                                          line: 4,\n                                          col: 8,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 66,\n                                          line: 4,\n                                          col: 9,\n                                       },\n                                    },\n                                    Name: \"n\",\n                                 },\n                                 ctx: \"Load\",\n                              },\n                              ops: { '@type': \"python:Compare.ops\",\n                                 '@role': [Expression],\n                                 ops: [\n                                    { '@type': \"python:Eq\",\n                                       '@token': \"==\",\n                                       '@role': [Equal, Operator, Relational],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                       },\n                                    },\n                                 ],\n                              },\n                           },\n                        },\n                        { '@type': \"python:Return\",\n                           '@token': \"return\",\n                           '@role': [Return, Statement],\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 94,\n                                 line: 6,\n                                 col: 5,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 100,\n                                 line: 6,\n                                 col: 11,\n                              },\n                           },\n                           value: { '@type': \"python:Call\",\n                              '@role': [Call, Expression, Function],\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 101,\n                                    line: 6,\n                                    col: 12,\n                                 },\n                              },\n                              args: [\n                                 { '@type': \"python:BinOp\",\n                                    '@role': [Argument, Binary, Call, Expression, Function, Name, Positional],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 105,\n                                          line: 6,\n                                          col: 16,\n                                       },\n                                    },\n                                    left: { '@type': \"python:BoxedName\",\n                                       '@role': [Binary, Expression, Left],\n                                       'boxed_value': { '@type': \"uast:Identifier\",\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 105,\n                                                line: 6,\n                                                col: 16,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 106,\n                                                line: 6,\n                                                col: 17,\n                                             },\n                                          },\n                                          Name: \"n\",\n                                       },\n                                       ctx: \"Load\",\n                                    },\n                                    op: { '@type': \"python:Sub\",\n                                       '@token': \"-\",\n                                       '@role': [Arithmetic, Binary, Operator, Substract],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                       },\n                                    },\n                                    right: { '@type': \"python:Num\",\n                                       '@token': 1,\n                                       '@role': [Binary, Expression, Literal, Number, Primitive, Right],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 109,\n                                             line: 6,\n                                             col: 20,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 110,\n                                             line: 6,\n                                             col: 21,\n                                          },\n                                       },\n                                    },\n                                 },\n                                 { '@type': \"python:BoxedName\",\n                                    '@role': [Argument, Call, Function, Name, Positional],\n                                    'boxed_value': { '@type': \"uast:Identifier\",\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 112,\n                                             line: 6,\n                                             col: 23,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 113,\n                                             line: 6,\n                                             col: 24,\n                                          },\n                                       },\n                                       Name: \"b\",\n                                    },\n                                    ctx: \"Load\",\n                                 },\n                                 { '@type': \"python:BinOp\",\n                                    '@role': [Argument, Binary, Call, Expression, Function, Name, Positional],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 115,\n                                          line: 6,\n                                          col: 26,\n                                       },\n                                    },\n                                    left: { '@type': \"python:BoxedName\",\n                                       '@role': [Binary, Expression, Left],\n                                       'boxed_value': { '@type': \"uast:Identifier\",\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 115,\n                                                line: 6,\n                                                col: 26,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 116,\n                                                line: 6,\n                                                col: 27,\n                                             },\n                                          },\n                                          Name: \"a\",\n                                       },\n                                       ctx: \"Load\",\n                                    },\n                                    op: { '@type': \"python:Add\",\n                                       '@token': \"+\",\n                                       '@role': [Add, Arithmetic, Binary, Operator],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                       },\n                                    },\n                                    right: { '@type': \"python:BoxedName\",\n                                       '@role': [Binary, Expression, Right],\n                                       'boxed_value': { '@type': \"uast:Identifier\",\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 119,\n                                                line: 6,\n                                                col: 30,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 120,\n                                                line: 6,\n                                                col: 31,\n                                             },\n                                          },\n                                          Name: \"b\",\n                                       },\n                                       ctx: \"Load\",\n                                    },\n                                 },\n                              ],\n                              func: { '@type': \"python:BoxedName\",\n                                 '@role': [Call, Callee],\n                                 'boxed_value': { '@type': \"uast:Identifier\",\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 101,\n                                          line: 6,\n                                          col: 12,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 104,\n                                          line: 6,\n                                          col: 15,\n                                       },\n                                    },\n                                    Name: \"fib\",\n                                 },\n                                 ctx: \"Load\",\n                              },\n                              keywords: [],\n                           },\n                        },\n                     ],\n                  },\n                  Type: { '@type': \"uast:FunctionType\",\n                     Arguments: [\n                        { '@type': \"uast:Argument\",\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 8,\n                                 line: 1,\n                                 col: 9,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 9,\n                                 line: 1,\n                                 col: 10,\n                              },\n                           },\n                           MapVariadic: false,\n                           Name: { '@type': \"uast:Identifier\",\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 8,\n                                    line: 1,\n                                    col: 9,\n                                 },\n                                 end: { '@type': \"uast:Position\",\n                                    offset: 9,\n                                    line: 1,\n                                    col: 10,\n                                 },\n                              },\n                              Name: \"n\",\n                           },\n                           Receiver: false,\n                           Type: ~,\n                           Variadic: false,\n                        },\n                        { '@type': \"uast:Argument\",\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 11,\n                                 line: 1,\n                                 col: 12,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 12,\n                                 line: 1,\n                                 col: 13,\n                              },\n                           },\n                           Init: { '@type': \"python:Num\",\n                              '@token': 0,\n                              '@role': [Expression, Literal, Number, Primitive],\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 15,\n                                    line: 1,\n                                    col: 16,\n                                 },\n                                 end: { '@type': \"uast:Position\",\n                                    offset: 16,\n                                    line: 1,\n                                    col: 17,\n                                 },\n                              },\n                           },\n                           MapVariadic: false,\n                           Name: { '@type': \"uast:Identifier\",\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 11,\n                                    line: 1,\n                                    col: 12,\n                                 },\n                                 end: { '@type': \"uast:Position\",\n                                    offset: 12,\n                                    line: 1,\n                                    col: 13,\n                                 },\n                              },\n                              Name: \"a\",\n                           },\n                           Receiver: false,\n                           Type: ~,\n                           Variadic: false,\n                        },\n                        { '@type': \"uast:Argument\",\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 18,\n                                 line: 1,\n                                 col: 19,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 19,\n                                 line: 1,\n                                 col: 20,\n                              },\n                           },\n                           Init: { '@type': \"python:Num\",\n                              '@token': 1,\n                              '@role': [Expression, Literal, Number, Primitive],\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 22,\n                                    line: 1,\n                                    col: 23,\n                                 },\n                                 end: { '@type': \"uast:Position\",\n                                    offset: 23,\n                                    line: 1,\n                                    col: 24,\n                                 },\n                              },\n                           },\n                           MapVariadic: false,\n                           Name: { '@type': \"uast:Identifier\",\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 18,\n                                    line: 1,\n                                    col: 19,\n                                 },\n                                 end: { '@type': \"uast:Position\",\n                                    offset: 19,\n                                    line: 1,\n                                    col: 20,\n                                 },\n                              },\n                              Name: \"b\",\n                           },\n                           Receiver: false,\n                           Type: ~,\n                           Variadic: false,\n                        },\n                     ],\n                     Returns: [\n                        { '@type': \"uast:Argument\",\n                           Init: { '@type': \"uast:Identifier\",\n                              Name: \"None\",\n                           },\n                           MapVariadic: false,\n                           Name: ~,\n                           Receiver: false,\n                           Type: ~,\n                           Variadic: false,\n                        },\n                     ],\n                  },\n               },\n            },\n         ],\n      },\n   ],\n}\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ewhat can be transformed into a prolog program\u003c/summary\u003e\n\u003cp\u003e\n\n```prolog\npositions0(['uast:Positions', _, _]).\nvalue0('File').\nvalue1('Module').\narray0([Arg0,Arg1]) :- value0(Arg0),value1(Arg1).\nvalue2('python:Module').\nposition0(['uast:Position', 5, 1, 4]).\nposition1(['uast:Position', 8, 1, 7]).\npositions1(['uast:Positions', Start, End]) :- position0(Start), position1(End).\narray1([]).\nvalue3(false).\nobject0(_).\nobject1(Obj) :- value3(Obj), !.\nobject1(Obj) :- object0(Obj), !.\nobject1(Obj) :- array1(Obj), !.\npositions2(['uast:Positions', _, _]).\npositions3(['uast:Positions', _, _]).\nposition2(['uast:Position', 9, 1, 8]).\nposition3(['uast:Position', 10, 1, 9]).\npositions4(['uast:Positions', Start, End]) :- position2(Start), position3(End).\nrole0('Identifier').\nidentifier0(['uast:Identifier', 'n', Pos, [Role0]]) :- positions4(Pos),role0(Role0).\npositions5(['uast:Positions', Start, End]) :- position2(Start), position3(End).\nargument0(['uast:Argument', Name, _, _, false, false, false, Pos]) :- identifier0(Name),positions5(Pos).\nposition4(['uast:Position', 12, 1, 11]).\nposition5(['uast:Position', 13, 1, 12]).\npositions6(['uast:Positions', Start, End]) :- position4(Start), position5(End).\nidentifier1(['uast:Identifier', 'a', Pos, [Role0]]) :- positions6(Pos),role0(Role0).\nposition6(['uast:Position', 16, 1, 15]).\nposition7(['uast:Position', 17, 1, 16]).\npositions7(['uast:Positions', Start, End]) :- position6(Start), position7(End).\nvalue4('Expression').\nvalue5('Literal').\nvalue6('Number').\nvalue7('Primitive').\narray2([Arg0,Arg1,Arg2,Arg3]) :- value4(Arg0),value5(Arg1),value6(Arg2),value7(Arg3).\nvalue8('python:Num').\nvalue9(0).\nobject2(Obj) :- positions7(Obj), !.\nobject2(Obj) :- array2(Obj), !.\nobject2(Obj) :- value8(Obj), !.\nobject2(Obj) :- value9(Obj), !.\npositions8(['uast:Positions', Start, End]) :- position4(Start), position5(End).\nargument1(['uast:Argument', Name, _, Init, false, false, false, Pos]) :- identifier1(Name),object2(Init),positions8(Pos).\nposition8(['uast:Position', 19, 1, 18]).\nposition9(['uast:Position', 20, 1, 19]).\npositions9(['uast:Positions', Start, End]) :- position8(Start), position9(End).\nidentifier2(['uast:Identifier', 'b', Pos, [Role0]]) :- positions9(Pos),role0(Role0).\nvalue10(1).\nposition10(['uast:Position', 23, 1, 22]).\nposition11(['uast:Position', 24, 1, 23]).\npositions10(['uast:Positions', Start, End]) :- position10(Start), position11(End).\narray3([Arg0,Arg1,Arg2,Arg3]) :- value4(Arg0),value5(Arg1),value6(Arg2),value7(Arg3).\nobject3(Obj) :- value8(Obj), !.\nobject3(Obj) :- value10(Obj), !.\nobject3(Obj) :- positions10(Obj), !.\nobject3(Obj) :- array3(Obj), !.\npositions11(['uast:Positions', Start, End]) :- position8(Start), position9(End).\nargument2(['uast:Argument', Name, _, Init, false, false, false, Pos]) :- identifier2(Name),object3(Init),positions11(Pos).\npositions12(['uast:Positions', _, _]).\nidentifier3(['uast:Identifier', 'None', Pos, [Role0]]) :- positions12(Pos),role0(Role0).\npositions13(['uast:Positions', _, _]).\nargument3(['uast:Argument', _, _, Init, false, false, false, Pos]) :- identifier3(Init),positions13(Pos).\nfunction_type0(['uast:FunctionType', [Arg0,Arg1,Arg2], [Ret0], Pos]) :- argument0(Arg0),argument1(Arg1),argument2(Arg2),argument3(Ret0),positions3(Pos).\npositions14(['uast:Positions', _, _]).\nvalue11('If').\narray4([Arg0,Arg1]) :- value11(Arg0),value4(Arg1).\nvalue12('python:If').\nvalue13('python:If.body').\nposition12(['uast:Position', 9, 3, 49]).\nposition13(['uast:Position', 15, 3, 55]).\npositions15(['uast:Positions', Start, End]) :- position12(Start), position13(End).\nvalue14('Return').\nvalue15('Statement').\narray5([Arg0,Arg1]) :- value14(Arg0),value15(Arg1).\nvalue16('python:Return').\nvalue17('return').\nposition14(['uast:Position', 16, 3, 56]).\nposition15(['uast:Position', 17, 3, 57]).\npositions16(['uast:Positions', Start, End]) :- position14(Start), position15(End).\nidentifier4(['uast:Identifier', 'a', Pos, [Role0]]) :- positions16(Pos),role0(Role0).\nvalue18('Load').\nvalue19('python:BoxedName').\nobject4(Obj) :- identifier4(Obj), !.\nobject4(Obj) :- value18(Obj), !.\nobject4(Obj) :- value19(Obj), !.\nobject5(Obj) :- positions15(Obj), !.\nobject5(Obj) :- array5(Obj), !.\nobject5(Obj) :- value16(Obj), !.\nobject5(Obj) :- value17(Obj), !.\nobject5(Obj) :- object4(Obj), !.\narray6([Arg0]) :- object5(Arg0).\nvalue20('Body').\nvalue21('Then').\narray7([Arg0,Arg1,Arg2]) :- value11(Arg0),value20(Arg1),value21(Arg2).\nobject6(Obj) :- array6(Obj), !.\nobject6(Obj) :- array7(Obj), !.\nobject6(Obj) :- value13(Obj), !.\nvalue22('if').\nvalue23('Else').\narray8([Arg0,Arg1,Arg2]) :- value11(Arg0),value20(Arg1),value23(Arg2).\nvalue24('python:If.orelse').\nvalue25('else').\narray9([]).\nobject7(Obj) :- array9(Obj), !.\nobject7(Obj) :- array8(Obj), !.\nobject7(Obj) :- value24(Obj), !.\nobject7(Obj) :- value25(Obj), !.\nposition16(['uast:Position', 8, 2, 33]).\npositions17(['uast:Positions', Start, _]) :- position16(Start).\nvalue26('Binary').\nvalue27('Condition').\narray10([Arg0,Arg1,Arg2,Arg3]) :- value4(Arg0),value26(Arg1),value27(Arg2),value11(Arg3).\nvalue28('python:Compare').\nvalue29('Right').\narray11([Arg0,Arg1]) :- value4(Arg0),value29(Arg1).\nvalue30('python:Compare.comparators').\nposition17(['uast:Position', 13, 2, 38]).\nposition18(['uast:Position', 14, 2, 39]).\npositions18(['uast:Positions', Start, End]) :- position17(Start), position18(End).\narray12([Arg0,Arg1,Arg2,Arg3]) :- value4(Arg0),value5(Arg1),value6(Arg2),value7(Arg3).\nobject8(Obj) :- value9(Obj), !.\nobject8(Obj) :- positions18(Obj), !.\nobject8(Obj) :- array12(Obj), !.\nobject8(Obj) :- value8(Obj), !.\narray13([Arg0]) :- object8(Arg0).\nobject9(Obj) :- array11(Obj), !.\nobject9(Obj) :- value30(Obj), !.\nobject9(Obj) :- array13(Obj), !.\nvalue31('Left').\narray14([Arg0,Arg1]) :- value4(Arg0),value31(Arg1).\nposition19(['uast:Position', 9, 2, 34]).\npositions19(['uast:Positions', Start, End]) :- position16(Start), position19(End).\nidentifier5(['uast:Identifier', 'n', Pos, [Role0]]) :- positions19(Pos),role0(Role0).\nobject10(Obj) :- array14(Obj), !.\nobject10(Obj) :- value19(Obj), !.\nobject10(Obj) :- identifier5(Obj), !.\nobject10(Obj) :- value18(Obj), !.\narray15([Arg0]) :- value4(Arg0).\nvalue32('python:Compare.ops').\npositions20(['uast:Positions', _, _]).\nvalue33('Operator').\nvalue34('Relational').\nvalue35('Equal').\narray16([Arg0,Arg1,Arg2]) :- value33(Arg0),value34(Arg1),value35(Arg2).\nvalue36('python:Eq').\nvalue37('==').\nobject11(Obj) :- array16(Obj), !.\nobject11(Obj) :- value36(Obj), !.\nobject11(Obj) :- value37(Obj), !.\nobject11(Obj) :- positions20(Obj), !.\narray17([Arg0]) :- object11(Arg0).\nobject12(Obj) :- array15(Obj), !.\nobject12(Obj) :- value32(Obj), !.\nobject12(Obj) :- array17(Obj), !.\nobject13(Obj) :- object10(Obj), !.\nobject13(Obj) :- object12(Obj), !.\nobject13(Obj) :- positions17(Obj), !.\nobject13(Obj) :- array10(Obj), !.\nobject13(Obj) :- value28(Obj), !.\nobject13(Obj) :- object9(Obj), !.\nposition20(['uast:Position', 5, 2, 30]).\nposition21(['uast:Position', 7, 2, 32]).\npositions21(['uast:Positions', Start, End]) :- position20(Start), position21(End).\nobject14(Obj) :- positions21(Obj), !.\nobject14(Obj) :- array4(Obj), !.\nobject14(Obj) :- value12(Obj), !.\nobject14(Obj) :- object6(Obj), !.\nobject14(Obj) :- value22(Obj), !.\nobject14(Obj) :- object7(Obj), !.\nobject14(Obj) :- object13(Obj), !.\nposition22(['uast:Position', 5, 4, 62]).\nposition23(['uast:Position', 7, 4, 64]).\npositions22(['uast:Positions', Start, End]) :- position22(Start), position23(End).\narray18([Arg0,Arg1]) :- value11(Arg0),value4(Arg1).\narray19([Arg0,Arg1,Arg2]) :- value11(Arg0),value20(Arg1),value21(Arg2).\nposition24(['uast:Position', 9, 5, 81]).\nposition25(['uast:Position', 15, 5, 87]).\npositions23(['uast:Positions', Start, End]) :- position24(Start), position25(End).\narray20([Arg0,Arg1]) :- value14(Arg0),value15(Arg1).\nposition26(['uast:Position', 16, 5, 88]).\nposition27(['uast:Position', 17, 5, 89]).\npositions24(['uast:Positions', Start, End]) :- position26(Start), position27(End).\nidentifier6(['uast:Identifier', 'b', Pos, [Role0]]) :- positions24(Pos),role0(Role0).\nobject15(Obj) :- identifier6(Obj), !.\nobject15(Obj) :- value18(Obj), !.\nobject15(Obj) :- value19(Obj), !.\nobject16(Obj) :- positions23(Obj), !.\nobject16(Obj) :- array20(Obj), !.\nobject16(Obj) :- value16(Obj), !.\nobject16(Obj) :- value17(Obj), !.\nobject16(Obj) :- object15(Obj), !.\narray21([Arg0]) :- object16(Arg0).\nobject17(Obj) :- array19(Obj), !.\nobject17(Obj) :- value13(Obj), !.\nobject17(Obj) :- array21(Obj), !.\narray22([Arg0,Arg1,Arg2]) :- value11(Arg0),value20(Arg1),value23(Arg2).\narray23([]).\nobject18(Obj) :- array22(Obj), !.\nobject18(Obj) :- value24(Obj), !.\nobject18(Obj) :- value25(Obj), !.\nobject18(Obj) :- array23(Obj), !.\nposition28(['uast:Position', 13, 4, 70]).\nposition29(['uast:Position', 14, 4, 71]).\npositions25(['uast:Positions', Start, End]) :- position28(Start), position29(End).\narray24([Arg0,Arg1,Arg2,Arg3]) :- value4(Arg0),value5(Arg1),value6(Arg2),value7(Arg3).\nobject19(Obj) :- value10(Obj), !.\nobject19(Obj) :- positions25(Obj), !.\nobject19(Obj) :- array24(Obj), !.\nobject19(Obj) :- value8(Obj), !.\narray25([Arg0]) :- object19(Arg0).\narray26([Arg0,Arg1]) :- value4(Arg0),value29(Arg1).\nobject20(Obj) :- array25(Obj), !.\nobject20(Obj) :- array26(Obj), !.\nobject20(Obj) :- value30(Obj), !.\nposition30(['uast:Position', 8, 4, 65]).\nposition31(['uast:Position', 9, 4, 66]).\npositions26(['uast:Positions', Start, End]) :- position30(Start), position31(End).\nidentifier7(['uast:Identifier', 'n', Pos, [Role0]]) :- positions26(Pos),role0(Role0).\narray27([Arg0,Arg1]) :- value4(Arg0),value31(Arg1).\nobject21(Obj) :- array27(Obj), !.\nobject21(Obj) :- value19(Obj), !.\nobject21(Obj) :- identifier7(Obj), !.\nobject21(Obj) :- value18(Obj), !.\npositions27(['uast:Positions', _, _]).\narray28([Arg0,Arg1,Arg2]) :- value33(Arg0),value34(Arg1),value35(Arg2).\nobject22(Obj) :- value36(Obj), !.\nobject22(Obj) :- value37(Obj), !.\nobject22(Obj) :- positions27(Obj), !.\nobject22(Obj) :- array28(Obj), !.\narray29([Arg0]) :- object22(Arg0).\narray30([Arg0]) :- value4(Arg0).\nobject23(Obj) :- value32(Obj), !.\nobject23(Obj) :- array29(Obj), !.\nobject23(Obj) :- array30(Obj), !.\npositions28(['uast:Positions', Start, _]) :- position30(Start).\narray31([Arg0,Arg1,Arg2,Arg3]) :- value4(Arg0),value26(Arg1),value27(Arg2),value11(Arg3).\nobject24(Obj) :- object23(Obj), !.\nobject24(Obj) :- positions28(Obj), !.\nobject24(Obj) :- array31(Obj), !.\nobject24(Obj) :- value28(Obj), !.\nobject24(Obj) :- object20(Obj), !.\nobject24(Obj) :- object21(Obj), !.\nobject25(Obj) :- object24(Obj), !.\nobject25(Obj) :- positions22(Obj), !.\nobject25(Obj) :- array18(Obj), !.\nobject25(Obj) :- value12(Obj), !.\nobject25(Obj) :- object17(Obj), !.\nobject25(Obj) :- value22(Obj), !.\nobject25(Obj) :- object18(Obj), !.\nvalue38('Function').\nvalue39('Call').\narray32([Arg0,Arg1,Arg2]) :- value38(Arg0),value39(Arg1),value4(Arg2).\nvalue40('python:Call').\nposition32(['uast:Position', 16, 6, 105]).\npositions29(['uast:Positions', Start, _]) :- position32(Start).\nvalue41('Positional').\nvalue42('Argument').\nvalue43('Name').\narray33([Arg0,Arg1,Arg2,Arg3,Arg4,Arg5,Arg6]) :- value4(Arg0),value26(Arg1),value38(Arg2),value39(Arg3),value41(Arg4),value42(Arg5),value43(Arg6).\nvalue44('python:BinOp').\nposition33(['uast:Position', 17, 6, 106]).\npositions30(['uast:Positions', Start, End]) :- position32(Start), position33(End).\nidentifier8(['uast:Identifier', 'n', Pos, [Role0]]) :- positions30(Pos),role0(Role0).\narray34([Arg0,Arg1,Arg2]) :- value4(Arg0),value26(Arg1),value31(Arg2).\nobject26(Obj) :- value19(Obj), !.\nobject26(Obj) :- identifier8(Obj), !.\nobject26(Obj) :- value18(Obj), !.\nobject26(Obj) :- array34(Obj), !.\nvalue45('-').\npositions31(['uast:Positions', _, _]).\nvalue46('Arithmetic').\nvalue47('Substract').\narray35([Arg0,Arg1,Arg2,Arg3]) :- value33(Arg0),value46(Arg1),value47(Arg2),value26(Arg3).\nvalue48('python:Sub').\nobject27(Obj) :- array35(Obj), !.\nobject27(Obj) :- value48(Obj), !.\nobject27(Obj) :- value45(Obj), !.\nobject27(Obj) :- positions31(Obj), !.\nposition34(['uast:Position', 20, 6, 109]).\nposition35(['uast:Position', 21, 6, 110]).\npositions32(['uast:Positions', Start, End]) :- position34(Start), position35(End).\narray36([Arg0,Arg1,Arg2,Arg3,Arg4,Arg5]) :- value4(Arg0),value5(Arg1),value6(Arg2),value7(Arg3),value26(Arg4),value29(Arg5).\nobject28(Obj) :- positions32(Obj), !.\nobject28(Obj) :- array36(Obj), !.\nobject28(Obj) :- value8(Obj), !.\nobject28(Obj) :- value10(Obj), !.\nobject29(Obj) :- positions29(Obj), !.\nobject29(Obj) :- array33(Obj), !.\nobject29(Obj) :- value44(Obj), !.\nobject29(Obj) :- object26(Obj), !.\nobject29(Obj) :- object27(Obj), !.\nobject29(Obj) :- object28(Obj), !.\narray37([Arg0,Arg1,Arg2,Arg3,Arg4]) :- value38(Arg0),value39(Arg1),value41(Arg2),value42(Arg3),value43(Arg4).\nposition36(['uast:Position', 23, 6, 112]).\nposition37(['uast:Position', 24, 6, 113]).\npositions33(['uast:Positions', Start, End]) :- position36(Start), position37(End).\nidentifier9(['uast:Identifier', 'b', Pos, [Role0]]) :- positions33(Pos),role0(Role0).\nobject30(Obj) :- value19(Obj), !.\nobject30(Obj) :- identifier9(Obj), !.\nobject30(Obj) :- value18(Obj), !.\nobject30(Obj) :- array37(Obj), !.\nposition38(['uast:Position', 26, 6, 115]).\npositions34(['uast:Positions', Start, _]) :- position38(Start).\narray38([Arg0,Arg1,Arg2,Arg3,Arg4,Arg5,Arg6]) :- value4(Arg0),value26(Arg1),value38(Arg2),value39(Arg3),value41(Arg4),value42(Arg5),value43(Arg6).\nposition39(['uast:Position', 27, 6, 116]).\npositions35(['uast:Positions', Start, End]) :- position38(Start), position39(End).\nidentifier10(['uast:Identifier', 'a', Pos, [Role0]]) :- positions35(Pos),role0(Role0).\narray39([Arg0,Arg1,Arg2]) :- value4(Arg0),value26(Arg1),value31(Arg2).\nobject31(Obj) :- value19(Obj), !.\nobject31(Obj) :- identifier10(Obj), !.\nobject31(Obj) :- value18(Obj), !.\nobject31(Obj) :- array39(Obj), !.\nvalue49('+').\npositions36(['uast:Positions', _, _]).\nvalue50('Add').\narray40([Arg0,Arg1,Arg2,Arg3]) :- value33(Arg0),value46(Arg1),value50(Arg2),value26(Arg3).\nvalue51('python:Add').\nobject32(Obj) :- value51(Obj), !.\nobject32(Obj) :- value49(Obj), !.\nobject32(Obj) :- positions36(Obj), !.\nobject32(Obj) :- array40(Obj), !.\narray41([Arg0,Arg1,Arg2]) :- value4(Arg0),value26(Arg1),value29(Arg2).\nposition40(['uast:Position', 30, 6, 119]).\nposition41(['uast:Position', 31, 6, 120]).\npositions37(['uast:Positions', Start, End]) :- position40(Start), position41(End).\nidentifier11(['uast:Identifier', 'b', Pos, [Role0]]) :- positions37(Pos),role0(Role0).\nobject33(Obj) :- value19(Obj), !.\nobject33(Obj) :- identifier11(Obj), !.\nobject33(Obj) :- value18(Obj), !.\nobject33(Obj) :- array41(Obj), !.\nobject34(Obj) :- object33(Obj), !.\nobject34(Obj) :- positions34(Obj), !.\nobject34(Obj) :- array38(Obj), !.\nobject34(Obj) :- value44(Obj), !.\nobject34(Obj) :- object31(Obj), !.\nobject34(Obj) :- object32(Obj), !.\narray42([Arg0,Arg1,Arg2]) :- object29(Arg0),object30(Arg1),object34(Arg2).\nposition42(['uast:Position', 12, 6, 101]).\nposition43(['uast:Position', 15, 6, 104]).\npositions38(['uast:Positions', Start, End]) :- position42(Start), position43(End).\nidentifier12(['uast:Identifier', 'fib', Pos, [Role0]]) :- positions38(Pos),role0(Role0).\nvalue52('Callee').\narray43([Arg0,Arg1]) :- value39(Arg0),value52(Arg1).\nobject35(Obj) :- value19(Obj), !.\nobject35(Obj) :- identifier12(Obj), !.\nobject35(Obj) :- value18(Obj), !.\nobject35(Obj) :- array43(Obj), !.\narray44([]).\npositions39(['uast:Positions', Start, _]) :- position42(Start).\nobject36(Obj) :- array32(Obj), !.\nobject36(Obj) :- value40(Obj), !.\nobject36(Obj) :- array42(Obj), !.\nobject36(Obj) :- object35(Obj), !.\nobject36(Obj) :- array44(Obj), !.\nobject36(Obj) :- positions39(Obj), !.\nposition44(['uast:Position', 5, 6, 94]).\nposition45(['uast:Position', 11, 6, 100]).\npositions40(['uast:Positions', Start, End]) :- position44(Start), position45(End).\narray45([Arg0,Arg1]) :- value14(Arg0),value15(Arg1).\nobject37(Obj) :- value16(Obj), !.\nobject37(Obj) :- value17(Obj), !.\nobject37(Obj) :- object36(Obj), !.\nobject37(Obj) :- positions40(Obj), !.\nobject37(Obj) :- array45(Obj), !.\nblock0(['uast:Block', [Stmt0,Stmt1,Stmt2], Pos]) :- positions14(Pos),object14(Stmt0),object25(Stmt1),object37(Stmt2).\npositions41(['uast:Positions', _, _]).\nfunction0(['uast:Function', FnType, Body, Pos]) :- function_type0(FnType),block0(Body),positions41(Pos).\npositions42(['uast:Positions', _, _]).\nidentifier13(['uast:Identifier', 'fib', Pos, [Role0]]) :- positions42(Pos),role0(Role0).\nalias0(['uast:Alias', Name, Node, Pos]) :- identifier13(Name),function0(Node),positions2(Pos).\nfunction_group0(['uast:FunctionGroup', [Node0,Node1], Pos]) :- positions1(Pos),object1(Node0),alias0(Node1).\narray46([Arg0]) :- function_group0(Arg0).\nobject38(Obj) :- positions0(Obj), !.\nobject38(Obj) :- array0(Obj), !.\nobject38(Obj) :- value2(Obj), !.\nobject38(Obj) :- array46(Obj), !.\n\n% value(Val).\nvalue(X) :- value0(X);value1(X);value2(X);value3(X);value4(X);value5(X);value6(X);value7(X);value8(X);value9(X);value10(X);value11(X);value12(X);value13(X);value14(X);value15(X);value16(X);value17(X);value18(X);value19(X);value20(X);value21(X);value22(X);value23(X);value24(X);value25(X);value26(X);value27(X);value28(X);value29(X);value30(X);value31(X);value32(X);value33(X);value34(X);value35(X);value36(X);value37(X);value38(X);value39(X);value40(X);value41(X);value42(X);value43(X);value44(X);value45(X);value46(X);value47(X);value48(X);value49(X);value50(X);value51(X);value52(X).\n\n% array([Arguments]).\narray(X) :- array0(X);array1(X);array2(X);array3(X);array4(X);array5(X);array6(X);array7(X);array8(X);array9(X);array10(X);array11(X);array12(X);array13(X);array14(X);array15(X);array16(X);array17(X);array18(X);array19(X);array20(X);array21(X);array22(X);array23(X);array24(X);array25(X);array26(X);array27(X);array28(X);array29(X);array30(X);array31(X);array32(X);array33(X);array34(X);array35(X);array36(X);array37(X);array38(X);array39(X);array40(X);array41(X);array42(X);array43(X);array44(X);array45(X);array46(X).\n\n% object(Obj).\nobject(X) :- object0(X);object1(X);object2(X);object3(X);object4(X);object5(X);object6(X);object7(X);object8(X);object9(X);object10(X);object11(X);object12(X);object13(X);object14(X);object15(X);object16(X);object17(X);object18(X);object19(X);object20(X);object21(X);object22(X);object23(X);object24(X);object25(X);object26(X);object27(X);object28(X);object29(X);object30(X);object31(X);object32(X);object33(X);object34(X);object35(X);object36(X);object37(X);object38(X).\n\n% role(Name).\nrole(X) :- role0(X).\n\n% position([Type, Col, Line, Offset]).\nposition(X) :- position0(X);position1(X);position2(X);position3(X);position4(X);position5(X);position6(X);position7(X);position8(X);position9(X);position10(X);position11(X);position12(X);position13(X);position14(X);position15(X);position16(X);position17(X);position18(X);position19(X);position20(X);position21(X);position22(X);position23(X);position24(X);position25(X);position26(X);position27(X);position28(X);position29(X);position30(X);position31(X);position32(X);position33(X);position34(X);position35(X);position36(X);position37(X);position38(X);position39(X);position40(X);position41(X);position42(X);position43(X);position44(X);position45(X).\n\n% positions([Type, Start, End]).\npositions(X) :- positions0(X);positions1(X);positions2(X);positions3(X);positions4(X);positions5(X);positions6(X);positions7(X);positions8(X);positions9(X);positions10(X);positions11(X);positions12(X);positions13(X);positions14(X);positions15(X);positions16(X);positions17(X);positions18(X);positions19(X);positions20(X);positions21(X);positions22(X);positions23(X);positions24(X);positions25(X);positions26(X);positions27(X);positions28(X);positions29(X);positions30(X);positions31(X);positions32(X);positions33(X);positions34(X);positions35(X);positions36(X);positions37(X);positions38(X);positions39(X);positions40(X);positions41(X);positions42(X).\n\n% identifier([Type, Name, Pos, [Roles]]).\nidentifier(X) :- identifier0(X);identifier1(X);identifier2(X);identifier3(X);identifier4(X);identifier5(X);identifier6(X);identifier7(X);identifier8(X);identifier9(X);identifier10(X);identifier11(X);identifier12(X);identifier13(X).\n\n% qualified_identifier([Type, [Names], Pos]).\nqualified_identifier(_) :- fail.\n\n% comment([Type, Prefix, Suffix, Tab, Text, Block, Pos]).\ncomment(_) :- fail.\n\n% group([Type, [Nodes], Pos]).\ngroup(_) :- fail.\n\n% function_group([Type, [Nodes], Pos]).\nfunction_group(X) :- function_group0(X).\n\n% block([Type, [Statements], Pos]).\nblock(X) :- block0(X).\n\n% alias([Type, Name, Node, Pos]).\nalias(X) :- alias0(X).\n\n% import([Type, Path, Pos]).\nimport(_) :- fail.\n\n% runtime_import([Type, Path, Pos]).\nruntime_import(_) :- fail.\n\n% runtime_reimport([Type, Path, Pos]).\nruntime_reimport(_) :- fail.\n\n% inline_import([Type, Path, Pos]).\ninline_import(_) :- fail.\n\n% argument([Type, Name, ArgType, Init, Variadic, MapVariadic, Receiver, Pos]).\nargument(X) :- argument0(X);argument1(X);argument2(X);argument3(X).\n\n% function_type([Type, [Arguments], [Returns], Pos]).\nfunction_type(X) :- function_type0(X).\n\n% function([Type, FuncType, Body, Pos]).\nfunction(X) :- function0(X).\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\nNext, we can query DB to get all function names and arguments (we can also use any other prolog implementation, e.g. [swi-prolog](https://www.swi-prolog.org)):\n```bash\n ./qpl -f ./examples/python/fib.py.pl -f ./prolog/function.pl -q \"function_arg(Fn, Args).\"\n\nFn = fib\nArgs = [n,a,b]\n```\n\n\n### Example (extract import paths)\nFor a given `examples/java/Hello.java` file:\n```java\n// Hello.java\nimport java.io.*;\nimport javax.servlet.*;\n\npublic class Hello extends GenericServlet {\n    public void service(final ServletRequest request, final ServletResponse response)\n    throws ServletException, IOException {\n        response.setContentType(\"text/html\");\n        final PrintWriter pw = response.getWriter();\n        try {\n            pw.println(\"Hello, world!\");\n        } finally {\n            pw.close();\n        }\n    }\n}\n```\n\n\u003cdetails\u003e\n\u003csummary\u003ewe get following UAST\u003c/summary\u003e\n\u003cp\u003e\n\n```\n{ '@type': \"java:CompilationUnit\",\n   '@role': [File],\n   '@pos': { '@type': \"uast:Positions\",\n      start: { '@type': \"uast:Position\",\n         offset: 0,\n         line: 1,\n         col: 1,\n      },\n      end: { '@type': \"uast:Position\",\n         offset: 448,\n         line: 19,\n         col: 1,\n      },\n   },\n   comments: [\n      { '@type': \"uast:Comment\",\n         '@pos': { '@type': \"uast:Positions\",\n            start: { '@type': \"uast:Position\",\n               offset: 0,\n               line: 1,\n               col: 1,\n            },\n            end: { '@type': \"uast:Position\",\n               offset: 13,\n               line: 1,\n               col: 14,\n            },\n         },\n         Block: false,\n         Prefix: \" \",\n         Suffix: \"\",\n         Tab: \"\",\n         Text: \"Hello.java\",\n      },\n   ],\n   imports: [\n      { '@type': \"uast:Import\",\n         '@pos': { '@type': \"uast:Positions\",\n            start: { '@type': \"uast:Position\",\n               offset: 14,\n               line: 2,\n               col: 1,\n            },\n            end: { '@type': \"uast:Position\",\n               offset: 31,\n               line: 2,\n               col: 18,\n            },\n         },\n         All: true,\n         Names: [],\n         Path: { '@type': \"uast:QualifiedIdentifier\",\n            '@pos': { '@type': \"uast:Positions\",\n               start: { '@type': \"uast:Position\",\n                  offset: 21,\n                  line: 2,\n                  col: 8,\n               },\n               end: { '@type': \"uast:Position\",\n                  offset: 28,\n                  line: 2,\n                  col: 15,\n               },\n            },\n            Names: [\n               { '@type': \"uast:Identifier\",\n                  '@pos': { '@type': \"uast:Positions\",\n                     start: { '@type': \"uast:Position\",\n                        offset: 21,\n                        line: 2,\n                        col: 8,\n                     },\n                     end: { '@type': \"uast:Position\",\n                        offset: 25,\n                        line: 2,\n                        col: 12,\n                     },\n                  },\n                  Name: \"java\",\n               },\n               { '@type': \"uast:Identifier\",\n                  '@pos': { '@type': \"uast:Positions\",\n                     start: { '@type': \"uast:Position\",\n                        offset: 26,\n                        line: 2,\n                        col: 13,\n                     },\n                     end: { '@type': \"uast:Position\",\n                        offset: 28,\n                        line: 2,\n                        col: 15,\n                     },\n                  },\n                  Name: \"io\",\n               },\n            ],\n         },\n         Target: {\n            static: \"false\",\n         },\n      },\n      { '@type': \"uast:Import\",\n         '@pos': { '@type': \"uast:Positions\",\n            start: { '@type': \"uast:Position\",\n               offset: 32,\n               line: 3,\n               col: 1,\n            },\n            end: { '@type': \"uast:Position\",\n               offset: 55,\n               line: 3,\n               col: 24,\n            },\n         },\n         All: true,\n         Names: [],\n         Path: { '@type': \"uast:QualifiedIdentifier\",\n            '@pos': { '@type': \"uast:Positions\",\n               start: { '@type': \"uast:Position\",\n                  offset: 39,\n                  line: 3,\n                  col: 8,\n               },\n               end: { '@type': \"uast:Position\",\n                  offset: 52,\n                  line: 3,\n                  col: 21,\n               },\n            },\n            Names: [\n               { '@type': \"uast:Identifier\",\n                  '@pos': { '@type': \"uast:Positions\",\n                     start: { '@type': \"uast:Position\",\n                        offset: 39,\n                        line: 3,\n                        col: 8,\n                     },\n                     end: { '@type': \"uast:Position\",\n                        offset: 44,\n                        line: 3,\n                        col: 13,\n                     },\n                  },\n                  Name: \"javax\",\n               },\n               { '@type': \"uast:Identifier\",\n                  '@pos': { '@type': \"uast:Positions\",\n                     start: { '@type': \"uast:Position\",\n                        offset: 45,\n                        line: 3,\n                        col: 14,\n                     },\n                     end: { '@type': \"uast:Position\",\n                        offset: 52,\n                        line: 3,\n                        col: 21,\n                     },\n                  },\n                  Name: \"servlet\",\n               },\n            ],\n         },\n         Target: {\n            static: \"false\",\n         },\n      },\n   ],\n   package: ~,\n   types: [\n      { '@type': \"java:TypeDeclaration\",\n         '@role': [Declaration, Type, Visibility, World],\n         '@pos': { '@type': \"uast:Positions\",\n            start: { '@type': \"uast:Position\",\n               offset: 57,\n               line: 5,\n               col: 1,\n            },\n            end: { '@type': \"uast:Position\",\n               offset: 445,\n               line: 16,\n               col: 2,\n            },\n         },\n         bodyDeclarations: [\n            { '@type': \"uast:FunctionGroup\",\n               '@pos': { '@type': \"uast:Positions\",\n                  start: { '@type': \"uast:Position\",\n                     offset: 105,\n                     line: 6,\n                     col: 5,\n                  },\n                  end: { '@type': \"uast:Position\",\n                     offset: 443,\n                     line: 15,\n                     col: 6,\n                  },\n               },\n               Nodes: [\n                  ~,\n                  [\n                     { '@type': \"java:Modifier\",\n                        '@token': \"public\",\n                        '@role': [Visibility, World],\n                        '@pos': { '@type': \"uast:Positions\",\n                           start: { '@type': \"uast:Position\",\n                              offset: 105,\n                              line: 6,\n                              col: 5,\n                           },\n                           end: { '@type': \"uast:Position\",\n                              offset: 111,\n                              line: 6,\n                              col: 11,\n                           },\n                        },\n                     },\n                  ],\n                  { '@type': \"uast:Alias\",\n                     Name: { '@type': \"uast:Identifier\",\n                        '@pos': { '@type': \"uast:Positions\",\n                           start: { '@type': \"uast:Position\",\n                              offset: 117,\n                              line: 6,\n                              col: 17,\n                           },\n                           end: { '@type': \"uast:Position\",\n                              offset: 124,\n                              line: 6,\n                              col: 24,\n                           },\n                        },\n                        Name: \"service\",\n                     },\n                     Node: { '@type': \"uast:Function\",\n                        Body: { '@type': \"uast:Block\",\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 228,\n                                 line: 7,\n                                 col: 42,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 443,\n                                 line: 15,\n                                 col: 6,\n                              },\n                           },\n                           Statements: [\n                              { '@type': \"java:ExpressionStatement\",\n                                 '@role': [Statement],\n                                 '@pos': { '@type': \"uast:Positions\",\n                                    start: { '@type': \"uast:Position\",\n                                       offset: 238,\n                                       line: 8,\n                                       col: 9,\n                                    },\n                                    end: { '@type': \"uast:Position\",\n                                       offset: 275,\n                                       line: 8,\n                                       col: 46,\n                                    },\n                                 },\n                                 expression: { '@type': \"java:MethodInvocation\",\n                                    '@role': [Call, Expression],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 238,\n                                          line: 8,\n                                          col: 9,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 274,\n                                          line: 8,\n                                          col: 45,\n                                       },\n                                    },\n                                    arguments: [\n                                       { '@type': \"uast:String\",\n                                          '@role': [Argument, Call, Positional],\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 262,\n                                                line: 8,\n                                                col: 33,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 273,\n                                                line: 8,\n                                                col: 44,\n                                             },\n                                          },\n                                          Format: \"\",\n                                          Value: \"text/html\",\n                                       },\n                                    ],\n                                    expression: { '@type': \"uast:Identifier\",\n                                       '@role': [Call, Receiver],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 238,\n                                             line: 8,\n                                             col: 9,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 246,\n                                             line: 8,\n                                             col: 17,\n                                          },\n                                       },\n                                       Name: \"response\",\n                                    },\n                                    name: { '@type': \"uast:Identifier\",\n                                       '@role': [Call, Callee],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 247,\n                                             line: 8,\n                                             col: 18,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 261,\n                                             line: 8,\n                                             col: 32,\n                                          },\n                                       },\n                                       Name: \"setContentType\",\n                                    },\n                                    typeArguments: ~,\n                                 },\n                              },\n                              { '@type': \"java:VariableDeclarationStatement\",\n                                 '@role': [Declaration, Statement, Variable],\n                                 '@pos': { '@type': \"uast:Positions\",\n                                    start: { '@type': \"uast:Position\",\n                                       offset: 284,\n                                       line: 9,\n                                       col: 9,\n                                    },\n                                    end: { '@type': \"uast:Position\",\n                                       offset: 328,\n                                       line: 9,\n                                       col: 53,\n                                    },\n                                 },\n                                 fragments: [\n                                    { '@type': \"java:VariableDeclarationFragment\",\n                                       '@role': [Declaration, Variable],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 302,\n                                             line: 9,\n                                             col: 27,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 327,\n                                             line: 9,\n                                             col: 52,\n                                          },\n                                       },\n                                       'extraDimensions2': ~,\n                                       initializer: { '@type': \"java:MethodInvocation\",\n                                          '@role': [Call, Expression],\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 307,\n                                                line: 9,\n                                                col: 32,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 327,\n                                                line: 9,\n                                                col: 52,\n                                             },\n                                          },\n                                          arguments: ~,\n                                          expression: { '@type': \"uast:Identifier\",\n                                             '@role': [Call, Receiver],\n                                             '@pos': { '@type': \"uast:Positions\",\n                                                start: { '@type': \"uast:Position\",\n                                                   offset: 307,\n                                                   line: 9,\n                                                   col: 32,\n                                                },\n                                                end: { '@type': \"uast:Position\",\n                                                   offset: 315,\n                                                   line: 9,\n                                                   col: 40,\n                                                },\n                                             },\n                                             Name: \"response\",\n                                          },\n                                          name: { '@type': \"uast:Identifier\",\n                                             '@role': [Call, Callee],\n                                             '@pos': { '@type': \"uast:Positions\",\n                                                start: { '@type': \"uast:Position\",\n                                                   offset: 316,\n                                                   line: 9,\n                                                   col: 41,\n                                                },\n                                                end: { '@type': \"uast:Position\",\n                                                   offset: 325,\n                                                   line: 9,\n                                                   col: 50,\n                                                },\n                                             },\n                                             Name: \"getWriter\",\n                                          },\n                                          typeArguments: ~,\n                                       },\n                                       name: { '@type': \"uast:Identifier\",\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 302,\n                                                line: 9,\n                                                col: 27,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 304,\n                                                line: 9,\n                                                col: 29,\n                                             },\n                                          },\n                                          Name: \"pw\",\n                                       },\n                                    },\n                                 ],\n                                 modifiers: [\n                                    { '@type': \"java:Modifier\",\n                                       '@token': \"final\",\n                                       '@role': [Incomplete],\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 284,\n                                             line: 9,\n                                             col: 9,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 289,\n                                             line: 9,\n                                             col: 14,\n                                          },\n                                       },\n                                    },\n                                 ],\n                                 type: { '@type': \"java:SimpleType\",\n                                    '@role': [Type],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 290,\n                                          line: 9,\n                                          col: 15,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 301,\n                                          line: 9,\n                                          col: 26,\n                                       },\n                                    },\n                                    annotations: ~,\n                                    name: { '@type': \"uast:Identifier\",\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 290,\n                                             line: 9,\n                                             col: 15,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 301,\n                                             line: 9,\n                                             col: 26,\n                                          },\n                                       },\n                                       Name: \"PrintWriter\",\n                                    },\n                                 },\n                              },\n                              { '@type': \"java:TryStatement\",\n                                 '@role': [Statement, Try],\n                                 '@pos': { '@type': \"uast:Positions\",\n                                    start: { '@type': \"uast:Position\",\n                                       offset: 337,\n                                       line: 10,\n                                       col: 9,\n                                    },\n                                    end: { '@type': \"uast:Position\",\n                                       offset: 437,\n                                       line: 14,\n                                       col: 10,\n                                    },\n                                 },\n                                 body: { '@type': \"uast:Block\",\n                                    '@role': [Body, Try],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 341,\n                                          line: 10,\n                                          col: 13,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 393,\n                                          line: 12,\n                                          col: 10,\n                                       },\n                                    },\n                                    Statements: [\n                                       { '@type': \"java:ExpressionStatement\",\n                                          '@role': [Statement],\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 355,\n                                                line: 11,\n                                                col: 13,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 383,\n                                                line: 11,\n                                                col: 41,\n                                             },\n                                          },\n                                          expression: { '@type': \"java:MethodInvocation\",\n                                             '@role': [Call, Expression],\n                                             '@pos': { '@type': \"uast:Positions\",\n                                                start: { '@type': \"uast:Position\",\n                                                   offset: 355,\n                                                   line: 11,\n                                                   col: 13,\n                                                },\n                                                end: { '@type': \"uast:Position\",\n                                                   offset: 382,\n                                                   line: 11,\n                                                   col: 40,\n                                                },\n                                             },\n                                             arguments: [\n                                                { '@type': \"uast:String\",\n                                                   '@role': [Argument, Call, Positional],\n                                                   '@pos': { '@type': \"uast:Positions\",\n                                                      start: { '@type': \"uast:Position\",\n                                                         offset: 366,\n                                                         line: 11,\n                                                         col: 24,\n                                                      },\n                                                      end: { '@type': \"uast:Position\",\n                                                         offset: 381,\n                                                         line: 11,\n                                                         col: 39,\n                                                      },\n                                                   },\n                                                   Format: \"\",\n                                                   Value: \"Hello, world!\",\n                                                },\n                                             ],\n                                             expression: { '@type': \"uast:Identifier\",\n                                                '@role': [Call, Receiver],\n                                                '@pos': { '@type': \"uast:Positions\",\n                                                   start: { '@type': \"uast:Position\",\n                                                      offset: 355,\n                                                      line: 11,\n                                                      col: 13,\n                                                   },\n                                                   end: { '@type': \"uast:Position\",\n                                                      offset: 357,\n                                                      line: 11,\n                                                      col: 15,\n                                                   },\n                                                },\n                                                Name: \"pw\",\n                                             },\n                                             name: { '@type': \"uast:Identifier\",\n                                                '@role': [Call, Callee],\n                                                '@pos': { '@type': \"uast:Positions\",\n                                                   start: { '@type': \"uast:Position\",\n                                                      offset: 358,\n                                                      line: 11,\n                                                      col: 16,\n                                                   },\n                                                   end: { '@type': \"uast:Position\",\n                                                      offset: 365,\n                                                      line: 11,\n                                                      col: 23,\n                                                   },\n                                                },\n                                                Name: \"println\",\n                                             },\n                                             typeArguments: ~,\n                                          },\n                                       },\n                                    ],\n                                 },\n                                 catchClauses: ~,\n                                 finally: { '@type': \"uast:Block\",\n                                    '@role': [Finally, Try],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 402,\n                                          line: 12,\n                                          col: 19,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 437,\n                                          line: 14,\n                                          col: 10,\n                                       },\n                                    },\n                                    Statements: [\n                                       { '@type': \"java:ExpressionStatement\",\n                                          '@role': [Statement],\n                                          '@pos': { '@type': \"uast:Positions\",\n                                             start: { '@type': \"uast:Position\",\n                                                offset: 416,\n                                                line: 13,\n                                                col: 13,\n                                             },\n                                             end: { '@type': \"uast:Position\",\n                                                offset: 427,\n                                                line: 13,\n                                                col: 24,\n                                             },\n                                          },\n                                          expression: { '@type': \"java:MethodInvocation\",\n                                             '@role': [Call, Expression],\n                                             '@pos': { '@type': \"uast:Positions\",\n                                                start: { '@type': \"uast:Position\",\n                                                   offset: 416,\n                                                   line: 13,\n                                                   col: 13,\n                                                },\n                                                end: { '@type': \"uast:Position\",\n                                                   offset: 426,\n                                                   line: 13,\n                                                   col: 23,\n                                                },\n                                             },\n                                             arguments: ~,\n                                             expression: { '@type': \"uast:Identifier\",\n                                                '@role': [Call, Receiver],\n                                                '@pos': { '@type': \"uast:Positions\",\n                                                   start: { '@type': \"uast:Position\",\n                                                      offset: 416,\n                                                      line: 13,\n                                                      col: 13,\n                                                   },\n                                                   end: { '@type': \"uast:Position\",\n                                                      offset: 418,\n                                                      line: 13,\n                                                      col: 15,\n                                                   },\n                                                },\n                                                Name: \"pw\",\n                                             },\n                                             name: { '@type': \"uast:Identifier\",\n                                                '@role': [Call, Callee],\n                                                '@pos': { '@type': \"uast:Positions\",\n                                                   start: { '@type': \"uast:Position\",\n                                                      offset: 419,\n                                                      line: 13,\n                                                      col: 16,\n                                                   },\n                                                   end: { '@type': \"uast:Position\",\n                                                      offset: 424,\n                                                      line: 13,\n                                                      col: 21,\n                                                   },\n                                                },\n                                                Name: \"close\",\n                                             },\n                                             typeArguments: ~,\n                                          },\n                                       },\n                                    ],\n                                 },\n                                 resources: ~,\n                              },\n                           ],\n                        },\n                        Type: { '@type': \"uast:FunctionType\",\n                           Arguments: [\n                              { '@type': \"uast:Argument\",\n                                 '@pos': { '@type': \"uast:Positions\",\n                                    start: { '@type': \"uast:Position\",\n                                       offset: 125,\n                                       line: 6,\n                                       col: 25,\n                                    },\n                                    end: { '@type': \"uast:Position\",\n                                       offset: 153,\n                                       line: 6,\n                                       col: 53,\n                                    },\n                                 },\n                                 Init: ~,\n                                 MapVariadic: false,\n                                 Name: { '@type': \"uast:Identifier\",\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 146,\n                                          line: 6,\n                                          col: 46,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 153,\n                                          line: 6,\n                                          col: 53,\n                                       },\n                                    },\n                                    Name: \"request\",\n                                 },\n                                 Receiver: false,\n                                 Type: { '@type': \"java:SimpleType\",\n                                    '@role': [Type],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 131,\n                                          line: 6,\n                                          col: 31,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 145,\n                                          line: 6,\n                                          col: 45,\n                                       },\n                                    },\n                                    annotations: ~,\n                                    name: { '@type': \"uast:Identifier\",\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 131,\n                                             line: 6,\n                                             col: 31,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 145,\n                                             line: 6,\n                                             col: 45,\n                                          },\n                                       },\n                                       Name: \"ServletRequest\",\n                                    },\n                                 },\n                                 Variadic: false,\n                              },\n                              { '@type': \"uast:Argument\",\n                                 '@pos': { '@type': \"uast:Positions\",\n                                    start: { '@type': \"uast:Position\",\n                                       offset: 155,\n                                       line: 6,\n                                       col: 55,\n                                    },\n                                    end: { '@type': \"uast:Position\",\n                                       offset: 185,\n                                       line: 6,\n                                       col: 85,\n                                    },\n                                 },\n                                 Init: ~,\n                                 MapVariadic: false,\n                                 Name: { '@type': \"uast:Identifier\",\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 177,\n                                          line: 6,\n                                          col: 77,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 185,\n                                          line: 6,\n                                          col: 85,\n                                       },\n                                    },\n                                    Name: \"response\",\n                                 },\n                                 Receiver: false,\n                                 Type: { '@type': \"java:SimpleType\",\n                                    '@role': [Type],\n                                    '@pos': { '@type': \"uast:Positions\",\n                                       start: { '@type': \"uast:Position\",\n                                          offset: 161,\n                                          line: 6,\n                                          col: 61,\n                                       },\n                                       end: { '@type': \"uast:Position\",\n                                          offset: 176,\n                                          line: 6,\n                                          col: 76,\n                                       },\n                                    },\n                                    annotations: ~,\n                                    name: { '@type': \"uast:Identifier\",\n                                       '@pos': { '@type': \"uast:Positions\",\n                                          start: { '@type': \"uast:Position\",\n                                             offset: 161,\n                                             line: 6,\n                                             col: 61,\n                                          },\n                                          end: { '@type': \"uast:Position\",\n                                             offset: 176,\n                                             line: 6,\n                                             col: 76,\n                                          },\n                                       },\n                                       Name: \"ServletResponse\",\n                                    },\n                                 },\n                                 Variadic: false,\n                              },\n                           ],\n                           Returns: ~,\n                        },\n                     },\n                  },\n                  {\n                     constructor: \"false\",\n                     thrownExceptionTypes: [\n                        { '@type': \"java:SimpleType\",\n                           '@role': [Type],\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 198,\n                                 line: 7,\n                                 col: 12,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 214,\n                                 line: 7,\n                                 col: 28,\n                              },\n                           },\n                           annotations: ~,\n                           name: { '@type': \"uast:Identifier\",\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 198,\n                                    line: 7,\n                                    col: 12,\n                                 },\n                                 end: { '@type': \"uast:Position\",\n                                    offset: 214,\n                                    line: 7,\n                                    col: 28,\n                                 },\n                              },\n                              Name: \"ServletException\",\n                           },\n                        },\n                        { '@type': \"java:SimpleType\",\n                           '@role': [Type],\n                           '@pos': { '@type': \"uast:Positions\",\n                              start: { '@type': \"uast:Position\",\n                                 offset: 216,\n                                 line: 7,\n                                 col: 30,\n                              },\n                              end: { '@type': \"uast:Position\",\n                                 offset: 227,\n                                 line: 7,\n                                 col: 41,\n                              },\n                           },\n                           annotations: ~,\n                           name: { '@type': \"uast:Identifier\",\n                              '@pos': { '@type': \"uast:Positions\",\n                                 start: { '@type': \"uast:Position\",\n                                    offset: 216,\n                                    line: 7,\n                                    col: 30,\n                                 },\n                                 end: { '@type': \"uast:Position\",\n                                    offset: 227,\n                                    line: 7,\n                                    col: 41,\n                                 },\n                              },\n                              Name: \"IOException\",\n                           },\n                        },\n                     ],\n                     typeParameters: ~,\n                  },\n               ],\n            },\n         ],\n         interface: \"false\",\n         javadoc: ~,\n         modifiers: [\n            { '@type': \"java:Modifier\",\n               '@token': \"public\",\n               '@role': [Visibility, World],\n               '@pos': { '@type': \"uast:Positions\",\n                  start: { '@type': \"uast:Position\",\n                     offset: 57,\n                     line: 5,\n                     col: 1,\n                  },\n                  end: { '@type': \"uast:Position\",\n                     offset: 63,\n                     line: 5,\n                     col: 7,\n                  },\n               },\n            },\n         ],\n         name: { '@type': \"uast:Identifier\",\n            '@pos': { '@type': \"uast:Positions\",\n               start: { '@type': \"uast:Position\",\n                  offset: 70,\n                  line: 5,\n                  col: 14,\n               },\n               end: { '@type': \"uast:Position\",\n                  offset: 75,\n                  line: 5,\n                  col: 19,\n               },\n            },\n            Name: \"Hello\",\n         },\n         superInterfaceTypes: ~,\n         superclassType: { '@type': \"java:SimpleType\",\n            '@role': [Type],\n            '@pos': { '@type': \"uast:Positions\",\n               start: { '@type': \"uast:Position\",\n                  offset: 84,\n                  line: 5,\n                  col: 28,\n               },\n               end: { '@type': \"uast:Position\",\n                  offset: 98,\n                  line: 5,\n                  col: 42,\n               },\n            },\n            annotations: ~,\n            name: { '@type': \"uast:Identifier\",\n               '@pos': { '@type': \"uast:Positions\",\n                  start: { '@type': \"uast:Position\",\n                     offset: 84,\n                     line: 5,\n                     col: 28,\n                  },\n                  end: { '@type': \"uast:Position\",\n                     offset: 98,\n                     line: 5,\n                     col: 42,\n                  },\n               },\n               Name: \"GenericServlet\",\n            },\n         },\n         typeParameters: ~,\n      },\n   ],\n}\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003ewhat can be transformed into a prolog program\u003c/summary\u003e\n\u003cp\u003e\n\n```prolog\nvalue0('Visibility').\nvalue1('World').\nvalue2('Declaration').\nvalue3('Type').\narray0([Arg0,Arg1,Arg2,Arg3]) :- value0(Arg0),value1(Arg1),value2(Arg2),value3(Arg3).\nvalue4('java:TypeDeclaration').\nvalue5('false').\nposition0(['uast:Position', 1, 5, 57]).\nposition1(['uast:Position', 7, 5, 63]).\npositions0(['uast:Positions', Start, End]) :- position0(Start), position1(End).\narray1([Arg0,Arg1]) :- value0(Arg0),value1(Arg1).\nvalue6('java:Modifier').\nvalue7('public').\nobject0(Obj) :- positions0(Obj), !.\nobject0(Obj) :- array1(Obj), !.\nobject0(Obj) :- value6(Obj), !.\nobject0(Obj) :- value7(Obj), !.\narray2([Arg0]) :- object0(Arg0).\nposition2(['uast:Position', 2, 16, 445]).\npositions1(['uast:Positions', Start, End]) :- position0(Start), position2(End).\nposition3(['uast:Position', 14, 5, 70]).\nposition4(['uast:Position', 19, 5, 75]).\npositions2(['uast:Positions', Start, End]) :- position3(Start), position4(End).\nrole0('Identifier').\nidentifier0(['uast:Identifier', 'Hello', Pos, [Role0]]) :- positions2(Pos),role0(Role0).\nposition5(['uast:Position', 28, 5, 84]).\nposition6(['uast:Position', 42, 5, 98]).\npositions3(['uast:Positions', Start, End]) :- position5(Start), position6(End).\narray3([Arg0]) :- value3(Arg0).\nvalue8('java:SimpleType').\npositions4(['uast:Positions', Start, End]) :- position5(Start), position6(End).\nidentifier1(['uast:Identifier', 'GenericServlet', Pos, [Role0]]) :- positions4(Pos),role0(Role0).\nobject1(Obj) :- positions3(Obj), !.\nobject1(Obj) :- array3(Obj), !.\nobject1(Obj) :- value8(Obj), !.\nobject1(Obj) :- identifier1(Obj), !.\nposition7(['uast:Position', 5, 6, 105]).\nposition8(['uast:Position', 6, 15, 443]).\npositions5(['uast:Positions', Start, End]) :- position7(Start), position8(End).\nposition9(['uast:Position', 11, 6, 111]).\npositions6(['uast:Positions', Start, End]) :- position7(Start), position9(End).\narray4([Arg0,Arg1]) :- value0(Arg0),value1(Arg1).\nobject2(Obj) :- value6(Obj), !.\nobject2(Obj) :- value7(Obj), !.\nobject2(Obj) :- positions6(Obj), !.\nobject2(Obj) :- array4(Obj), !.\narray5([Arg0]) :- object2(Arg0).\npositions7(['uast:Positions', _, _]).\npositions8(['uast:Positions', _, _]).\nposition10(['uast:Position', 46, 6, 146]).\nposition11(['uast:Position', 53, 6, 153]).\npositions9(['uast:Positions', Start, End]) :- position10(Start), position11(End).\nidentifier2(['uast:Identifier', 'request', Pos, [Role0]]) :- positions9(Pos),role0(Role0).\nposition12(['uast:Position', 31, 6, 131]).\nposition13(['uast:Position', 45, 6, 145]).\npositions10(['uast:Positions', Start, End]) :- position12(Start), position13(End).\narray6([Arg0]) :- value3(Arg0).\npositions11(['uast:Positions', Start, End]) :- position12(Start), position13(End).\nidentifier3(['uast:Identifier', 'ServletRequest', Pos, [Role0]]) :- positions11(Pos),role0(Role0).\nobject3(Obj) :- value8(Obj), !.\nobject3(Obj) :- identifier3(Obj), !.\nobject3(Obj) :- positions10(Obj), !.\nobject3(Obj) :- array6(Obj), !.\nposition14(['uast:Position', 25, 6, 125]).\npositions12(['uast:Positions', Start, End]) :- position14(Start), position11(End).\nargument0(['uast:Argument', Name, Type, _, false, false, false, Pos]) :- identifier2(Name),object3(Type),positions12(Pos).\nposition15(['uast:Position', 77, 6, 177]).\nposition16(['uast:Position', 85, 6, 185]).\npositions13(['uast:Positions', Start, End]) :- position15(Start), position16(End).\nidentifier4(['uast:Identifier', 'response', Pos, [Role0]]) :- positions13(Pos),role0(Role0).\nposition17(['uast:Position', 61, 6, 161]).\nposition18(['uast:Position', 76, 6, 176]).\npositions14(['uast:Positions', Start, End]) :- position17(Start), position18(End).\narray7([Arg0]) :- value3(Arg0).\npositions15(['uast:Positions', Start, End]) :- position17(Start), position18(End).\nidentifier5(['uast:Identifier', 'ServletResponse', Pos, [Role0]]) :- positions15(Pos),role0(Role0).\nobject4(Obj) :- positions14(Obj), !.\nobject4(Obj) :- array7(Obj), !.\nobject4(Obj) :- value8(Obj), !.\nobject4(Obj) :- identifier5(Obj), !.\nposition19(['uast:Position', 55, 6, 155]).\npositions16(['uast:Positions', Start, End]) :- position19(Start), position16(End).\nargument1(['uast:Argument', Name, Type, _, false, false, false, Pos]) :- identifier4(Name),object4(Type),positions16(Pos).\nfunction_type0(['uast:FunctionType', [Arg0,Arg1], [], Pos]) :- argument0(Arg0),argument1(Arg1),positions8(Pos).\nposition20(['uast:Position', 42, 7, 228]).\npositions17(['uast:Positions', Start, End]) :- position20(Start), position8(End).\nvalue9('java:ExpressionStatement').\nposition21(['uast:Position', 9, 8, 238]).\nposition22(['uast:Position', 45, 8, 274]).\npositions18(['uast:Positions', Start, End]) :- position21(Start), position22(End).\nvalue10('Expression').\nvalue11('Call').\narray8([Arg0,Arg1]) :- value10(Arg0),value11(Arg1).\nvalue12('java:MethodInvocation').\nposition23(['uast:Position', 18, 8, 247]).\nposition24(['uast:Position', 32, 8, 261]).\npositions19(['uast:Positions', Start, End]) :- position23(Start), position24(End).\nidentifier6(['uast:Identifier', 'setContentType', Pos, [Role0]]) :- positions19(Pos),role0(Role0).\nposition25(['uast:Position', 17, 8, 246]).\npositions20(['uast:Positions', Start, End]) :- position21(Start), position25(End).\nidentifier7(['uast:Identifier', 'response', Pos, [Role0]]) :- positions20(Pos),role0(Role0).\nvalue13('Argument').\nvalue14('Positional').\narray9([Arg0,Arg1,Arg2]) :- value11(Arg0),value13(Arg1),value14(Arg2).\nvalue15('uast:String').\nvalue16('').\nvalue17('text/html').\nposition26(['uast:Position', 33, 8, 262]).\nposition27(['uast:Position', 44, 8, 273]).\npositions21(['uast:Positions', Start, End]) :- position26(Start), position27(End).\nobject5(Obj) :- value16(Obj), !.\nobject5(Obj) :- value17(Obj), !.\nobject5(Obj) :- positions21(Obj), !.\nobject5(Obj) :- array9(Obj), !.\nobject5(Obj) :- value15(Obj), !.\narray10([Arg0]) :- object5(Arg0).\nobject6(Obj) :- positions18(Obj), !.\nobject6(Obj) :- array8(Obj), !.\nobject6(Obj) :- value12(Obj), !.\nobject6(Obj) :- identifier6(Obj), !.\nobject6(Obj) :- identifier7(Obj), !.\nobject6(Obj) :- array10(Obj), !.\nposition28(['uast:Position', 46, 8, 275]).\npositions22(['uast:Positions', Start, End]) :- position21(Start), position28(End).\nvalue18('Statement').\narray11([Arg0]) :- value18(Arg0).\nobject7(Obj) :- value9(Obj), !.\nobject7(Obj) :- object6(Obj), !.\nobject7(Obj) :- positions22(Obj), !.\nobject7(Obj) :- array11(Obj), !.\nposition29(['uast:Position', 9, 9, 284]).\nposition30(['uast:Position', 14, 9, 289]).\npositions23(['uast:Positions', Start, End]) :- position29(Start), position30(End).\nvalue19('Incomplete').\narray12([Arg0]) :- value19(Arg0).\nvalue20('final').\nobject8(Obj) :- array12(Obj), !.\nobject8(Obj) :- value6(Obj), !.\nobject8(Obj) :- value20(Obj), !.\nobject8(Obj) :- positions23(Obj), !.\narray13([Arg0]) :- object8(Arg0).\nposition31(['uast:Position', 32, 9, 307]).\nposition32(['uast:Position', 52, 9, 327]).\npositions24(['uast:Positions', Start, End]) :- position31(Start), position32(End).\narray14([Arg0,Arg1]) :- value10(Arg0),value11(Arg1).\nposition33(['uast:Position', 41, 9, 316]).\nposition34(['uast:Position', 50, 9, 325]).\npositions25(['uast:Positions', Start, End]) :- position33(Start), position34(End).\nidentifier8(['uast:Identifier', 'getWriter', Pos, [Role0]]) :- positions25(Pos),role0(Role0).\nposition35(['uast:Position', 40, 9, 315]).\npositions26(['uast:Positions', Start, End]) :- position31(Start), position35(End).\nidentifier9(['uast:Identifier', 'response', Pos, [Role0]]) :- positions26(Pos),role0(Role0).\nobject9(Obj) :- identifier8(Obj), !.\nobject9(Obj) :- identifier9(Obj), !.\nobject9(Obj) :- positions24(Obj), !.\nobject9(Obj) :- array14(Obj), !.\nobject9(Obj) :- value12(Obj), !.\nposition36(['uast:Position', 27, 9, 302]).\npositions27(['uast:Positions', Start, End]) :- position36(Start), position32(End).\nvalue21('Variable').\narray15([Arg0,Arg1]) :- value2(Arg0),value21(Arg1).\nvalue22('java:VariableDeclarationFragment').\nposition37(['uast:Position', 29, 9, 304]).\npositions28(['uast:Positions', Start, End]) :- position36(Start), position37(End).\nidentifier10(['uast:Identifier', 'pw', Pos, [Role0]]) :- positions28(Pos),role0(Role0).\nobject10(Obj) :- object9(Obj), !.\nobject10(Obj) :- positions27(Obj), !.\nobject10(Obj) :- array15(Obj), !.\nobject10(Obj) :- value22(Obj), !.\nobject10(Obj) :- identifier10(Obj), !.\narray16([Arg0]) :- object10(Arg0).\nposition38(['uast:Position', 15, 9, 290]).\nposition39(['uast:Position', 26, 9, 301]).\npositions29(['uast:Positions', Start, End]) :- position38(Start), position39(End).\narray17([Arg0]) :- value3(Arg0).\npositions30(['uast:Positions', Start, End]) :- position38(Start), position39(End).\nidentifier11(['uast:Identifier', 'PrintWriter', Pos, [Role0]]) :- positions30(Pos),role0(Role0).\nobject11(Obj) :- positions29(Obj), !.\nobject11(Obj) :- array17(Obj), !.\nobject11(Obj) :- value8(Obj), !.\nobject11(Obj) :- identifier11(Obj), !.\nposition40(['uast:Position', 53, 9, 328]).\npositions31(['uast:Positions', Start, End]) :- position29(Start), position40(End).\narray18([Arg0,Arg1,Arg2]) :- value18(Arg0),value2(Arg1),value21(Arg2).\nvalue23('java:VariableDeclarationStatement').\nobject12(Obj) :- array13(Obj), !.\nobject12(Obj) :- array16(Obj), !.\nobject12(Obj) :- object11(Obj), !.\nobject12(Obj) :- positions31(Obj), !.\nobject12(Obj) :- array18(Obj), !.\nobject12(Obj) :- value23(Obj), !.\nposition41(['uast:Position', 9, 10, 337]).\nposition42(['uast:Position', 10, 14, 437]).\npositions32(['uast:Positions', Start, End]) :- position41(Start), position42(End).\nvalue24('Try').\narray19([Arg0,Arg1]) :- value18(Arg0),value24(Arg1).\nvalue25('java:TryStatement').\nposition43(['uast:Position', 13, 10, 341]).\nposition44(['uast:Position', 10, 12, 393]).\npositions33(['uast:Positions', Start, End]) :- position43(Start), position44(End).\nposition45(['uast:Position', 24, 11, 366]).\nposition46(['uast:Position', 39, 11, 381]).\npositions34(['uast:Positions', Start, End]) :- position45(Start), position46(End).\narray20([Arg0,Arg1,Arg2]) :- value11(Arg0),value13(Arg1),value14(Arg2).\nvalue26('Hello, world!').\nobject13(Obj) :- value16(Obj), !.\nobject13(Obj) :- value26(Obj), !.\nobject13(Obj) :- positions34(Obj), !.\nobject13(Obj) :- array20(Obj), !.\nobject13(Obj) :- value15(Obj), !.\narray21([Arg0]) :- object13(Arg0).\nposition47(['uast:Position', 13, 11, 355]).\nposition48(['uast:Position', 40, 11, 382]).\npositions35(['uast:Positions', Start, End]) :- position47(Start), position48(End).\narray22([Arg0,Arg1]) :- value10(Arg0),value11(Arg1).\nposition49(['uast:Position', 16, 11, 358]).\nposition50(['uast:Position', 23, 11, 365]).\npositions36(['uast:Positions', Start, End]) :- position49(Start), position50(End).\nidentifier12(['uast:Identifier', 'println', Pos, [Role0]]) :- positions36(Pos),role0(Role0).\nposition51(['uast:Position', 15, 11, 357]).\npositions37(['uast:Positions', Start, End]) :- position47(Start), position51(End).\nidentifier13(['uast:Identifier', 'pw', Pos, [Role0]]) :- positions37(Pos),role0(Role0).\nobject14(Obj) :- value12(Obj), !.\nobject14(Obj) :- identifier12(Obj), !.\nobject14(Obj) :- identifier13(Obj), !.\nobject14(Obj) :- array21(Obj), !.\nobject14(Obj) :- positions35(Obj), !.\nobject14(Obj) :- array22(Obj), !.\nposition52(['uast:Position', 41, 11, 383]).\npositions38(['uast:Positions', Start, End]) :- position47(Start), position52(End).\narray23([Arg0]) :- value18(Arg0).\nobject15(Obj) :- value9(Obj), !.\nobject15(Obj) :- object14(Obj), !.\nobject15(Obj) :- positions38(Obj), !.\nobject15(Obj) :- array23(Obj), !.\nblock0(['uast:Block', [Stmt0], Pos]) :- positions33(Pos),object15(Stmt0).\nposition53(['uast:Position', 19, 12, 402]).\npositions39(['uast:Positions', Start, End]) :- position53(Start), position42(End).\nposition54(['uast:Position', 13, 13, 416]).\nposition55(['uast:Position', 24, 13, 427]).\npositions40(['uast:Positions', Start, End]) :- position54(Start), position55(End).\narray24([Arg0]) :- value18(Arg0).\nposition56(['uast:Position', 23, 13, 426]).\npositions41(['uast:Positions', Start, End]) :- position54(Start), position56(End).\narray25([Arg0,Arg1]) :- value10(Arg0),value11(Arg1).\nposition57(['uast:Position', 16, 13, 419]).\nposition58(['uast:Position', 21, 13, 424]).\npositions42(['uast:Positions', Start, End]) :- position57(Start), position58(End).\nidentifier14(['uast:Identifier', 'close', Pos, [Role0]]) :- positions42(Pos),role0(Role0).\nposition59(['uast:Position', 15, 13, 418]).\npositions43(['uast:Positions', Start, End]) :- position54(Start), position59(End).\nidentifier15(['uast:Identifier', 'pw', Pos, [Role0]]) :- positions43(Pos),role0(Role0).\nobject16(Obj) :- positions41(Obj), !.\nobject16(Obj) :- array25(Obj), !.\nobject16(Obj) :- value12(Obj), !.\nobject16(Obj) :- identifier14(Obj), !.\nobject16(Obj) :- identifier15(Obj), !.\nobject17(Obj) :- value9(Obj), !.\nobject17(Obj) :- object16(Obj), !.\nobject17(Obj) :- positions40(Obj), !.\nobject17(Obj) :- array24(Obj), !.\nblock1(['uast:Block', [Stmt0], Pos]) :- positions39(Pos),object17(Stmt0).\nobject18(Obj) :- positions32(Obj), !.\nobject18(Obj) :- array19(Obj), !.\nobject18(Obj) :- value25(Obj), !.\nobject18(Obj) :- block0(Obj), !.\nobject18(Obj) :- block1(Obj), !.\nblock2(['uast:Block', [Stmt0,Stmt1,Stmt2], Pos]) :- positions17(Pos),object7(Stmt0),object12(Stmt1),object18(Stmt2).\npositions44(['uast:Positions', _, _]).\nfunction0(['uast:Function', FnType, Body, Pos]) :- function_type0(FnType),block2(Body),positions44(Pos).\nposition60(['uast:Position', 17, 6, 117]).\nposition61(['uast:Position', 24, 6, 124]).\npositions45(['uast:Positions', Start, End]) :- position60(Start), position61(End).\nidentifier16(['uast:Identifier', 'service', Pos, [Role0]]) :- positions45(Pos),role0(Role0).\nalias0(['uast:Alias', Name, Node, Pos]) :- identifier16(Name),function0(Node),positions7(Pos).\nposition62(['uast:Position', 12, 7, 198]).\nposition63(['uast:Position', 28, 7, 214]).\npositions46(['uast:Positions', Start, End]) :- position62(Start), position63(End).\narray26([Arg0]) :- value3(Arg0).\npositions47(['uast:Positions', Start, End]) :- position62(Start), position63(End).\nidentifier17(['uast:Identifier', 'ServletException', Pos, [Role0]]) :- positions47(Pos),role0(Role0).\nobject19(Obj) :- positions46(Obj), !.\nobject19(Obj) :- array26(Obj), !.\nobject19(Obj) :- value8(Obj), !.\nobject19(Obj) :- identifier17(Obj), !.\nposition64(['uast:Position', 30, 7, 216]).\nposition65(['uast:Position', 41, 7, 227]).\npositions48(['uast:Positions', Start, End]) :- position64(Start), position65(End).\narray27([Arg0]) :- value3(Arg0).\npositions49(['uast:Positions', Start, End]) :- position64(Start), position65(End).\nidentifier18(['uast:Identifier', 'IOException', Pos, [Role0]]) :- positions49(Pos),role0(Role0).\nobject20(Obj) :- array27(Obj), !.\nobject20(Obj) :- value8(Obj), !.\nobject20(Obj) :- identifier18(Obj), !.\nobject20(Obj) :- positions48(Obj), !.\narray28([Arg0,Arg1]) :- object19(Arg0),object20(Arg1).\nobject21(Obj) :- value5(Obj), !.\nobject21(Obj) :- array28(Obj), !.\nfunction_group0(['uast:FunctionGroup', [Node0,Node1,Node2], Pos]) :- positions5(Pos),array5(Node0),alias0(Node1),object21(Node2).\narray29([Arg0]) :- function_group0(Arg0).\nobject22(Obj) :- array2(Obj), !.\nobject22(Obj) :- positions1(Obj), !.\nobject22(Obj) :- identifier0(Obj), !.\nobject22(Obj) :- object1(Obj), !.\nobject22(Obj) :- array29(Obj), !.\nobject22(Obj) :- array0(Obj), !.\nobject22(Obj) :- value4(Obj), !.\nobject22(Obj) :- value5(Obj), !.\narray30([Arg0]) :- object22(Arg0).\nposition66(['uast:Position', 1, 1, 0]).\nposition67(['uast:Position', 1, 17, 446]).\npositions50(['uast:Positions', Start, End]) :- position66(Start), position67(End).\nvalue27('File').\narray31([Arg0]) :- value27(Arg0).\nvalue28('java:CompilationUnit').\nposition68(['uast:Position', 14, 1, 13]).\npositions51(['uast:Positions', Start, End]) :- position66(Start), position68(End).\ncomment0(['uast:Comment', ' ', '', '', 'Hello.java', false, Pos]) :- positions51(Pos).\narray32([Arg0]) :- comment0(Arg0).\nposition69(['uast:Position', 1, 2, 14]).\nposition70(['uast:Position', 18, 2, 31]).\npositions52(['uast:Positions', Start, End]) :- position69(Start), position70(End).\nposition71(['uast:Position', 8, 2, 21]).\nposition72(['uast:Position', 15, 2, 28]).\npositions53(['uast:Positions', Start, End]) :- position71(Start), position72(End).\nposition73(['uast:Position', 12, 2, 25]).\npositions54(['uast:Positions', Start, End]) :- position71(Start), position73(End).\nidentifier19(['uast:Identifier', 'java', Pos, [Role0]]) :- positions54(Pos),role0(Role0).\nposition74(['uast:Position', 13, 2, 26]).\npositions55(['uast:Positions', Start, End]) :- position74(Start), position72(End).\nidentifier20(['uast:Identifier', 'io', Pos, [Role0]]) :- positions55(Pos),role0(Role0).\nqualified_identifier0(['uast:QualifiedIdentifier', [Name0,Name1], Pos]) :- positions53(Pos),identifier19(Name0),identifier20(Name1).\nimport0(['uast:Import', Path, Pos]) :- qualified_identifier0(Path),positions52(Pos).\nposition75(['uast:Position', 1, 3, 32]).\nposition76(['uast:Position', 24, 3, 55]).\npositions56(['uast:Positions', Start, End]) :- position75(Start), position76(End).\nposition77(['uast:Position', 8, 3, 39]).\nposition78(['uast:Position', 21, 3, 52]).\npositions57(['uast:Positions', Start, End]) :- position77(Start), position78(End).\nposition79(['uast:Position', 13, 3, 44]).\npositions58(['uast:Positions', Start, End]) :- position77(Start), position79(End).\nidentifier21(['uast:Identifier', 'javax', Pos, [Role0]]) :- positions58(Pos),role0(Role0).\nposition80(['uast:Position', 14, 3, 45]).\npositions59(['uast:Positions', Start, End]) :- position80(Start), position78(End).\nidentifier22(['uast:Identifier', 'servlet', Pos, [Role0]]) :- positions59(Pos),role0(Role0).\nqualified_identifier1(['uast:QualifiedIdentifier', [Name0,Name1], Pos]) :- positions57(Pos),identifier21(Name0),identifier22(Name1).\nimport1(['uast:Import', Path, Pos]) :- qualified_identifier1(Path),positions56(Pos).\narray33([Arg0,Arg1]) :- import0(Arg0),import1(Arg1).\nobject23(Obj) :- array30(Obj), !.\nobject23(Obj) :- positions50(Obj), !.\nobject23(Obj) :- array31(Obj), !.\nobject23(Obj) :- value28(Obj), !.\nobject23(Obj) :- array32(Obj), !.\nobject23(Obj) :- array33(Obj), !.\n\n% value(Val).\nvalue(X) :- value0(X);value1(X);value2(X);value3(X);value4(X);value5(X);value6(X);value7(X);value8(X);value9(X);value10(X);value11(X);value12(X);value13(X);value14(X);value15(X);value16(X);value17(X);value18(X);value19(X);value20(X);value21(X);value22(X);value23(X);value24(X);value25(X);value26(X);value27(X);value28(X).\n\n% array([Arguments]).\narray(X) :- array0(X);array1(X);array2(X);array3(X);array4(X);array5(X);array6(X);array7(X);array8(X);array9(X);array10(X);array11(X);array12(X);array13(X);array14(X);array15(X);array16(X);array17(X);array18(X);array19(X);array20(X);array21(X);array22(X);array23(X);array24(X);array25(X);array26(X);array27(X);array28(X);array29(X);array30(X);array31(X);array32(X);array33(X).\n\n% object(Obj).\nobject(X) :- object0(X);object1(X);object2(X);object3(X);object4(X);object5(X);object6(X);object7(X);object8(X);object9(X);object10(X);object11(X);object12(X);object13(X);object14(X);object15(X);object16(X);object17(X);object18(X);object19(X);object20(X);object21(X);object22(X);object23(X).\n\n% role(Name).\nrole(X) :- role0(X).\n\n% position([Type, Col, Line, Offset]).\nposition(X) :- position0(X);position1(X);position2(X);position3(X);position4(X);position5(X);position6(X);position7(X);position8(X);position9(X);position10(X);position11(X);position12(X);position13(X);position14(X);position15(X);position16(X);position17(X);position18(X);position19(X);position20(X);position21(X);position22(X);position23(X);position24(X);position25(X);position26(X);position27(X);position28(X);position29(X);position30(X);position31(X);position32(X);position33(X);position34(X);position35(X);position36(X);position37(X);position38(X);position39(X);position40(X);position41(X);position42(X);position43(X);position44(X);position45(X);position46(X);position47(X);position48(X);position49(X);position50(X);position51(X);position52(X);position53(X);position54(X);position55(X);position56(X);position57(X);position58(X);position59(X);position60(X);position61(X);position62(X);position63(X);position64(X);position65(X);position66(X);position67(X);position68(X);position69(X);position70(X);position71(X);position72(X);position73(X);position74(X);position75(X);position76(X);position77(X);position78(X);position79(X);position80(X).\n\n% positions([Type, Start, End]).\npositions(X) :- positions0(X);positions1(X);positions2(X);positions3(X);positions4(X);positions5(X);positions6(X);positions7(X);positions8(X);positions9(X);positions10(X);positions11(X);positions12(X);positions13(X);positions14(X);positions15(X);positions16(X);positions17(X);positions18(X);positions19(X);positions20(X);positions21(X);positions22(X);positions23(X);positions24(X);positions25(X);positions26(X);positions27(X);positions28(X);positions29(X);positions30(X);positions31(X);positions32(X);positions33(X);positions34(X);positions35(X);positions36(X);positions37(X);positions38(X);positions39(X);positions40(X);positions41(X);positions42(X);positions43(X);positions44(X);positions45(X);positions46(X);positions47(X);positions48(X);positions49(X);positions50(X);positions51(X);positions52(X);positions53(X);positions54(X);positions55(X);positions56(X);positions57(X);positions58(X);positions59(X).\n\n% identifier([Type, Name, Pos, [Roles]]).\nidentifier(X) :- identifier0(X);identifier1(X);identifier2(X);identifier3(X);identifier4(X);identifier5(X);identifier6(X);identifier7(X);identifier8(X);identifier9(X);identifier10(X);identifier11(X);identifier12(X);identifier13(X);identifier14(X);identifier15(X);identifier16(X);identifier17(X);identifier18(X);identifier19(X);identifier20(X);identifier21(X);identifier22(X).\n\n% qualified_identifier([Type, [Names], Pos]).\nqualified_identifier(X) :- qualified_identifier0(X);qualified_identifier1(X).\n\n% comment([Type, Prefix, Suffix, Tab, Text, Block, Pos]).\ncomment(X) :- comment0(X).\n\n% group([Type, [Nodes], Pos]).\ngroup(_) :- fail.\n\n% function_group([Type, [Nodes], Pos]).\nfunction_group(X) :- function_group0(X).\n\n% block([Type, [Statements], Pos]).\nblock(X) :- block0(X);block1(X);block2(X).\n\n% alias([Type, Name, Node, Pos]).\nalias(X) :- alias0(X).\n\n% import([Type, Path, Pos]).\nimport(X) :- import0(X);import1(X).\n\n% runtime_import([Type, Path, Pos]).\nruntime_import(_) :- fail.\n\n% runtime_reimport([Type, Path, Pos]).\nruntime_reimport(_) :- fail.\n\n% inline_import([Type, Path, Pos]).\ninline_import(_) :- fail.\n\n% argument([Type, Name, ArgType, Init, Variadic, MapVariadic, Receiver, Pos]).\nargument(X) :- argument0(X);argument1(X).\n\n% function_type([Type, [Arguments], [Returns], Pos]).\nfunction_type(X) :- function_type0(X).\n\n% function([Type, FuncType, Body, Pos]).\nfunction(X) :- function0(X).\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\nIf we want to extract just import paths, we'll need to postprocess _import_ solutions.\n\nBecause it's easier to do it in prolog, we can also load some extra prolog modules.\n\nA `prolog/import.pl` file contains a few prolog _helpers_ which let you extract identifier names from imports and join them together.\n\nWe can load `prolog/import.pl` module and use `import_path/1` predicate:\n\n```bash\n./qpl -f ./examples/java/Hello.java.pl -f ./prolog/import.pl -q \"import_path(Path).\"\n\nPath = [java,io]\n\nPath = [javax,servlet]\n```\n\n_Happy hacking!_\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmloncode%2Fuast2pl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmloncode%2Fuast2pl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmloncode%2Fuast2pl/lists"}