{ "info": { "author": "thautwarm", "author_email": "twshere@outlook.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython" ], "description": "\nRBNF: Parser Generator for Context Sensitive Grammars\n==========================================================\n\n[![Build Status](https://travis-ci.org/thautwarm/RBNF.svg?branch=master)](https://travis-ci.org/thautwarm/RBNF)\n[![PyPI version](https://img.shields.io/pypi/v/RBNF.svg)](https://pypi.python.org/pypi/rbnf)\n[![MIT License](https://img.shields.io/badge/license-MIT-Green.svg?style=flat)](https://github.com/thautwarm/RBNF/blob/master/LICENSE)\n\nTutorials\n---------------\n\nSee [Jupyter Notebook](https://github.com/thautwarm/RBNF/blob/master/tutorials.ipynb).\n\nPreview\n---------------\n\n- `rbnf.zero`: solution to processing complex texts. Similar to `re`.\n\n See source file [Poly.rbnf](https://github.com/thautwarm/RBNF/blob/master/tests/poly.rbnf).\n\n ```python\n # parse polynomials from text.\n import rbnf.zero as ze\n ze_exp = ze.compile(\"import poly.[*]\", use='Poly')\n print(ze_exp.match(\"2x^2 + 3 + 4 - 7 x^5 + 4 x + 5 x ^2 - x + 7 x ^ 11\").result)\n ```\n\n Then we got output `[(0, 7), (1, 3), (2, 7), (5, -7), (11, 7)]`.\n\n- `CLI tool chains`:\n\n ```shell\n\n \u03bb rbnf.exe --help\n Available commands:\n cc\n rbnf source code compiler.\n\n - filename(positional or keyword arg) : input source file\n - output(positional or keyword arg) = None : output file name. default to be ...\n - name(positional or keyword arg) = 'unname' : name of language\n\n run\n You can apply immediate tests on your parser.\n P.S: use `--opt` option takes longer starting time.\n\n - filename(positional or keyword arg) : python file generated by `rbnf` command, or rbnf sour file\n - opt(positional or keyword arg) = False : optimize switch\n\n\n\n \u03bb printf \"ignore [space]\\nspace := R'\\s+'\\nterm := R'[^\\s\\(\\)]+'\\nsexpr ::= '(' sexpr* ')' | term\" > lisp.rbnf\n \u03bb rbnf run lisp\n\n type `:i` to switch between python mode and parsing mode.\n The last result of parsing is stored as symbol `res`.\n\n runbnf> (add 1 (add 2))\n\n sexpr[\n Tokenizer(name='auto_const', value='(', lineno=0, colno=0)\n sexpr[\n Tokenizer(name='term', value='add', lineno=0, colno=1)\n ]\n sexpr[\n Tokenizer(name='term', value='1', lineno=0, colno=5)\n ]\n sexpr[\n Tokenizer(name='auto_const', value='(', lineno=0, colno=7)\n sexpr[\n Tokenizer(name='term', value='add', lineno=0, colno=8)\n ]\n sexpr[\n Tokenizer(name='term', value='2', lineno=0, colno=12)\n ]\n Tokenizer(name='auto_const', value=')', lineno=0, colno=13)\n ]\n Tokenizer(name='auto_const', value=')', lineno=0, colno=14)\n ]\n\n runbnf> exit\n\n \u03bb rbnf cc lisp.bnf -output lisp.py\n ...\n ```\n\nRelated\n----------------------\n\n- RBNF could help to develop type checker:\n\n [https://github.com/thautwarm/reFining](https://github.com/thautwarm/reFining])\n\n ```\n python cli.py\n\n reF> let x: 'a = 1 in\n fn x: 'a -> x ;;\n => (int`2 => int`2)\n ```\n\n- RBNF could help to develop programming languages:\n\n [https://github.com/thautwarm/rmalt](https://github.com/thautwarm/rmalt)\n\n ```\n python test.py\n\n malt> let (%+) = (l, r) -> (l + r) % r;;\n malt> let f = (a, b) -> a + b;;\n malt> f 1 2;;\n => 3\n malt> f 1\n ;;\n => Fn(b)\n malt> infix %+ 5;;\n => 5\n malt> let (%+) = (l, r) -> (l % r) + r;;\n malt> 5 %+ 6;;\n => 11\n\n ```\n\n\nEDSL in Python\n---------------------\n\n\n**To be continue**.\n\n\n`RBNF`'s compiler(rbnf -> python or others) relies on bootstrap.\n\nActually, in current version, bootstrap of RBNF is implemented in EDSL.\n\nSee [rbnf bootstrap in Python](https://github.com/thautwarm/RBNF/blob/master/rbnf/bootstrap/rbnf.py).\n\nA snippet could be previewed here.\n\n```python\n\nrbnf = Language(\"RBNF\")\n\n...\n\n@rbnf\nclass Primitive(Parser):\n\n @classmethod\n def bnf(cls):\n # @formatter:off\n return optimize(\n C('(') + Or @ \"or_\" + C(')')\n | C('[') + Or @ \"optional\" + C(']')\n | Name @ \"name\"\n | Str @ \"str\")\n # @formatter:on\n\n @classmethod\n def rewrite(cls, state: State):\n get = state.ctx.get\n or_: Parser = get('or_')\n optional: Parser = get('optional')\n ...\n\n...\n\n```\n\n\nOther backend\n----------------\n\nTo be continue.\n\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/thautwarm/Ruiko", "keywords": "parser-generator,context-sensitive,ebnf", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "rbnf", "package_url": "https://pypi.org/project/rbnf/", "platform": "any", "project_url": "https://pypi.org/project/rbnf/", "project_urls": { "Homepage": "https://github.com/thautwarm/Ruiko" }, "release_url": "https://pypi.org/project/rbnf/0.3.21/", "requires_dist": [ "linq-t (>=0.1)", "Redy (>=0.2.2)", "wisepy (>=0.2.8)" ], "requires_python": ">=3.6.0", "summary": "context sensitive grammar parser generator for CPython", "version": "0.3.21" }, "last_serial": 4263679, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "4bde0ac7b399693c29ce84899fba2e6e", "sha256": "08a3c57e383d4af9e9376ae97bfb489f0ad981d8acc44d3bf6b00c32b069e18b" }, "downloads": -1, "filename": "rbnf-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4bde0ac7b399693c29ce84899fba2e6e", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 22347, "upload_time": "2018-06-15T14:13:13", "url": "https://files.pythonhosted.org/packages/fd/e9/fab2ea0f0593111cc15e546fa61c9f0d128fcaf0f59c92b322a3834ee32d/rbnf-0.1.1-py3-none-any.whl" } ], "0.1.18": [ { "comment_text": "", "digests": { "md5": "f8b419388fc96c67f61b53a8efe2314c", "sha256": "01330b7ff9d56dad7b72a886dbc91250231846456917f791d7f756d7e493942a" }, "downloads": -1, "filename": "rbnf-0.1.18-py3-none-any.whl", "has_sig": false, "md5_digest": "f8b419388fc96c67f61b53a8efe2314c", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 22551, "upload_time": "2018-06-24T04:55:29", "url": "https://files.pythonhosted.org/packages/8a/42/c982e9d01f7e9c409611776f4b77c94abb57ef61f36ad2e8f4600b643d91/rbnf-0.1.18-py3-none-any.whl" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "3986bd43b4ca14a9dd4dbd2f846d92b4", "sha256": "848023bbe1fea8271056f483070772b2695d14a8b206fdee0dff794573d5e27f" }, "downloads": -1, "filename": "rbnf-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3986bd43b4ca14a9dd4dbd2f846d92b4", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 22343, "upload_time": "2018-06-16T04:16:35", "url": "https://files.pythonhosted.org/packages/61/45/c307ab6cdc26e54efa18289e6c04cda0bce3f3728618e39065874805a292/rbnf-0.1.2-py3-none-any.whl" } ], "0.1.22": [ { "comment_text": "", "digests": { "md5": "35f021b76b66b0cdab3e9cc2e8af3048", "sha256": "b0fb9aa00540aa2be13d112d71efa13ee9b2a0afb5ade3bbb8289c38f73363af" }, "downloads": -1, "filename": "rbnf-0.1.22-py3-none-any.whl", "has_sig": false, "md5_digest": "35f021b76b66b0cdab3e9cc2e8af3048", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 22829, "upload_time": "2018-06-24T12:52:29", "url": "https://files.pythonhosted.org/packages/5e/e6/cdd85d61526c14b03a32f381a97040909a43972a9978556db166f9f71111/rbnf-0.1.22-py3-none-any.whl" } ], "0.1.24": [ { "comment_text": "", "digests": { "md5": "38b2d2fd70de90bdbae18f526a7baf37", "sha256": "25a9a189b1f8c235a2af6e654eb6ac1b5dc544332e93d492cfeb4d63426ce007" }, "downloads": -1, "filename": "rbnf-0.1.24-py3-none-any.whl", "has_sig": false, "md5_digest": "38b2d2fd70de90bdbae18f526a7baf37", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 22990, "upload_time": "2018-07-07T17:51:21", "url": "https://files.pythonhosted.org/packages/17/f5/787eade06ad77f5cc513e2f5065a036ead2c76c700303fa13f88722b65f7/rbnf-0.1.24-py3-none-any.whl" } ], "0.1.34": [ { "comment_text": "", "digests": { "md5": "23e472ed5a08d25e070f0288541f28d4", "sha256": "5358af501f27b90d871a14dfe1de39a4462ceb97dd10fca944844c881abf8198" }, "downloads": -1, "filename": "rbnf-0.1.34-py3-none-any.whl", "has_sig": false, "md5_digest": "23e472ed5a08d25e070f0288541f28d4", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 56530, "upload_time": "2018-07-28T07:58:31", "url": "https://files.pythonhosted.org/packages/cb/65/472db7bd36d753ebbfb5e1140b62ba249bfbfd57b0e303bc2f0f05870238/rbnf-0.1.34-py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "53e5cb11f99e2f27eade878409d30f64", "sha256": "387f78c098e0a29bf5a1aa4300cff67f99250da06eb7d45cf51a69a3c60b948f" }, "downloads": -1, "filename": "rbnf-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "53e5cb11f99e2f27eade878409d30f64", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 22359, "upload_time": "2018-06-21T06:03:05", "url": "https://files.pythonhosted.org/packages/d0/47/80009f8a6b9f1dde56a795636f45e5aaaf280dad8312727df1d6e777f99f/rbnf-0.1.4-py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "a498922e9ce45ac96a1f27d26d302243", "sha256": "2d240fbc53c06ed7b6fff8086456cf2d1fb1448c7d8931417436be8fddb40859" }, "downloads": -1, "filename": "rbnf-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "a498922e9ce45ac96a1f27d26d302243", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 22381, "upload_time": "2018-06-21T06:08:44", "url": "https://files.pythonhosted.org/packages/e3/7d/8712f4f48bf28481b0da8c14b45ccf602f82055ba5e431b7003baa07f5c2/rbnf-0.1.5-py3-none-any.whl" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "a687191be1aff1cb13b60d5728e50437", "sha256": "f7cf372bd9534586cc35ad8090c3454afd880aefcfe99b059ba56894b87b099b" }, "downloads": -1, "filename": "rbnf-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "a687191be1aff1cb13b60d5728e50437", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 22378, "upload_time": "2018-06-21T06:14:01", "url": "https://files.pythonhosted.org/packages/6d/f5/85330fbe734cd9fb70cc3a2ef070b1c265c7e2470e948b725c022bb81efd/rbnf-0.1.8-py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "669ad689a6f301092a6cf420213707bc", "sha256": "82e1f995bd0e3c61467451ad370eef2f9742e58ad48b343462d2ccc1a5346d93" }, "downloads": -1, "filename": "rbnf-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "669ad689a6f301092a6cf420213707bc", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 56740, "upload_time": "2018-07-28T18:23:18", "url": "https://files.pythonhosted.org/packages/a0/e8/c816cf433e5927620ac0e48fec060528e8d70b365e4d078ff067442a59f1/rbnf-0.2.0-py3-none-any.whl" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "299ad80f266a92269e9c19f9393aad58", "sha256": "d325d6d786209585efe7e1cc4c07f0de0617335264f2f3ab2bb6b1c216fe32b2" }, "downloads": -1, "filename": "rbnf-0.2.9-py3-none-any.whl", "has_sig": false, "md5_digest": "299ad80f266a92269e9c19f9393aad58", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 46831, "upload_time": "2018-07-29T07:05:19", "url": "https://files.pythonhosted.org/packages/f8/e8/70d5351f5d9e65dd10cb63c4a08d10727dbb0b8145657e880eaecb459b18/rbnf-0.2.9-py3-none-any.whl" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b790b39f97ca93ba233715a361b11199", "sha256": "c9574e8d6f173325983cff335f9eea9cd7c145636b687046b23793ce19982ff4" }, "downloads": -1, "filename": "rbnf-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b790b39f97ca93ba233715a361b11199", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 43272, "upload_time": "2018-08-03T20:47:26", "url": "https://files.pythonhosted.org/packages/ee/74/4cbcb4037bf667166d7c66c54f49efb1eda494b31d40dc67a05aa176275e/rbnf-0.3.0-py3-none-any.whl" } ], "0.3.14": [ { "comment_text": "", "digests": { "md5": "03f32fc168383480730a8a82e804b83c", "sha256": "bd068d3de5a4a65236143de2b80f6a1d7085d70de61d79fd6113b63292a100e2" }, "downloads": -1, "filename": "rbnf-0.3.14-py3-none-any.whl", "has_sig": false, "md5_digest": "03f32fc168383480730a8a82e804b83c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 44363, "upload_time": "2018-09-11T17:24:26", "url": "https://files.pythonhosted.org/packages/97/cb/abded804019a63949a8c73f0e8aa23b163539f3574b92c293affebcf3840/rbnf-0.3.14-py3-none-any.whl" } ], "0.3.21": [ { "comment_text": "", "digests": { "md5": "aa60525f22261f02a77bc5f9a77b0468", "sha256": "216eda5a0e80b87aee77ee85345440df2ab7301ccd247ad9d7943129a6c8bac9" }, "downloads": -1, "filename": "rbnf-0.3.21-py3-none-any.whl", "has_sig": false, "md5_digest": "aa60525f22261f02a77bc5f9a77b0468", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 44821, "upload_time": "2018-09-12T05:41:50", "url": "https://files.pythonhosted.org/packages/e5/85/f937d98504988d51c185ec705b929a0fb30fdb3187b336e5266794229ec5/rbnf-0.3.21-py3-none-any.whl" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "dac0dddcad3150b8dfa2f5c184fc0672", "sha256": "fd2b8ba4e40321084780be43c39a7ebef4a5417f7e0663c849b6cdc322379041" }, "downloads": -1, "filename": "rbnf-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "dac0dddcad3150b8dfa2f5c184fc0672", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 43901, "upload_time": "2018-08-03T21:00:51", "url": "https://files.pythonhosted.org/packages/90/a5/23920f42deb637182b18117c2a40ca685152404684ac195cf26fe3dc51a3/rbnf-0.3.4-py3-none-any.whl" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "ca481fbae95230a1e8d53d809353cd4b", "sha256": "fad822a57d5190322ad531a51d41fc0bc028b91357b32b76b1a7fdc1b8f20eff" }, "downloads": -1, "filename": "rbnf-0.3.9-py3-none-any.whl", "has_sig": false, "md5_digest": "ca481fbae95230a1e8d53d809353cd4b", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 44030, "upload_time": "2018-08-04T07:52:36", "url": "https://files.pythonhosted.org/packages/7a/50/5ad056674fe3c708ebfbff7cae5ec7941c574df6292e8b388f6d3c76fb90/rbnf-0.3.9-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aa60525f22261f02a77bc5f9a77b0468", "sha256": "216eda5a0e80b87aee77ee85345440df2ab7301ccd247ad9d7943129a6c8bac9" }, "downloads": -1, "filename": "rbnf-0.3.21-py3-none-any.whl", "has_sig": false, "md5_digest": "aa60525f22261f02a77bc5f9a77b0468", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 44821, "upload_time": "2018-09-12T05:41:50", "url": "https://files.pythonhosted.org/packages/e5/85/f937d98504988d51c185ec705b929a0fb30fdb3187b336e5266794229ec5/rbnf-0.3.21-py3-none-any.whl" } ] }