{"id":546,"date":"2021-09-16T11:56:35","date_gmt":"2021-09-16T09:56:35","guid":{"rendered":"https:\/\/members.loria.fr\/RPechoux\/?page_id=546"},"modified":"2021-09-16T13:26:48","modified_gmt":"2021-09-16T11:26:48","slug":"software","status":"publish","type":"page","link":"https:\/\/members.loria.fr\/RPechoux\/software\/","title":{"rendered":"Software"},"content":{"rendered":"<h1 data-sourcepos=\"1:1-1:18\">ComplexityParser<\/h1>\n<p dir=\"auto\" data-sourcepos=\"3:1-5:103\">ComplexityParser<sup class=\"footnote-ref\"><a id=\"fnref1-8883\" href=\"#fn1-8883\">1<\/a><\/sup> is a static complexity analyzer for Java programs based on tier-based typing following <sup class=\"footnote-ref\"><a id=\"fnref2-8883\" href=\"#fn2-8883\">2<\/a><\/sup> and <sup class=\"footnote-ref\"><a id=\"fnref3-8883\" href=\"#fn3-8883\">3<\/a><\/sup>. If a program is typable, this guarantees its runtime to be polynomial on the condition that it halts. The type inference is automatic; its complexity is linear in the size of the input program in practice.<\/p>\n<p dir=\"auto\" data-sourcepos=\"7:1-7:88\">The code is under the <a href=\"https:\/\/apache.org\/licenses\/LICENSE-2.0.txt\" target=\"_blank\" rel=\"nofollow noreferrer noopener\">Apache 2.0 License<\/a>.<\/p>\n<h2 data-sourcepos=\"9:1-9:11\"><a id=\"user-content-download\" class=\"anchor\" href=\"#download\" aria-hidden=\"true\"><\/a>Download<\/h2>\n<p dir=\"auto\" style=\"text-align: left\" data-sourcepos=\"11:1-12:45\">The current 1.0 version can be downloaded from gitlab :<\/p>\n<p dir=\"auto\" style=\"text-align: left\" data-sourcepos=\"11:1-12:45\"><a href=\"https:\/\/gitlab.inria.fr\/complexityparser\/complexityparser\/-\/archive\/v1.0\/complexityparser-v1.0.zip\">https:\/\/gitlab.inria.fr\/complexityparser\/complexityparser\/-\/archive\/v1.0\/complexityparser-v1.0.zip<\/a>.<\/p>\n<p dir=\"auto\" style=\"text-align: left\" data-sourcepos=\"11:1-12:45\">You can also clone this repository using git.<\/p>\n<p dir=\"auto\" data-sourcepos=\"14:1-14:209\">The examples suite is in the <code>examples\/<\/code> directory and is available for download as a zipfile:<\/p>\n<p dir=\"auto\" data-sourcepos=\"14:1-14:209\"><a href=\"https:\/\/gitlab.inria.fr\/complexityparser\/complexityparser\/-\/archive\/v1.0\/complexityparser-1.0.zip?path=examples\">https:\/\/gitlab.inria.fr\/complexityparser\/complexityparser\/-\/archive\/v1.0\/complexityparser-1.0.zip?path=examples<\/a>.<\/p>\n<h2 data-sourcepos=\"17:1-17:10\"><a id=\"user-content-compile\" class=\"anchor\" href=\"#compile\" aria-hidden=\"true\"><\/a>Compile<\/h2>\n<h3 data-sourcepos=\"19:1-19:14\"><a id=\"user-content-with-maven\" class=\"anchor\" href=\"#with-maven\" aria-hidden=\"true\"><\/a>With maven<\/h3>\n<p dir=\"auto\" data-sourcepos=\"20:1-20:56\">To compile this program using maven, execute the command<\/p>\n<pre class=\"code highlight js-syntax-highlight language-plaintext white\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">mvn package<\/span><\/code><\/pre>\n<h2 data-sourcepos=\"26:1-26:6\"><a id=\"user-content-run\" class=\"anchor\" href=\"#run\" aria-hidden=\"true\"><\/a>Run<\/h2>\n<p dir=\"auto\" data-sourcepos=\"28:1-28:90\">Compilation will create an executable jar inside the <code>target\/<\/code> folder that can be run with<\/p>\n<pre class=\"code highlight js-syntax-highlight language-plaintext white\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">java -jar target\/complexity-1.0.jar<\/span><\/code><\/pre>\n<p dir=\"auto\" data-sourcepos=\"33:1-33:65\">Once the application has opened, you are presented with 3 panels:<\/p>\n<ol data-sourcepos=\"34:1-37:0\">\n<li data-sourcepos=\"34:1-34:33\">on the left, the analyzed code<\/li>\n<li data-sourcepos=\"35:1-35:45\">in the center, the parse tree of this code<\/li>\n<li data-sourcepos=\"36:1-37:0\">on the right, the results of the typing inference.<\/li>\n<\/ol>\n<p dir=\"auto\" data-sourcepos=\"38:1-43:51\">The code in the left panel can be edited directly. When you click on the update button or press the <code>F6<\/code> key the code will be analyzed, the parse tree will be updated and the right panel will show information about (successful or unsuccessful) typing operations and the final result. If the <code>Final Result<\/code> is 0 or 1, it means that the typing was successful: the code is polytime provided it halts. If the <code>Final Result<\/code> is <code>None<\/code>, the typing failed.<\/p>\n<p dir=\"auto\" data-sourcepos=\"45:1-48:67\">The <code>File &gt; Open<\/code> menu or the <code>Ctrl - o<\/code> shortcut can be used to open a file and analyze it instead of writing the code in the left panel. The code in the left panel can still be edited but it will have no effect on the loaded file (no changes are or can be saved).<\/p>\n<h2 data-sourcepos=\"50:1-50:15\"><a id=\"user-content-dependencies\" class=\"anchor\" href=\"#dependencies\" aria-hidden=\"true\"><\/a>Dependencies<\/h2>\n<p dir=\"auto\" data-sourcepos=\"52:1-53:78\">This program uses the ANTLR framework to generate a parser, this is the only dependency and it will be downloaded automatically if you compile the program with maven.<\/p>\n<h2 data-sourcepos=\"55:1-55:10\"><a id=\"user-content-authors\" class=\"anchor\" href=\"#authors\" aria-hidden=\"true\"><\/a>Authors<\/h2>\n<p dir=\"auto\" data-sourcepos=\"57:1-57:69\">Emmanuel Hainry, Emmanuel Jeandel, Romain P\u00e9choux, Olivier Zeyen, Nishigandha Yadav<\/p>\n<h2 data-sourcepos=\"59:1-59:13\"><a id=\"user-content-references\" class=\"anchor\" href=\"#references\" aria-hidden=\"true\"><\/a>References<\/h2>\n<section class=\"footnotes\">\n<ol>\n<li id=\"fn1-8883\">\n<p data-sourcepos=\"63:12-63:276\">Emmanuel Hainry, Emmanuel Jeandel, Romain P\u00e9choux, and Olivier Zeyen. <strong>ComplexityParser: an automatic tool for certifying poly-time complexity of Java programs<\/strong>. <em>In<\/em> International Colloquium on Theoretical Aspects of Computing (ICTAC), LNCS, volume 12819, 2021.<\/p>\n<\/li>\n<li id=\"fn2-8883\">\n<p data-sourcepos=\"61:10-61:133\">Emmanuel Hainry and Romain P\u00e9choux. <strong>Objects in polynomial time<\/strong>. <em>In<\/em> APLAS 2015, LNCS, pages 387\u2013404. Springer, 2015.<\/p>\n<\/li>\n<li id=\"fn3-8883\">\n<p data-sourcepos=\"62:10-62:160\">Emmanuel Hainry and Romain P\u00e9choux. <strong>A type-based complexity analysis of object oriented programs<\/strong>. Information and Computation, 261:78\u2013115, 2018.<\/p>\n<\/li>\n<\/ol>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>ComplexityParser<\/p>\n<p dir=\"auto\" data-sourcepos=\"3:1-5:103\">ComplexityParser<a id=\"fnref1-8883\" href=\"#fn1-8883\">1<\/a> is a static complexity analyzer for Java programs based on tier-based typing following <a id=\"fnref2-8883\" href=\"#fn2-8883\">2<\/a> and <a id=\"fnref3-8883\" href=\"#fn3-8883\">3<\/a>. If a program is typable, this guarantees its runtime to be polynomial on the condition that it halts. The type inference is automatic; its complexity is linear in the size of the input program in practice.<\/p>\n<p dir=\"auto\" data-sourcepos=\"7:1-7:88\">The code is under the <a href=\"https:\/\/apache.org\/licenses\/LICENSE-2.0.txt\" target=\"_blank\" rel=\"nofollow noreferrer noopener\">Apache 2.0 License<\/a>.<\/p>\n<p><a id=\"user-content-download\" class=\"anchor\" href=\"#download\" aria-hidden=\"true\"><\/a>Download<\/p>\n<p dir=\"auto\" style=\"text-align: left\" data-sourcepos=\"11:1-12:45\">The current 1.0 version can be downloaded from gitlab :<\/p>\n<p dir=\"auto\" style=\"text-align: left\" data-sourcepos=\"11:1-12:45\"><a href=\"https:\/\/gitlab.inria.fr\/complexityparser\/complexityparser\/-\/archive\/v1.0\/complexityparser-v1.0.zip\">https:\/\/gitlab.inria.fr\/complexityparser\/complexityparser\/-\/archive\/v1.0\/complexityparser-v1.0.zip<\/a>.<\/p>\n<p dir=\"auto\" style=\"text-align: left\" data-sourcepos=\"11:1-12:45\">You can also clone this repository using git.<\/p>\n","protected":false},"author":96,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-546","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/members.loria.fr\/RPechoux\/wp-json\/wp\/v2\/pages\/546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/members.loria.fr\/RPechoux\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/members.loria.fr\/RPechoux\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/members.loria.fr\/RPechoux\/wp-json\/wp\/v2\/users\/96"}],"replies":[{"embeddable":true,"href":"https:\/\/members.loria.fr\/RPechoux\/wp-json\/wp\/v2\/comments?post=546"}],"version-history":[{"count":4,"href":"https:\/\/members.loria.fr\/RPechoux\/wp-json\/wp\/v2\/pages\/546\/revisions"}],"predecessor-version":[{"id":555,"href":"https:\/\/members.loria.fr\/RPechoux\/wp-json\/wp\/v2\/pages\/546\/revisions\/555"}],"wp:attachment":[{"href":"https:\/\/members.loria.fr\/RPechoux\/wp-json\/wp\/v2\/media?parent=546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}