# My local copy of OCaml MiniPy A Naive (OCaml) interpreter for a (minimalist subset of a) Python like language. Try the [interpreter](console.html) online or use the [editor](editor.html) (these rely on [js_of_ocaml](https://ocsigen.org/js_of_ocaml/3.5.1/manual/overview)). This is a work in progress, most of the supported features are only partially implemented. --- ## Screenshots Here is an example of using the [MiniPy OCaml console](https://perso.crans.org/besson/publis/MiniPy/console.html), to define a `sum` function. It shows that a lot of basic construct of the Python language are supported, but almost no functions from the standard library are available: ![Screenshot showing the use of MiniPy OCaml console (console.html)](./screenshots/screenshots_minipy_ocaml_1.png) Here is a second example, using the [MiniPy OCaml editor](https://perso.crans.org/besson/publis/MiniPy/editor.html), loaded with one of the example files, showing a Eratosthene Sieve to detect prime numbers: ![Screenshot showing the use of MiniPy OCaml editor (editor.html)](./screenshots/screenshots_minipy_ocaml_2.png) Here is a third and last example, using the [MiniPy OCaml editor](https://perso.crans.org/besson/publis/MiniPy/editor.html), loaded with one of the example files, showing the prime decompositions of integers. I added a few comments (`# blabla`) to show some features supported by MiniPy: ![Screenshot showing the use of MiniPy OCaml editor (editor.html)](./screenshots/screenshots_minipy_ocaml_3.png) --- ## Details about this local copy ### Where is it hosted on my website? On my websites, it is as and . ### Where do the files come from? - The source code of MiniPy is from , and is open-source under Apache-2.0 license ; - From , this repository has no license information ; - The CSS use [Bootstrap from Twitter](https://github.com/twbs/bootstrap), which is also open-source under MIT license ; - The editor is written in javascript and CSS, and it's [ACE](https://ace.c9.io/), and is also open-source under [BSD license](https://github.com/ajaxorg/ace) ; ### License ? [Apache-2.0 License](https://github.com/LaurentMazare/ocaml-minipy/blob/master/LICENSE) Copyright 2020 by [LaurentMazare](https://github.com/LaurentMazare/). ---- ## Documentation of supported features See ### Supported Features - Python values: - Boolean. - Integer (represented with arbitrary precision!). - Float. - String. - List/Tuple. - Function definitions (with keyword arguments, ...), nested function definition. - Variable assignments with tuple/list destructuring and assignements to a list element. - Augmented assignments `+=`, `-=`, etc. - Control flow: - Loops: `while` and `for` loops, with support for `break` and `continue`. - If conditionals with `elif` and `else`. - Expressions: - Unary and binary operators, comparisons. - Ternary if operator. - Attributes, e.g. `x.foo`. - Subscripts, e.g. `x[foo]`. - Lambdas, `lambda`. - List comprehensions (only for lists, no support for dict/set). - Built-ins `print`, `range`. - Dictionaries. - Delete operator, `del`. - REPL example, javascript version with js-of-ocaml. - Starred expressions. - Basic object system. - Exceptions, `try/with` blocks, `raise`. - `with` blocks. - (Class) Inheritance. ### Not implemented yet - Sets. - Slices, e.g. `x[12:15]`. - Generators, `yield`. - Module system, `import`. - Type annotations. - Bytecode compilation/interpreter.