Cython plugin for Lark, reimplementing the LALR parser & lexer for better performance

Overview

Lark-Cython

Cython plugin for Lark, reimplementing the LALR parser & lexer for better performance on CPython.

Install:

pip install lark-cython

Usage:

import lark_cython

parser = Lark(grammar, parser="lalr", _plugins=lark_cython.plugins)

# Use Lark as you usually would, with a huge performance boost

See the examples for more.

Differences from Lark

  • Token instances do not inherit from str. You must use the value attribute to get the string.

Other caveats

  • Postlexer isn't currently implemented

Speed

In current benchmarks, lark-cython is about 50% to 80% faster than Lark.

We're still in the early stages, and in the future, lark-cython might go a lot faster.

Other

License: MIT

Author: Erez Shinan

Special thanks goes to Datafold for commissioning the draft for lark-cython, and allowing me to relase it as open-source.

Comments
  • Actions for sdist and pypi deployment

    Actions for sdist and pypi deployment

    Next step to hopefully get this on pypi (and letting me declare it as a dependency in my projects).

    This adds two new actions to deploy to the test pypi server and to deploy to the live pypi server. There is a third new step that also builds source distributions, so any platform with a compiler can pip install this even if the wheels don't directly support it (which probably isn't too many people).

    I haven't used the gh-action-pypi-publish action yet, so this may not work (I have custom publishing logic that also signs my wheels with a CI gpg key), but it should be too hard to debug.

    @erezsh To support this it would be helpful if you could generate a token for test.pypi.org (you may need to create an account if you don't have one, it's distinct from pypi.org) and then populate the TEST_PYPI_API_TOKEN secret with that token. When that works, you can do the same for regular pypi.

    The logic is setup such authorized PRs will try to publish to test.pypi. When you want to make a release, you would generate a new git tag (which can be done via the github release process), and the live pypi action will run when it sees a new tag.

    opened by Erotemic 15
  • Add support for building wheels on CI

    Add support for building wheels on CI

    I found out that only the source is published to pypi and not the wheels. It shouldn't be too difficult to get cibuildwheel working on this repo and then publishing those to pypi. It will also close #2

    opened by Erotemic 15
  • Meta is always empty while using cython lark

    Meta is always empty while using cython lark

    This is my parser:

        lark_kwargs = {
            "parser": "lalr",
            "lexer": "contextual",
            "propagate_positions": True,
            "_plugins": lark_cython.plugins,
        }
        lang_parser = Lark(lang_def, start="start", **lark_kwargs)
    

    I'd like to propagate the line positions, without cython-lark it works fine, but once i enable the plugins the meta value is always empty.

    Do you have any suggestion on what's wrong ?

    opened by ernestoarbitrio 9
  • fix UnexpectedToken handling exception

    fix UnexpectedToken handling exception

    I don't know if this is the correct solution but it fixes the case described below

    👇🏽

    with a grammar like:

    display_decimals: "DECIMALS"i WS INT
    start: display_decimals
    %import common (INT, WS)
    

    and a script like

    script = """
          bla
    """
    

    It raises

    *** AttributeError: 'lark_cython.lark_cython.LexerThread' object has no attribute '_Token'
    

    This PR handle the right exception when the token is wrong rather than raising an Attribute error.

    opened by ernestoarbitrio 4
  • Resolve differences from Lark

    Resolve differences from Lark

    Suggestion

    I mentioned the differences from Lark, is there any way to resolve? Describe alternatives you've considered Deploy from lark without any changes

    enhancement 
    opened by wqh17101 4
  • Setting non-string values on Tokens

    Setting non-string values on Tokens

    Token values in lark_cython are typed as str.

    In my TransformerI'm changing the token values to their correct types, for example int:

        def int(self, t):
            v = t[0]
            v.value = int(v.value)
            # return full Token rather than an int as Token properties are required later
            return v
    

    This throws the following error in lark_cython:

    lark_cython\lark_cython.pyx:20: in lark_cython.lark_cython.Token.value.__set__  TypeError: Expected unicode, got int
    

    I return the full token in the transformer, rather than simply an int value, as later logic(for error handling etc.) takes advantage of the token properties:

    line, column = key_token.line, key_token.column
    

    Do token values have to be strings in lark_cython? If so, is there any approach which would allow token values to be converted to support int, float etc.?

    question 
    opened by geographika 3
  • how to install lark_cython on windows

    how to install lark_cython on windows

    Describe the bug

    install lark_cython on windows

      lark_cython.obj : error LNK2001: unresolved external symbol __imp__PyClassMethod_New
      lark_cython.obj : error LNK2001: unresolved external symbol __imp__PyList_Type
      lark_cython.obj : error LNK2001: unresolved external symbol __imp__PyDict_GetItemString
    ...
    

    To Reproduce

    pip install lark-cython

    What do i need to install if i want to install on Windows

    opened by wqh17101 3
  • Bump actions/setup-python from 4.3.0 to 4.3.1

    Bump actions/setup-python from 4.3.0 to 4.3.1

    Bumps actions/setup-python from 4.3.0 to 4.3.1.

    Release notes

    Sourced from actions/setup-python's releases.

    Improve error handling and messages

    In scope of this release we added improved error message to put operating system and its version in the logs (actions/setup-python#559). Besides, the release

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump pypa/cibuildwheel from 2.11.2 to 2.11.3

    Bump pypa/cibuildwheel from 2.11.2 to 2.11.3

    Bumps pypa/cibuildwheel from 2.11.2 to 2.11.3.

    Release notes

    Sourced from pypa/cibuildwheel's releases.

    v2.11.3

    • ✨ Improves the 'build options' log output that's printed at the start of each run (#1352)
    • ✨ Added a friendly error message to a common misconfiguration of the CIBW_TEST_COMMAND option - not specifying path using the {project} placeholder (#1336)
    • 🛠 The GitHub Action now uses Powershell on Windows to avoid occasional incompabilities with bash (#1346)
    Changelog

    Sourced from pypa/cibuildwheel's changelog.

    v2.11.3

    5 Dec 2022

    • ✨ Improves the 'build options' log output that's printed at the start of each run (#1352)
    • ✨ Added a friendly error message to a common misconfiguration of the CIBW_TEST_COMMAND option - not specifying path using the {project} placeholder (#1336)
    • 🛠 The GitHub Action now uses Powershell on Windows to avoid occasional incompabilities with bash (#1346)
    Commits
    • a34a6b0 Bump version: v2.11.3
    • 61b6cc8 Merge pull request #1352 from pypa/improve-preamble
    • ecce3d9 Merge pull request #1336 from pypa/test-cwd-error-message
    • 63ef1b0 Merge pull request #1366 from pypa/pre-commit-ci-update-config
    • ba9a82e [pre-commit.ci] pre-commit autoupdate
    • 46372e1 Merge pull request #1364 from pypa/dependabot/github_actions/pypa/gh-action-p...
    • a157a51 Use a unittest style test to support more test runners
    • 9850864 Rename 'environ' to 'env'
    • 56359fb Apply suggestions from code review
    • 99f62f5 build(deps): bump pypa/gh-action-pypi-publish from 1.5.1 to 1.6.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump pypa/cibuildwheel from 2.11.3 to 2.11.4

    Bump pypa/cibuildwheel from 2.11.3 to 2.11.4

    Bumps pypa/cibuildwheel from 2.11.3 to 2.11.4.

    Release notes

    Sourced from pypa/cibuildwheel's releases.

    v2.11.4

    • 🐛 Fix a bug that caused missing wheels on Windows when a test was skipped using CIBW_TEST_SKIP (#1377)
    • 🛠 Updates CPython 3.11 to 3.11.1 (#1371)
    • 🛠 Updates PyPy 3.7 to 3.7.10, except on macOS which remains on 7.3.9 due to a bug. (#1371)
    • 📚 Added a reference to abi3audit to the docs (#1347)
    Changelog

    Sourced from pypa/cibuildwheel's changelog.

    v2.11.4

    24 Dec 2022

    • 🐛 Fix a bug that caused missing wheels on Windows when a test was skipped using CIBW_TEST_SKIP (#1377)
    • 🛠 Updates CPython 3.11 to 3.11.1 (#1371)
    • 🛠 Updates PyPy to 7.3.10, except on macOS which remains on 7.3.9 due to a bug on that platform. (#1371)
    • 📚 Added a reference to abi3audit to the docs (#1347)
    Commits
    • 27fc88e Bump version: v2.11.4
    • a7e9ece Merge pull request #1371 from pypa/update-dependencies-pr
    • b9a3ed8 Update cibuildwheel/resources/build-platforms.toml
    • 3dcc2ff fix: not skipping the tests stops the copy (Windows ARM) (#1377)
    • 1c9ec76 Merge pull request #1378 from pypa/henryiii-patch-3
    • 22b433d Merge pull request #1379 from pypa/pre-commit-ci-update-config
    • 98fdf8c [pre-commit.ci] pre-commit autoupdate
    • cefc5a5 Update dependencies
    • e53253d ci: move to ubuntu 20
    • e9ecc65 [pre-commit.ci] pre-commit autoupdate (#1374)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump actions/setup-python from 4.3.1 to 4.4.0

    Bump actions/setup-python from 4.3.1 to 4.4.0

    Bumps actions/setup-python from 4.3.1 to 4.4.0.

    Release notes

    Sourced from actions/setup-python's releases.

    Add support to install multiple python versions

    In scope of this release we added support to install multiple python versions. For this you can try to use this snippet:

        - uses: actions/[email protected]
          with:
            python-version: |
                3.8
                3.9
                3.10
    

    Besides, we changed logic with throwing the error for GHES if cache is unavailable to warn (actions/setup-python#566).

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Add python/cython benchmark for the lark parser

    Add python/cython benchmark for the lark parser

    @erezsh I appreciate you pointing me to this repo earlier.

    I was able to demonstrate about a 2x speedup for my specific DSL, but I was curious what that speedup was more generally, and I as also looking for a nice way to quantify if any chances to the Cython code would provide further speedups.

    I took a peek at the Cython code and I think it is ripe for optimization. Python types are being used everywhere, and if we were able to refactor those with pure C types, then I think there could be a large speed gain. Unfortunately, I'm not the greatest Cython coder, so I wasn't able to make any simple changes that did anything.

    However, I did write a reproducible benchmark to quantify the speedup between CPython-lark, and Cython-Lark over a range of input sizes.

    The timing module I use is timerit (which I wrote). It works similarly to timeit, but can work inline in existing code. I also use pandas, matplotlib, and seaborn to generate a nice figure showing the speedup over different input sizes.

    image

    The stdout of the script is:

    Timed best=1.144 ms, mean=1.704 ± 0.4 ms for method=parse_python,size=16
    Timed best=5.974 ms, mean=9.279 ± 1.5 ms for method=parse_python,size=87
    Timed best=10.813 ms, mean=17.676 ± 2.1 ms for method=parse_python,size=158
    Timed best=16.715 ms, mean=25.435 ± 3.1 ms for method=parse_python,size=229
    Timed best=20.364 ms, mean=31.777 ± 4.4 ms for method=parse_python,size=299
    Timed best=19.721 ms, mean=37.681 ± 8.5 ms for method=parse_python,size=370
    Timed best=23.847 ms, mean=47.875 ± 7.2 ms for method=parse_python,size=441
    Timed best=29.769 ms, mean=47.659 ± 11.1 ms for method=parse_python,size=512
    Timed best=0.751 ms, mean=1.226 ± 0.2 ms for method=parse_cython,size=16
    Timed best=4.176 ms, mean=6.391 ± 0.7 ms for method=parse_cython,size=87
    Timed best=7.068 ms, mean=11.063 ± 1.5 ms for method=parse_cython,size=158
    Timed best=8.398 ms, mean=13.830 ± 3.0 ms for method=parse_cython,size=229
    Timed best=11.037 ms, mean=19.378 ± 4.7 ms for method=parse_cython,size=299
    Timed best=13.332 ms, mean=25.704 ± 4.5 ms for method=parse_cython,size=370
    Timed best=14.691 ms, mean=25.771 ± 6.9 ms for method=parse_cython,size=441
    Timed best=20.890 ms, mean=31.757 ± 6.4 ms for method=parse_cython,size=512
    
    Statistics:
                                       min style_key size_key              hue_key        method  size      mean
    key                                                                                                         
    method=parse_cython,size=16   0.000751        {}       {}  method=parse_cython  parse_cython    16  0.001226
    method=parse_python,size=16   0.001144        {}       {}  method=parse_python  parse_python    16  0.001704
    method=parse_cython,size=87   0.004176        {}       {}  method=parse_cython  parse_cython    87  0.006391
    method=parse_python,size=87   0.005974        {}       {}  method=parse_python  parse_python    87  0.009279
    method=parse_cython,size=158  0.007068        {}       {}  method=parse_cython  parse_cython   158  0.011063
    method=parse_cython,size=229  0.008398        {}       {}  method=parse_cython  parse_cython   229  0.013830
    method=parse_python,size=158  0.010813        {}       {}  method=parse_python  parse_python   158  0.017676
    method=parse_cython,size=299  0.011037        {}       {}  method=parse_cython  parse_cython   299  0.019378
    method=parse_cython,size=370  0.013332        {}       {}  method=parse_cython  parse_cython   370  0.025704
    method=parse_cython,size=441  0.014691        {}       {}  method=parse_cython  parse_cython   441  0.025771
    method=parse_python,size=229  0.016715        {}       {}  method=parse_python  parse_python   229  0.025435
    method=parse_python,size=370  0.019721        {}       {}  method=parse_python  parse_python   370  0.037681
    method=parse_python,size=299  0.020364        {}       {}  method=parse_python  parse_python   299  0.031777
    method=parse_cython,size=512  0.020890        {}       {}  method=parse_cython  parse_cython   512  0.031757
    method=parse_python,size=441  0.023847        {}       {}  method=parse_python  parse_python   441  0.047875
    method=parse_python,size=512  0.029769        {}       {}  method=parse_python  parse_python   512  0.047659
    Speedup:
               min style_key size_key              hue_key        method      mean  speedup_mean  speedup_min
    size                                                                                                     
    16    0.000751        {}       {}  method=parse_cython  parse_cython  0.001226      1.390526     1.523632
    87    0.004176        {}       {}  method=parse_cython  parse_cython  0.006391      1.451871     1.430450
    158   0.007068        {}       {}  method=parse_cython  parse_cython  0.011063      1.597770     1.529840
    229   0.008398        {}       {}  method=parse_cython  parse_cython  0.013830      1.839145     1.990309
    299   0.011037        {}       {}  method=parse_cython  parse_cython  0.019378      1.639875     1.845177
    370   0.013332        {}       {}  method=parse_cython  parse_cython  0.025704      1.465973     1.479169
    441   0.014691        {}       {}  method=parse_cython  parse_cython  0.025771      1.857683     1.623239
    512   0.020890        {}       {}  method=parse_cython  parse_cython  0.031757      1.500740     1.425010
    Average speedup
                      mean       std       min       25%       50%       75%       max
    speedup_mean  1.592948  0.176645  1.390526  1.462448  1.549255  1.689692  1.857683
    speedup_min   1.605853  0.206135  1.425010  1.466989  1.526736  1.678723  1.990309
    

    This is also benchmarked against the lark.lark grammar that ships with lark. I have a helper function to generate a "random" (not really random, but it is simple) lark file to pass to the parser. One question I had was: Is there a way to use lark to generate a string from a grammar? If so that would make bench-marking more complex grammars much easier.

    Anyways, I hope this is helpful. Thanks again for this library!

    opened by Erotemic 10
Releases(0.0.14)
  • 0.0.14(Dec 6, 2022)

    What's Changed

    • Fix wheels by @Erotemic in https://github.com/lark-parser/lark_cython/pull/13
    • Small fix to adhere to Lark, due to error from Lark's InteractiveParser.accepts by @erezsh in https://github.com/lark-parser/lark_cython/pull/14
    • Fix InteractiveParser, with changes for Lark 1.1.5 (TBR) by @erezsh in https://github.com/lark-parser/lark_cython/pull/15

    Full Changelog: https://github.com/lark-parser/lark_cython/compare/0.0.13...0.0.14

    Source code(tar.gz)
    Source code(zip)
  • 0.0.13(Nov 7, 2022)

    What's Changed

    • add lark_meta dunder by @ernestoarbitrio in https://github.com/lark-parser/lark_cython/pull/10

    New Contributors

    • @ernestoarbitrio made their first contribution in https://github.com/lark-parser/lark_cython/pull/10

    Full Changelog: https://github.com/lark-parser/lark_cython/compare/0.0.12...0.0.13

    Source code(tar.gz)
    Source code(zip)
  • 0.0.11(Mar 1, 2022)

Owner
Lark - Parsing Library & Toolkit
Lark - Parsing Library & Toolkit
MicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems

The MicroPython project This is the MicroPython project, which aims to put an implementation of Python 3.x on microcontrollers and small embedded syst

MicroPython 15.7k Dec 31, 2022
A faster and highly-compatible implementation of the Python programming language. The code here is out of date, please follow our blog

Pyston is a faster and highly-compatible implementation of the Python programming language. Version 2 is currently closed source, but you can find the

4.9k Dec 21, 2022
Core Python libraries ported to MicroPython

This is a repository of libraries designed to be useful for writing MicroPython applications.

MicroPython 1.8k Jan 07, 2023
x2 - a miniminalistic, open-source language created by iiPython

x2 is a miniminalistic, open-source language created by iiPython, inspired by x86 assembly and batch. It is a high-level programming language with low-level, easy-to-remember syntaxes, similar to x86

Benjamin 3 Jul 29, 2022
CPython Extension Module Support for Flit

CPython Extension Module Support for Flit This is a PEP 517 build backend piggybacking (and hacking) Flit to support building C extensions. Mostly a p

Tzu-ping Chung 8 May 24, 2022
DO NOT USE. Implementation of Python 3.x for .NET Framework that is built on top of the Dynamic Language Runtime.

IronPython 3 IronPython3 is NOT ready for use yet. There is still much that needs to be done to support Python 3.x. We are working on it, albeit slowl

IronLanguages 2k Dec 30, 2022
The Stackless Python programming language

This is Python version 3.7.0 alpha 4+ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 20

Stackless Python 891 Jan 03, 2023
Cython plugin for Lark, reimplementing the LALR parser & lexer for better performance

Lark-Cython Cython plugin for Lark, reimplementing the LALR parser & lexer for better performance on CPython. Install: pip install lark-cython Usage:

Lark - Parsing Library & Toolkit 31 Dec 26, 2022
An implementation of Python in Common Lisp

CLPython - an implementation of Python in Common Lisp CLPython is an open-source implementation of Python written in Common Lisp. With CLPython you ca

Willem Broekema 339 Jan 04, 2023
A faster and highly-compatible implementation of the Python programming language.

Pyston Pyston is a fork of CPython 3.8.8 with additional optimizations for performance. It is targeted at large real-world applications such as web se

2.3k Jan 09, 2023
x86-64 assembler embedded in Python

Portable Efficient Assembly Code-generator in Higher-level Python (PeachPy) PeachPy is a Python framework for writing high-performance assembly kernel

Marat Dukhan 1.7k Jan 03, 2023
Python for .NET is a package that gives Python programmers nearly seamless integration with the .NET Common Language Runtime (CLR) and provides a powerful application scripting tool for .NET developers.

pythonnet - Python.NET Python.NET is a package that gives Python programmers nearly seamless integration with the .NET Common Language Runtime (CLR) a

3.5k Jan 06, 2023
wxPython's Project Phoenix. A new implementation of wxPython, better, stronger, faster than he was before.

wxPython Project Phoenix Introduction Welcome to wxPython's Project Phoenix! Phoenix is the improved next-generation wxPython, "better, stronger, fast

1.9k Jan 07, 2023
A mini implementation of python library.

minipy author = RQDYSGN date = 2021.10.11 version = 0.2 1. 简介 基于python3.7环境,通过py原生库和leetcode上的一些习题构建的超小型py lib。 2. 环境 Python 3.7 2. 结构 ${project_name}

RQDYGSN 2 Oct 26, 2021
Pyjion - A JIT for Python based upon CoreCLR

Pyjion Designing a JIT API for CPython A note on development Development has moved to https://github.com/tonybaloney/Pyjion FAQ What are the goals of

Microsoft 1.6k Dec 30, 2022
Grumpy is a Python to Go source code transcompiler and runtime.

Grumpy: Go running Python Overview Grumpy is a Python to Go source code transcompiler and runtime that is intended to be a near drop-in replacement fo

Google 10.6k Dec 24, 2022
The Python programming language

This is Python version 3.10.0 alpha 5 Copyright (c) 2001-2021 Python Software Foundation. All rights reserved. See the end of this file for further co

Python 49.7k Dec 30, 2022
Rust syntax and lexical analyzer implemented in Python.

Rust Scanner Rust syntax and lexical analyzer implemented in Python. This project was made for the Programming Languages class at ESPOL (SOFG1009). Me

Joangie Marquez 0 Jul 03, 2022