Skip to content

Naereen/MiniPy-interpreter-in-OCaml

Repository files navigation

My local copy of OCaml MiniPy

A Naive (OCaml) interpreter for a (minimalist subset of a) Python like language.

Try the interpreter online or use the editor (these rely on js_of_ocaml).

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, 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)

Here is a second example, using the MiniPy OCaml editor, 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)

Here is a third and last example, using the MiniPy OCaml editor, 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)


Details about this local copy

Where is it hosted on my website?

On my websites, it is as https://perso.crans.org/besson/publis/MiniPy/ and https://besson.link/publis/MiniPy/.

Where do the files come from?

License ?

Apache-2.0 License Copyright 2020 by LaurentMazare.


Documentation of supported features

See https://github.com/LaurentMazare/ocaml-minipy#supported-features

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.