{"id":22873307,"url":"https://github.com/frederiktobner/cellox","last_synced_at":"2025-08-18T09:05:18.904Z","repository":{"id":43361488,"uuid":"502575593","full_name":"FrederikTobner/Cellox","owner":"FrederikTobner","description":"Compiler for the cellox programming language ","archived":false,"fork":false,"pushed_at":"2024-12-08T23:52:50.000Z","size":2625,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-18T09:03:50.727Z","etag":null,"topics":["bytecode","compiler","garbage-collector","interpreter","programming-language","scripting-language","virtual-machine"],"latest_commit_sha":null,"homepage":"https://frederiktobner.github.io/Cellox/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FrederikTobner.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2022-06-12T09:47:07.000Z","updated_at":"2024-12-08T23:52:52.000Z","dependencies_parsed_at":"2024-12-09T00:35:46.629Z","dependency_job_id":null,"html_url":"https://github.com/FrederikTobner/Cellox","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/FrederikTobner/Cellox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrederikTobner%2FCellox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrederikTobner%2FCellox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrederikTobner%2FCellox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrederikTobner%2FCellox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FrederikTobner","download_url":"https://codeload.github.com/FrederikTobner/Cellox/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FrederikTobner%2FCellox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270968637,"owners_count":24677139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bytecode","compiler","garbage-collector","interpreter","programming-language","scripting-language","virtual-machine"],"created_at":"2024-12-13T14:18:31.793Z","updated_at":"2025-08-18T09:05:18.834Z","avatar_url":"https://github.com/FrederikTobner.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cellox\n\n[![Build Interpreter](https://github.com/FrederikTobner/Cellox/actions/workflows/build_compiler.yml/badge.svg)](https://github.com/FrederikTobner/Cellox/actions/workflows/build_compiler.yml)\n[![Build Tools](https://github.com/FrederikTobner/Cellox/actions/workflows/build_tools.yml/badge.svg)](https://github.com/FrederikTobner/Cellox/actions/workflows/build_tools.yml)\n[![Test](https://github.com/FrederikTobner/Cellox/actions/workflows/tests.yml/badge.svg)](https://github.com/FrederikTobner/Cellox/actions/workflows/tests.yml)\n[![Analyze](https://github.com/FrederikTobner/Cellox/actions/workflows/codeql.yml/badge.svg)](https://github.com/FrederikTobner/Cellox/actions/workflows/codeql.yml)\n\nCompiler based on the book [Crafting interpreters](https://craftinginterpreters.com/contents.html) for the programming language cellox.\n\nCellox is a programming language based on [lox](https://craftinginterpreters.com/the-lox-language.html) from Robert Nystrom.\n\n## Table of Contents\n\n* [Overview](#overview)\n* [Values](#values)\n* [Control structures](#control-structures)\n* [Operators](#operators)\n* [Objects](#objects)\n* [Functions](#functions)\n* [Classes](#classes)\n* [Strings](#strings)\n* [Arrays](#arrays)\n* [Slices](#slices)\n* [IDE Integration](#ide-integration)\n* [How it works](#how-it-works)\n* [License](#license)\n\n## Overview\n\nCellox is a dynamically typed, object oriented, high-level scripting language.\n\nIt is available under windows, linux and macOS but is currently in an experimental state. Some of the language features that are currently included (especially native functions), might change or not be included in the upcoming versions of the compiler.\n\n## Values\n\nIn cellox [values](https://github.com/FrederikTobner/Cellox/wiki/Values) are grouped into four different types:\n\n* booleans,\n* numbers,\n* undefiened (null)\n* and [cellox objects](https://github.com/FrederikTobner/Cellox#objects) (e.g. a string or a class instance)\n\n## Control structures\n\nThe language provides the following control structures:\n\n* Conditional flow structures, with [if/else statements](https://github.com/FrederikTobner/Cellox/wiki/if-else-statements)\n* Repetitive flow structures, with [for](https://github.com/FrederikTobner/Cellox/wiki/For) and [while](https://github.com/FrederikTobner/Cellox/wiki/While) loops\n\n## Operators\n\nCellox features [assignment](https://github.com/FrederikTobner/Cellox/wiki/Operators#assignment-operators), [binary](https://github.com/FrederikTobner/Cellox/wiki/Operators#binary-operators), [logical](https://github.com/FrederikTobner/Cellox/wiki/Operators#logical-operators) and [unary](https://github.com/FrederikTobner/Cellox/wiki/Operators#unary-operators) operators.\n\n## Objects\n\nIn Cellox everything besides the three base data types is considered to be a cellox [object](https://github.com/FrederikTobner/Cellox/wiki/Objects).\n\nEven functions and classes are considered to be a cellox object.\n\nThis means that you can for example get the reference to a function and assign it to a variable.\n\n## Functions\n\nA [Function](https://github.com/FrederikTobner/Cellox/wiki/Functions) in Cellox is a group of statements, that together perform a task.\n\nSome functions in Cellox also access the enclosing environment of the function to for example change the value stored in variable in the enclosing environment.\n\nThese functions are called closures and the values that are accessible for the functions are called upvalues.\n\nCellox also offers some [native functions](https://github.com/FrederikTobner/Cellox/wiki/Native-Functions) that are implemented in C.\n\n## Classes\n\nCellox is a objectoriented language, that features inheritance and methods that are bound to a [class](https://github.com/FrederikTobner/Cellox/wiki/Classes) instance.\n\nClasses can also extend the functionality of an already existing class by using inheritance.\n\n## Strings\n\nA [string](https://github.com/FrederikTobner/Cellox/wiki/Strings) in cellox is a special type of object.\n\nStrings can contain escape sequences that will be resolved at compile time.\n\nThe characters that a string contains can be accessed by the index.\n\n## Arrays\n\n[Arrays](https://github.com/FrederikTobner/Cellox/wiki/Arrays) have a variable-size, meaning they can shrink and grow.\n\nThere is no tradional array, with a fixed capacity that is specified at allocation.\n\n## Slices\n\nA [slice](https://github.com/FrederikTobner/Cellox/wiki/Slices) is a subset of an already existing array or string.\n\nSlices are created by using the range operator.\n\nThe values stored in slice can be altered without affecting the original array.\n\n## IDE Integration\n\nThere are plugins for vscode, vim and neovim. Another alternative is to use my own text editor YATE that has built in language support.\n\n[![Vim](https://github-readme-stats-beryl-phi.vercel.app/api/pin/?username=FrederikTobner\u0026repo=cellox.vim\u0026theme=dark)](https://github.com/FrederikTobner/cellox.vim)\n[![VSCcode](https://github-readme-stats-beryl-phi.vercel.app/api/pin/?username=FrederikTobner\u0026repo=vscode-cellox\u0026theme=dark)](https://github.com/FrederikTobner/vscode-cellox)\n[![YATE](https://github-readme-stats-beryl-phi.vercel.app/api/pin/?username=FrederikTobner\u0026repo=YATE\u0026theme=dark)](https://github.com/FrederikTobner/YATE)\n\n## How it works\n\nThe language provides automatic memory management to the programmer using it's own [garbage collector](https://github.com/FrederikTobner/Cellox/wiki/Garbage-Collector), that uses the mark-and-sweep algorithm.\n\nThe variables defiened in a cellox program are stored in a hashtable. The variable name is used as the key for the value stored in the hashtable.\n\nThe program is converted into bytecode and executed by a stack based [virtual machine](https://github.com/FrederikTobner/Cellox/wiki/Virtual-Machine).\n\nThe bytecode can also be stored in a [seperate file](https://github.com/FrederikTobner/Cellox/wiki/Chunk-Files) in order to be executed at a later point in time.\n\nMore information about the compiler can be found at the [technical documentation](https://frederiktobner.github.io/Cellox/).\n\n## License\n\nThis project is licensed under the [GNU General Public License](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrederiktobner%2Fcellox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrederiktobner%2Fcellox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrederiktobner%2Fcellox/lists"}