{"id":19514617,"url":"https://github.com/epatrizio/ola","last_synced_at":"2026-02-22T20:05:02.297Z","repository":{"id":196023232,"uuid":"693178323","full_name":"epatrizio/ola","owner":"epatrizio","description":"OCaml Lua Interpreter","archived":false,"fork":false,"pushed_at":"2026-02-17T16:24:07.000Z","size":455,"stargazers_count":3,"open_issues_count":15,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-17T21:37:50.338Z","etag":null,"topics":["interpreter","lua","lua-executor","ocaml-library"],"latest_commit_sha":null,"homepage":"","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/epatrizio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-09-18T14:00:40.000Z","updated_at":"2026-02-17T17:58:48.000Z","dependencies_parsed_at":"2025-11-29T00:15:22.932Z","dependency_job_id":null,"html_url":"https://github.com/epatrizio/ola","commit_stats":null,"previous_names":["epatrizio/ola"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/epatrizio/ola","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatrizio%2Fola","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatrizio%2Fola/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatrizio%2Fola/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatrizio%2Fola/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epatrizio","download_url":"https://codeload.github.com/epatrizio/ola/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epatrizio%2Fola/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29725299,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T19:57:12.410Z","status":"ssl_error","status_checked_at":"2026-02-22T19:54:50.710Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["interpreter","lua","lua-executor","ocaml-library"],"created_at":"2024-11-10T23:37:06.005Z","updated_at":"2026-02-22T20:05:02.276Z","avatar_url":"https://github.com/epatrizio.png","language":"OCaml","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ola - An OCaml Lua language interpreter [![build status](https://github.com/epatrizio/ola/workflows/build/badge.svg)](https://github.com/epatrizio/ola/actions)\n\nThis project is an interpreter of the [Lua 5.4](https://www.lua.org/manual/5.4/manual.html) programming language\nwritten in [OCaml](https://ocaml.org) with the [Dune](https://dune.build) build system.\n\n- Build standard command: `dune build @all`\n- Execute [Cram test](https://dune.readthedocs.io/en/stable/tests.html): `dune test` or `dune runtest`\n- Run: `dune exec ola -- file_name.lua`\n- Run in debug mode: `dune exec ola -- file_name.lua --debug`\n\n\u003c!-- $MDX file=examples/hello.lua --\u003e\n```lua\nlocal function hello(msg)\n  print(\"Hello, \" .. msg .. \"!\")\nend\n\nhello(\"world\")\n```\n\n```sh\n$ dune exec ola -- examples/hello.lua\nlexing parsing ...\nstatic analyses ...\nstdlib loading ...\nscope analysis ...\ninterprete ...\nHello, world!\n```\n\n```console\n$ BISECT_FILE=$(pwd)/bisect opam exec -- dune runtest --force --instrument-with bisect_ppx\n$ bisect-ppx-report summary\nCoverage: 225/1379 (16.32%)\n```\n\n- Install in current [opam OCaml switch](https://ocaml.org/docs/opam-switch-introduction): `dune install`\n- Run: `ola file_name.lua` - `ola file_name.lua --debug`\n\nDebug mode displays the Lua input file twice in the console: original version - after scope analysis version\n(variables renamed with a unique name). Nb. Display formatting needs to be improved\n([Issue](https://github.com/epatrizio/ola/issues/2)).\n\nTo enhance the test suite, I imported one from the experimental\n[lua-wasm](https://github.com/Qcode/lua-wasm) project. Thanks to the author.\nBy the way, this is a very interesting exploratory work on compiling Lua to WebAssembly!\n\n## Why ?\n\nThis experimental project has the following goals:\n\n1. Write an interpreter allows a deep understanding of a programming language.\n(Read a language specification in detail, understand the semantic, the execution model, etc.)\n2. Learn how to deal with a dynamique language, such as typing at runtime.\n3. Last but not least, Have fun!\n\nLua seems to be a good dynamic language for this context.\\\nDesigned by a university research team ([PUC Rio Brazil](https://www.puc-rio.br)),\nits syntax is minimalist and its semantics well defined.\n\n## Current status\n\nImplementing a whole Lua interpreter is a very big deal (a good experience to understand that),\nI'm so far from it. For now, there are the basics, including the fundamental concepts of tables and closures\nand the very beginnings of StdLib.\nThis already allows to do a lot of fun stuffs :-) #WIP\n\n- See [examples](https://github.com/epatrizio/ola/tree/main/examples)\n- See [releases](https://github.com/epatrizio/ola/releases)\n\n## Contribute\n\n*More fun in a group than alone!*\n\nFeel free: Contact me, suggest issues and pull requests.\n\nThanks [@zapashcanon](https://github.com/zapashcanon), an active member of the OCaml community,\nfor first feedbacks and reviews.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepatrizio%2Fola","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepatrizio%2Fola","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepatrizio%2Fola/lists"}