{ "info": { "author": "minamorl", "author_email": "minamorl@minamorl.com", "bugtrack_url": null, "classifiers": [], "description": "# Trishula - The modern parser combinator for Python 3\n\nTrishula is a parser combinator library extended PEG syntaxes, inspired by Parsimmon(ES) and boost::spirit::qi(C++).\n\nTrishula supports python version >= 3.7.0\n\n## Examples\n\n```python\ngrammar = (\n Value(\"aaa\")\n >> (Value(\"bbb\") | Value(\"ccc\"))\n >> (+Value(\"eee\") >= (lambda x: \"modified\"))\n >> -Value(\"f\")\n >> Value(\"g\")\n >> Regexp(r\"a+\")\n >> Not(Value(\"hhh\"))\n)\n# This works\nprint(vars(Parser().parse(grammar, \"aaaccceeeeeeeeeeeefgaaa\")))\n\n# {\n# 'status': ,\n# 'index': 23,\n# 'value': [[[[[['aaa', 'ccc'], 'modified'], 'f'], 'g'], 'aaa'], None]\n# }\n```\n\nYou can see examples in [\"example\" directory](https://github.com/minamorl/trishula/blob/master/example) (execute it under example directory). \n\n## Description\n\nGrammers can be defined by **Value** and **Regexp** primitive and operators. Below we describe operators.\n\n## Operators\n\nAs mentioned above, Trishula uses many operator overloads to make definition of parsers be easier.\n\n| operator | result |\n----|---- \n| >> | Sequence |\n| \\| | OrderedChoise |\n| ~ | ZeroOrMore |\n| + | OneOrMore |\n| - | Optional |\n| >= | Map |\n| @ | NamedParser |\n\nand we have classes named **Not** and **And**, which are made for prediction.\n\n\n## Recursion\n\nTrishula supports recursion with `Ref`. Recursion can be written like this:\n\n```python\ndef grammar():\n return (\n (Value(\"[]\") >= (lambda x: [])) |\n ((\n Value(\"[\") >>\n Ref(grammar) >>\n Value(\"]\")\n ) >= (lambda x: [x[0][1]]))\n )\n\ndef main():\n result = Parser().parse(grammar(), \"[[[]]]\")\n print(vars(result))\n # => {'status': , 'index': 6, 'value': [[[]]]}\n```\n\nBe aware that `Ref` executes function only once so that parser can be memorized.\n\n## Namespace\n\nNamespace is one of Trishula's powerful features. You can name your parser and retrieve values with map (as dict).\n\nUsage is simple. Mark the parser with `@` operator like `parser @ \"name\"` and surround with `Namespace(parser)`. Then you can grab values with `Namespace(parser) => fn`. fn is a callable taking dict type and returns new value. \n\n```python\nimport trishula as T\n\n\ndef main():\n grammar = T.Namespace(\n T.Value(\"[\") >> (T.Regexp(r\"[0-9]+\") >= (float)) @ \"value\" >> T.Value(\"]\")\n ) >= (lambda a_dict: a_dict[\"value\"])\n result = T.Parser().parse(grammar, \"[12345]\")\n print(vars(result))\n # ==> {'status': , 'index': 7, 'value': 12345.0, 'namespace': {}}\n\n\nmain()\n```\n\nNote that after mapped function called, internal namespace is cleaned up with empty dict.\n\n\n## Conditional parsing\n\nYou can do something like this:\n```python\ndef main():\n def cond(value):\n d = {\n \"(\": \")\",\n \"{\": \"}\",\n \"[\": \"]\",\n }\n return T.Value(d.get(value[0]))\n\n\n grammar = T.Namespace(\n T.Value(\"[\")\n >> +(T.Regexp(r\"[a-z]\") | T.Value(\"\\n\")) @ \"value\"\n >> T.Conditional(cond)\n )\n result = T.Parser().parse(grammar, \"[abcd\\n\\nefg]\")\n print(result)\n\n\nmain()\n```\n\n`Conditional` take one argument that receive a value and return parser. It runs dynamically so that you can choose a parser at runtime.\n\n\n## Utils\n\nThere are `sep_by`, `sep_by1`, and `index`.\n\n## Generator\n\n```\nimport trishula as T\n\n\n@T.define_parser\ndef parser():\n yield T.Value(\"aaa\")\n v = yield T.Value(\"bbb\")\n yield T.Value(\"ccc\")\n # Do not forget to return a value\n yield v\n\nprint(T.Parser().parse(parser, \"aaabbbccc\"))\n# ==> \n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/minamorl/trishula", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "trishula", "package_url": "https://pypi.org/project/trishula/", "platform": "", "project_url": "https://pypi.org/project/trishula/", "project_urls": { "Homepage": "https://github.com/minamorl/trishula" }, "release_url": "https://pypi.org/project/trishula/0.0.9/", "requires_dist": null, "requires_python": "", "summary": "The modern PEG parser combinator for python", "version": "0.0.9" }, "last_serial": 4962978, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "67c16010dce28dc6cb79066b285e7d0c", "sha256": "80741ff3c27afd75f878d8a1c5eb1b4a6701aafdcec018287542d8b1565c0afd" }, "downloads": -1, "filename": "trishula-0.0.1-py3.7.egg", "has_sig": false, "md5_digest": "67c16010dce28dc6cb79066b285e7d0c", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 4856, "upload_time": "2019-03-03T13:51:01", "url": "https://files.pythonhosted.org/packages/be/7f/51e24ad1d0d57f175582eb287034dd83cfff8571eef8b5047f0881862694/trishula-0.0.1-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "a53712da53da56de7e0a4f41e0d128f0", "sha256": "b8c3b00ec379c4f208fe4beb069276f48d3cafe87cb537c540374e76cc9d8236" }, "downloads": -1, "filename": "trishula-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a53712da53da56de7e0a4f41e0d128f0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2287, "upload_time": "2019-03-03T13:50:59", "url": "https://files.pythonhosted.org/packages/1f/97/9f61c26a381a53ac85ce6fc958a924da80867b441d155eb04e66712072ee/trishula-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e8e342dee5bad9bb77f6d156998e19d8", "sha256": "d8606b12a2b056ddef1b7d5e395c68f44c6d9de3932bb9ab9ab751cc592b7d92" }, "downloads": -1, "filename": "trishula-0.0.1.tar.gz", "has_sig": false, "md5_digest": "e8e342dee5bad9bb77f6d156998e19d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2192, "upload_time": "2019-03-03T13:51:03", "url": "https://files.pythonhosted.org/packages/3f/41/4ed50c0a5a4862c4618a5a8ec19c1adc9214e6d6f1a653bd9c259bdd592b/trishula-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "2c5dc049a8385bc10633374df846992e", "sha256": "8103a355fa562ab3e17486e1272968819b042b55c9fd58d2939ae0597c668015" }, "downloads": -1, "filename": "trishula-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2c5dc049a8385bc10633374df846992e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2326, "upload_time": "2019-03-03T20:13:50", "url": "https://files.pythonhosted.org/packages/7e/a4/6660de930989dc9da7c8cd84349c6238978aeb492b75120a7ef6c903f233/trishula-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "646219ac41aceb0e442790fb7a89b9e1", "sha256": "b74b376333870a83c0f5136aaa050bdf6f01402d2572e1a787c01f8bb644d137" }, "downloads": -1, "filename": "trishula-0.0.2.tar.gz", "has_sig": false, "md5_digest": "646219ac41aceb0e442790fb7a89b9e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2295, "upload_time": "2019-03-03T20:13:51", "url": "https://files.pythonhosted.org/packages/45/6a/2ce3cd46677ea47a10b76826748a5f53b266afde6c4004ddfd3a7de98831/trishula-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "a7e44cf4249936aff84ef4b69fe889d7", "sha256": "aab990b4b561dfb01e6fe514f425444efbdde3e0b6313b920711981ecf432d81" }, "downloads": -1, "filename": "trishula-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a7e44cf4249936aff84ef4b69fe889d7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2542, "upload_time": "2019-03-05T13:38:28", "url": "https://files.pythonhosted.org/packages/51/e7/27ed3947c67403f47c7af01dc3668d7045ac65e0ceb9076c024e2e70bc02/trishula-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "048df9250a9b158d41ee4985bbec5bbd", "sha256": "2cdd1ee8ff2e307ca708ae319156909fa23f84fa1a7ae5e7e11b1c089f523846" }, "downloads": -1, "filename": "trishula-0.0.3.tar.gz", "has_sig": false, "md5_digest": "048df9250a9b158d41ee4985bbec5bbd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2766, "upload_time": "2019-03-05T13:38:30", "url": "https://files.pythonhosted.org/packages/f4/cd/9e53af8d07b38a24d2d2876b0a32e7a6553a592c7f261463d0cd68eae1f6/trishula-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "64d3796e45b2f1ef130a16abf14147bc", "sha256": "6372d4aaae3da220b790448d891feedad58072619347335b187428f8cdc5ac9a" }, "downloads": -1, "filename": "trishula-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "64d3796e45b2f1ef130a16abf14147bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2548, "upload_time": "2019-03-05T13:43:27", "url": "https://files.pythonhosted.org/packages/42/e1/e03004591ff5e20e96dc55a81dc8d6c5477aca1236b5baf99c71ea4f1419/trishula-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0207f01af3b150dcbac7ba4e8514fc75", "sha256": "bc015cf6d3a9060ed7d33728703869e9ce102ab845e2cf3703bf54533184d71a" }, "downloads": -1, "filename": "trishula-0.0.4.tar.gz", "has_sig": false, "md5_digest": "0207f01af3b150dcbac7ba4e8514fc75", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2768, "upload_time": "2019-03-05T13:43:28", "url": "https://files.pythonhosted.org/packages/19/0e/a113b194d742cf6b0e32cbfccfe1ca1dad89a955dfb92c94de07258966f0/trishula-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "4f6a7ff362bc0e8362d2225848e67ef5", "sha256": "6284cc41929356b3193555bcec916a159e4c3a9cde26d108ae447a341ad2d044" }, "downloads": -1, "filename": "trishula-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "4f6a7ff362bc0e8362d2225848e67ef5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3698, "upload_time": "2019-03-07T16:28:49", "url": "https://files.pythonhosted.org/packages/10/ab/c55bed2f4de499dd272c281a38e00659ee020e1f214c13d0eb70e19d8b51/trishula-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7c6eb981f37fe4698181d61d11de8d2", "sha256": "86a99744d89355b889b2e4348a14939f6bf577a0ae2f0349f5c9a33428af3d02" }, "downloads": -1, "filename": "trishula-0.0.5.tar.gz", "has_sig": false, "md5_digest": "d7c6eb981f37fe4698181d61d11de8d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3413, "upload_time": "2019-03-07T16:28:51", "url": "https://files.pythonhosted.org/packages/33/18/7fcc789e152416f2c4ae9111b0f6e381e197b4f9ec85dffbecd32dd658bb/trishula-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "d052f59656d023642aef5658797ad398", "sha256": "ad264b477bc8161d4f97aede56b6c22e9e9d25e7c397cd6c78dd5d93738323e4" }, "downloads": -1, "filename": "trishula-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "d052f59656d023642aef5658797ad398", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3751, "upload_time": "2019-03-16T06:54:24", "url": "https://files.pythonhosted.org/packages/75/3f/ed9987cf85a3f6f6ba2c16a65e8792fb2d405360d13fb72a47fdf25488bc/trishula-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "993b3108386dd7f3a7c59dc5645746e5", "sha256": "5de320e075ef7ee2bb14deb47c1643bba639bf739945768d9504c9e760a77c3d" }, "downloads": -1, "filename": "trishula-0.0.6.tar.gz", "has_sig": false, "md5_digest": "993b3108386dd7f3a7c59dc5645746e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3474, "upload_time": "2019-03-16T06:54:25", "url": "https://files.pythonhosted.org/packages/f4/d2/2bc11b9d03c66188f3e7a4ab30879268399df62817b3eb4310f9af228395/trishula-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "c3186567dae593822fc66571b24e565a", "sha256": "fb40448a3285b5a7d82c8f18ed98cd4ec14a1da09d7f9319085579272444c31a" }, "downloads": -1, "filename": "trishula-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "c3186567dae593822fc66571b24e565a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3769, "upload_time": "2019-03-17T03:21:19", "url": "https://files.pythonhosted.org/packages/09/eb/af1d4030d87a32529bd41d8b46601dc9acee2ec51616aae4a3b9b4e81ff0/trishula-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad9a8ff50c85d85f54413d132f1b25ef", "sha256": "24a0959e424c778cd1bd81471c804fb053b432e0e6cfbebf21e398c7809a659a" }, "downloads": -1, "filename": "trishula-0.0.7.tar.gz", "has_sig": false, "md5_digest": "ad9a8ff50c85d85f54413d132f1b25ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3481, "upload_time": "2019-03-17T03:21:21", "url": "https://files.pythonhosted.org/packages/d0/7a/1d00e9401c4dac945c32732ff6fba15c7414741f0e4ec620e0e2d3e76ad6/trishula-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "c20f5b2ef56f7942526fb900e8453cbe", "sha256": "b4d6af33c0a771116922cae32a41d271bc9fa515cc6cc4b8a1bcecb9fefa25e9" }, "downloads": -1, "filename": "trishula-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "c20f5b2ef56f7942526fb900e8453cbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5273, "upload_time": "2019-03-18T11:49:38", "url": "https://files.pythonhosted.org/packages/a6/45/9cdf822f6f11e372ba3ba38c26eee2cd00d57d8142b693212a8bc22b6a1e/trishula-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "45fcf279a0c08acafd6b685d3b97e5b0", "sha256": "0a10f9acefaa9b0bc92f12b2be5448e04ed7c58805c50ac58917638a2f53f5ab" }, "downloads": -1, "filename": "trishula-0.0.8.tar.gz", "has_sig": false, "md5_digest": "45fcf279a0c08acafd6b685d3b97e5b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4619, "upload_time": "2019-03-18T11:49:40", "url": "https://files.pythonhosted.org/packages/06/aa/642e8b6b8e0e359db49fab2332858ceab4000a7f1f0f4792709c7c15d6af/trishula-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "80ab7ec4d7fd16728b1c3d0bd1393182", "sha256": "30d5326d06c2b596b2091ce077f3b08c319ecbb91ee84b8aae1567f1dd71fc0f" }, "downloads": -1, "filename": "trishula-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "80ab7ec4d7fd16728b1c3d0bd1393182", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5301, "upload_time": "2019-03-20T10:25:22", "url": "https://files.pythonhosted.org/packages/03/56/ecaed45ecf5f36f158a40c02762452d4c2f61677542d5c1268705b0071be/trishula-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8112df3f7e1ec88d25070f38c041c423", "sha256": "fa3339924a972e1dd6646d93d5f946443b7a3cb5f8cbdb39c59914df04a0549d" }, "downloads": -1, "filename": "trishula-0.0.9.tar.gz", "has_sig": false, "md5_digest": "8112df3f7e1ec88d25070f38c041c423", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4650, "upload_time": "2019-03-20T10:25:24", "url": "https://files.pythonhosted.org/packages/ca/ba/3a2265fbb9a83c3ab5080aeb1164c710b73234fd4ce16526aebfbccd257c/trishula-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "80ab7ec4d7fd16728b1c3d0bd1393182", "sha256": "30d5326d06c2b596b2091ce077f3b08c319ecbb91ee84b8aae1567f1dd71fc0f" }, "downloads": -1, "filename": "trishula-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "80ab7ec4d7fd16728b1c3d0bd1393182", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5301, "upload_time": "2019-03-20T10:25:22", "url": "https://files.pythonhosted.org/packages/03/56/ecaed45ecf5f36f158a40c02762452d4c2f61677542d5c1268705b0071be/trishula-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8112df3f7e1ec88d25070f38c041c423", "sha256": "fa3339924a972e1dd6646d93d5f946443b7a3cb5f8cbdb39c59914df04a0549d" }, "downloads": -1, "filename": "trishula-0.0.9.tar.gz", "has_sig": false, "md5_digest": "8112df3f7e1ec88d25070f38c041c423", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4650, "upload_time": "2019-03-20T10:25:24", "url": "https://files.pythonhosted.org/packages/ca/ba/3a2265fbb9a83c3ab5080aeb1164c710b73234fd4ce16526aebfbccd257c/trishula-0.0.9.tar.gz" } ] }