{"id":21024701,"url":"https://github.com/dmitrii-artuhov/gengo","last_synced_at":"2026-05-24T19:02:57.413Z","repository":{"id":156121874,"uuid":"356938465","full_name":"dmitrii-artuhov/gengo","owner":"dmitrii-artuhov","description":"Gengo - dumb interpreted programming language based on C++","archived":false,"fork":false,"pushed_at":"2021-06-06T18:18:42.000Z","size":271,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-20T13:45:08.178Z","etag":null,"topics":["cpp","programming-language"],"latest_commit_sha":null,"homepage":"","language":"C++","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/dmitrii-artuhov.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}},"created_at":"2021-04-11T17:49:00.000Z","updated_at":"2023-10-26T12:30:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"4f2e80ea-2ee1-46a6-a3fc-54bc422fdf8f","html_url":"https://github.com/dmitrii-artuhov/gengo","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmitrii-artuhov%2Fgengo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmitrii-artuhov%2Fgengo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmitrii-artuhov%2Fgengo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmitrii-artuhov%2Fgengo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmitrii-artuhov","download_url":"https://codeload.github.com/dmitrii-artuhov/gengo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243456651,"owners_count":20293907,"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","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":["cpp","programming-language"],"created_at":"2024-11-19T11:28:13.926Z","updated_at":"2025-12-26T20:33:21.688Z","avatar_url":"https://github.com/dmitrii-artuhov.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gengo\n\u003e Gengo. Pet programming language build for fun.\n\n\n## Features (release 1.0.0)\n- Reading from console\n- Reading from files\n- Functions\n- Arrays (with built-in functions: `size`, `push`, `pop`)\n- Strings (with built-in functions: `length`)\n- 64-bit Integers and Floats (`int`, `float`)\n- General built-in functions: `print`\n- Error messages\n\n## Examples\nConcatenate array of strings:\n```sh\narray arr = [\"1\", \"2\", \"3\", \"4\", \"5\"];\n\nfunction concat(a: array) -\u003e string {\n\tint sz = size(a);\n\tstring res = \"\";\n\n\tloop(int i = 0; i \u003c sz; i = i + 1) {\n\t\tres = res + a[i];\n\t};\n\n\treturn res;\n};\n\nprint(arr);\nprint(concat(arr));\n```\n```sh\n[1, 2, 3, 4, 5]\n12345\n```\n\n'Hello World!' program:\n```sh\nstring str = \"Hello World!\";\nprint(str);\nprint(length(str));\n```\n```sh\nHello World!\n12\n```\n\n\nFactorial of a number:\n```sh\nfunction factorial(a: int) -\u003e int {\n\tif(a == 0) {\n\t\treturn 1;\t\n\t}\n\totherwise {\n\t\treturn a * factorial(a - 1); \n\t};\n};\n\nprint(factorial(10));\n```\n```sh\n3628800\n```\n\n\n\n\n\n\n## Language Grammar\nLanguage Entity | Ruleset\n------------ | -------------\nstatements\t | expr NEWLINE (expr NEWLINE)*\nstatement\t | expr\n\u0026nbsp;\t\t | KEYWORD:return expr\nexpr\t\t | (KEYWORD:TYPE)? IDENTIFIER EQ expr\n\u0026nbsp; \t\t | comp-expr\ncomp-expr\t | arith-expr ((AND\\|OR\\|EQEQ\\|NE\\|GT\\|GTE\\|LT\\|LTE) arith-expr)*\narith-expr\t | term ((PLUS\\|MINUS) term)*\nterm\t\t | factor ((MUL\\|DIV) factor)*\nfactor\t\t | INT\\|FLOAT\\|STRING\\|IDENTIFIER\n\u0026nbsp;\t\t | IDENTIFIER LPAREN (expr (COMMA expr)*)? RPAREN\n\u0026nbsp;\t\t | IDENTIFIER LSQUARE expr RSQUARE (LSQUARE expr RSQUARE)* (EQ expr)?\n\u0026nbsp;\t     | (PLUS\\|MINUS) factor\n\u0026nbsp;\t\t | LPAREN comp-expr RPAREN\n\u0026nbsp;\t\t | NOT comp-expr\n\u0026nbsp;\t\t | array-expr\n\u0026nbsp;\t\t | if-expr\n\u0026nbsp;\t\t | for-expr\n\u0026nbsp;\t\t | func-def\nfunc-def\t | KEYWORD:function IDENTIFIER LPAREN (IDENTIFIER COLON KEYWORD:TYPE\n\u0026nbsp;\t\t | (COMMA IDENTIFIER COLON KEYWORD:TYPE)*)? RPAREN ARROW KEYWORD:TYPE\n\u0026nbsp;\t\t | LBRACE statements RBRACE\nif-expr\t\t | KEYWORD:if LPAREN expr RPAREN LBRACE statements RBRACE\n\u0026nbsp;\t\t | (if-else-expr\\|else-expr)?\nif-else-expr | KEYWORD:elif LPAREN expr RPAREN LBRACE statements RBRACE\n\u0026nbsp;\t\t | (if-else-expr\\|else-expr)?\nelse-expr\t | KEYWORD:otherwise LBRACE statements RBRACE\nfor-expr\t | KEYWORD:loop LPAREN (expr)? NEWLINE expr NEWLINE (expr)? RPAREN LBRACE statements RBRACE\narray-expr\t | LSQUARE (expr (COMMA expr)*)? RSQUARE\n\n\n## Features (pre-release 0.6.0)\n- Strings\n- Built-in Functions (`print`, `size`)\n\n## Snippets (strings, built-in functions)\nStrings:\n```sh\ngengo \u003e string s = \"Hello World!\";\nHello World!\n```\n\nNew built-in functions:\n```sh\nstring s1 = \"What does \";\nstring s2 = \"'Gengo' \";\nstring s3 = \"mean?\";\n```\n```sh\ngengo \u003e print(s1 + s2 + s3);\nWhat does 'Gengo' mean?\n```\n\n```sh\nstring name = \"Dmitrii Art\"\n```\n```sh\ngengo \u003e print(size(name));\n11\n```\n\n0.5.0 (alpha) Pre-release functionality\n\n## Features (pre-release 0.5.0)\n- Functions\n- Recursion support\n\n## Snippets (functions)\nFunction declaration:\n```sh\nfunction add(a: int, b: int) -\u003e int {\n\treturn a + b;\n};\n```\n\n```sh\nfunction sum(a: int) -\u003e int {\n\tif (a == 0) {\n\t\treturn 0;\n\t}\n\totherwise {\n\t\treturn a + sum(a - 1);\n\t};\n};\n```\n\nFunction call:\n```sh\ngengo \u003e add(10, 15 - 1);\n24\n```\n\n```sh\ngengo \u003e sum(3);\n6\n```\n\n\n## Features (pre-release 0.4.0)\n- For loops (with correct scope management)\n\n## Snippets (loops)\nFor-loop:\n\n```sh\ngengo \u003e int a = 1;\n1\ngengo \u003e loop(int i = 0; i \u003c 10; i = i + 1){ a = a * 2; };\ngengo \u003e a;\ngengo \u003e 1024\n```\n\n\n## Features (pre-release 0.3.0)\n- Comparison expressions\n- Conditions (with correct scope management)\n\n## Snippets (comparisons, conditions)\nSimple comparisons:\n\n```sh\ngengo \u003e 1 \u003e 0;\n1\ngengo \u003e 100 != 99 + 1 - 1;\n1\n```\n\nVariables included\n```sh\ngengo \u003e int a = 10; int b = 11;\n11 - returns `b` (last statement) as a result of operation\ngengo \u003e a \u003c= b;\n1\n```\n\nConditions (returns last statement result):\n```sh\ngengo \u003e int a = 10;\n10\ngengo \u003e if (a == 10) { a = 11; } elif (a == 11) { a = 12; } otherwise { a = 10; };\n11\ngengo \u003e if (a == 10) { a = 11; } elif (a == 11) { a = 12; } otherwise { a = 10; };\n12\ngengo \u003e if (a == 10) { a = 11; } elif (a == 11) { a = 12; } otherwise { a = 10; };\n10\ngengo \u003e a;\n10\n```\n\n\n## Features (pre-release 0.2.0)\n- Initializing and using variables\n- Error messages\n\n## Snippets (variables)\nInitialization and assigning (supported types - `int`, `float`):\n\n```sh\ngengo \u003e int a = 10\n10\ngengo \u003e a = a - 11\n-1\n```\n\n```sh\ngengo \u003e float b = 10\n10.000000\ngengo \u003e b / 3\n3.333333\n```\n\nInitialization and assigning 'queue':\n```sh\ngengo \u003e int t = int c = 10\n10\ngengo \u003e t\n10\ngengo \u003e c\n10\n```\n\n```sh\ngengo \u003e int d = float b = 10\n10 - returns `d` as a result of operation\ngengo \u003e d\n10\ngengo \u003e b\n10.000000\n```\n\nErrors printing:\n```sh\ngengo \u003e int a = 10\n10\ngengo \u003e a = a + b\nCalls trace:\nFile \u003cconsole input\u003e\nRun Time Error:'b' is not defined\n```\n\n\n## Features (pre-release 0.1.0)\n- Supports arithmetic operations in  console\n- Correct order of binary and unary operations\n- Print the structure of AST (Token representation)\n- Auto int/float casting\n\n\n## Snippets (arithmetic operations)\nBasic operations (`+`, `-`, `*`, `/`):\n\n```sh\ngengo \u003e 1 + 2 * 4\n(INT:1, PLUS, (INT:2, MULT, INT:4))\n9\n```\nUnary operations:\n```sh\ngengo \u003e ---1 + 100\n((MINUS, (MINUS, (MINUS, INT:1))), PLUS, INT:100)\n99\n```\nCorrect order of operations:\n```sh\ngengo \u003e (1 + 2) * 4\n12\ngengo \u003e 1 + 2 * 4\n9\ngengo \u003e 10 / 2 + 4\n9\n```\n\nTypes casting:\n```sh\ngengo \u003e 2 * 4.5 - 1\n((INT:2, MULT, FLOAT:4.5), MINUS, INT:1)\n8.000000\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmitrii-artuhov%2Fgengo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmitrii-artuhov%2Fgengo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmitrii-artuhov%2Fgengo/lists"}