{"id":28122321,"url":"https://github.com/buxogabriel/gabelang","last_synced_at":"2026-02-14T23:32:24.882Z","repository":{"id":260139946,"uuid":"880433691","full_name":"BuxoGabriel/gabelang","owner":"BuxoGabriel","description":"A programming language written in rust","archived":false,"fork":false,"pushed_at":"2025-04-08T14:42:44.000Z","size":183,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-15T15:17:51.676Z","etag":null,"topics":["interpreter","lexer","parser","programming-language","rust","wasm"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/gabelang","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BuxoGabriel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-10-29T18:04:12.000Z","updated_at":"2025-04-08T14:42:48.000Z","dependencies_parsed_at":"2025-02-04T00:28:27.771Z","dependency_job_id":"0f84ed28-f6c2-4276-85f7-5216d9527049","html_url":"https://github.com/BuxoGabriel/gabelang","commit_stats":null,"previous_names":["buxogabriel/gabelang"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/BuxoGabriel/gabelang","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BuxoGabriel%2Fgabelang","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BuxoGabriel%2Fgabelang/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BuxoGabriel%2Fgabelang/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BuxoGabriel%2Fgabelang/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BuxoGabriel","download_url":"https://codeload.github.com/BuxoGabriel/gabelang/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BuxoGabriel%2Fgabelang/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29460713,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T22:42:09.113Z","status":"ssl_error","status_checked_at":"2026-02-14T22:42:05.053Z","response_time":53,"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","lexer","parser","programming-language","rust","wasm"],"created_at":"2025-05-14T08:13:10.874Z","updated_at":"2026-02-14T23:32:24.869Z","avatar_url":"https://github.com/BuxoGabriel.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gabelang\n\n## Overview\n\nThis is a language I am writing in rust for fun and to learn more about lexers, parsers, interpreters, and to dymistify programming languages in general.\nThe [Writing an Interpreter in Go](interpreterbook.com) book by Thorsten Ball was used as a reference and insperation for this project as well as [mkdb](github.com/antoniosarosi/mkdb) by Antonio Sarosi.\n\n## BNF / Language Grammer\n\n```bnf\n\u003cprogram\u003e = \u003cstatement\u003e | \u003cprogram\u003e \u003cstatement\u003e\n\u003cstatement\u003e = \u003clet_statement\u003e | \u003cif_statement\u003e | \u003cwhile_loop\u003e | \u003cfunc_decl\u003e | \u003cexpression\u003e\n\u003clet_statement\u003e = let \u003cidentifier\u003e = \u003cexpression\u003e;\n\u003cassign_statement\u003e = \u003cassignable\u003e = \u003cexpression\u003e;\n\u003cif_statement\u003e = if \u003cexpression\u003e \u003ccode_block\u003e\n\u003cwhile_loop\u003e = while \u003cexpression\u003e \u003ccode_block\u003e\n\u003cfor_loop\u003e = for(\u003cstatement\u003e \u003cexpression\u003e; \u003cstatement\u003e) \u003ccode_block\u003e\n\u003cfunc_decl\u003e = fn \u003cidentifier\u003e \u003cparam_idents\u003e \u003ccodeblock\u003e\n\u003ccode_block\u003e = {\u003cprogram\u003e}\n\u003cparam_idents\u003e = (\u003c_param_idents\u003e)\n\u003c_param_idents\u003e = \u003cidentifier\u003e | \u003c_param_idents\u003e, \u003c_param_idents\u003e\n\u003cidentifier\u003e = \u003cident_char\u003e | \u003cident_char\u003e\u003cidentifier\u003e\n\u003cindent_char\u003e = \u003cALPHACHAR\u003e | _\n\u003cexpression\u003e = \u003cgroup_expression\u003e | \u003coperation_expression\u003e | \u003cassignable\u003e | \u003cfunc_call\u003e | \u003cobject_literal\u003e | \u003carray_literal\u003e  | \u003cnumber_literal\u003e\n\u003cgroup_expression\u003e = (\u003cexpression\u003e)\n\u003coperation_expression\u003e = \u003cexpression\u003e \u003cop\u003e \u003cexpression\u003e\n\u003cop\u003e = + | - | * | /\n\u003cassignable\u003e = \u003cidentifier\u003e | \u003carray_index\u003e | \u003cobject_prop\u003e\n\u003carray_index\u003e = \u003cassignable\u003e[\u003cexpression\u003e]\n\u003cobject_prop\u003e = \u003cassignable\u003e.\u003cidentifier\u003e\n\u003cfunc_call\u003e = \u003cassignable\u003e(\u003cexpression_list\u003e)\n\u003cobject_literal\u003e = {\u003cobject_field_literals\u003e}\n\u003cobject_field_literals\u003e = \u003cidentifier\u003e: \u003cexpression\u003e | \u003cobject_field_literals\u003e, \u003cobject_field_literals\u003e\n\u003carray_literal\u003e = [\u003cexpression_list\u003e]\n\u003cexpression_list\u003e = \u003cexpression\u003e | \u003cexpression_list\u003e, \u003cexpression_list\u003e\n\u003cnumber_literal\u003e = \u003cnumber\u003e | \u003cnumber\u003e\u003cnumber_literal\u003e\n\u003cnumber\u003e = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0\n```\n\n## Commenting\n\nComment your code using the `//comment` syntax\nAny text to the right of a double slash does not make it to the parser or interpretter and will not be evaluated as code\n\n```\n// This function doubles a number\nfn double_num(num) {\n    // Multiplies num by 2 to get the answer\n    return num * 2;\n}\n```\n\n## Variable Behavior\n\n- When a variable is used as an expression/rvalue it is deep cloned\n\n## Built in Functions\n\n**len(obj) -\u003e number**\n\n- returns the length of an array or string\n- returns the amount of keys in an object\n- throws an error if provided with something other than an array or string\n\n___\n\n**reverse(obj) -\u003e number**\n\n- returns a new reversed array or string without changing the parameter object\n- throws an error if provided with something other than an array or string\n\n___\n\n**abs(number) -\u003e number**\n\n- returns the absolute value of a passed in number\n- throws an error if provided with something other than a number\n\n## Build\n\nBuild with\n```sh\ncargo build --release\n```\n\n## Build for wasm target\n\nRequires wasm-pack to be installed\n```sh\ncargo install wasm-pack\n```\n\nBuild with\n```sh\nwasm-pack build --features wasm\n```\n\n## Install\n\nRequires cargo to be installed\n\nInstall gabelang with\n```sh\ncargo install gabelang\n```\n\n## Run\n\nRun as repl with\n```sh\ngabelang\n```\nor run a script with\n```sh\ngabelang --file [script name]\n```\n\n## Test\n\nRun tests with\n```sh\ncargo test\n```\n\n## Todo\n\n- Better Documentation\n- Built in Functions(print, file, fetch, input)\n- Add tests to ast and eval modules\n- Add fun language syntax\n- Improve garbage collector to use mark and sweep\n\n### Todo Reach\n\n- Add tooling/language server\n- Add bytecode compiler\n- Create VM that can run bytecode\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuxogabriel%2Fgabelang","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuxogabriel%2Fgabelang","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuxogabriel%2Fgabelang/lists"}