{"id":16344105,"url":"https://github.com/aaronjanse/interlocking-braces","last_synced_at":"2025-07-17T03:31:47.155Z","repository":{"id":109449963,"uuid":"103197491","full_name":"aaronjanse/interlocking-braces","owner":"aaronjanse","description":"The esolang where code like {(}) is the norm","archived":false,"fork":false,"pushed_at":"2017-12-09T07:28:27.000Z","size":30,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-18T08:36:10.504Z","etag":null,"topics":["esolang"],"latest_commit_sha":null,"homepage":"","language":"Python","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/aaronjanse.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":"2017-09-11T23:16:44.000Z","updated_at":"2017-11-16T01:01:29.000Z","dependencies_parsed_at":"2023-05-17T18:00:42.812Z","dependency_job_id":null,"html_url":"https://github.com/aaronjanse/interlocking-braces","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aaronjanse/interlocking-braces","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronjanse%2Finterlocking-braces","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronjanse%2Finterlocking-braces/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronjanse%2Finterlocking-braces/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronjanse%2Finterlocking-braces/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aaronjanse","download_url":"https://codeload.github.com/aaronjanse/interlocking-braces/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronjanse%2Finterlocking-braces/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265563001,"owners_count":23788626,"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":["esolang"],"created_at":"2024-10-11T00:26:53.594Z","updated_at":"2025-07-17T03:31:47.110Z","avatar_url":"https://github.com/aaronjanse.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Demo of program flow. The numbers and underscores are for visual effect, and the braces are what make the instruction pointer jump around.\n\n![Demo of program flow](https://raw.githubusercontent.com/aaronduino/interlocking-braces/master/demo.gif?raw=True)\n\n## How to run the interpreter\nThe only argument is the file that you want to run.\n\nFor example, this is how you would run the file `bounce.ib`:\n\n```\npython3 __main__.py bounce.ib\n```\n\n## Language Specs\n\nControl Flow:  \n`(` `)` `[` `]` `{` `}` jump to matching brace  \n\n`?` pop top of stack; skip next char if \u003e0  \n`;` skip next char (unconditionally)  \n\n`\u0026` terminate the program  \n\nStack Operations:  \n_Note: Trying to get the top element from an empty stack returns 0_  \n\n`~ ` switch active stack  \n\n`^` push from register  \n`v` pop to register (but don't change the register)  \n\n`\\` swap top two elements  \n`:` duplicate top element  \n\n`$` pop the top of the stack and discard  \n\n`#` get integer from user  \n`@` get character from user  \n\nI/O:  \n`.` pop the top of the stack and print as integer  \n`,` pop the top of the stack and print as ASCII character  \n\nLiterals:  \n`123` specify numbers like normal  \n`_` delimit numbers (if needed)  \n`\"abc\"` string literal  \n`i\"abc\"` string literal put in stack in reverse (so that it will be popped in order)  \n\nArithmetic:  \n`+`\n`-`\n`*`\n`/`\n`%`\n`=`\n`\u003e`\n`\u003c`\n`!`\n`|`\n\nMisc:  \n`w` wait for 1 ms  \n\nExamples:\n\n```\n(hello world)\ni\"Hello, world!\";(,:?)\n```\n\n```\n(counter)\n;(1+:.)\n```\n\n```\n(fibonacci)\n0v;(^1+:v+:.)\n```\n\n```\n(factorial)\n1~#v;[1+:^\\v~^*~v:^=?]~.\n```\n\n```\n(factorial -- explained)\n1~      (add 1 to left stack)\n#v      (store input in register)\n;[      (enter loop)\n  1+    (add 1 to counter)\n  :     (make a copy)\n  ^\\v   (swap inputted value with counter)\n  ~     (move to left stack)\n  ^     (push the counter (on the register) onto the stack)\n  *     (multiply)\n  ~     (move back to right stack)\n  v     (put inputted value back in register)\n:^=?]   (if counter \u003e inputted value, exit)\n~.      (print value on left stack)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaronjanse%2Finterlocking-braces","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faaronjanse%2Finterlocking-braces","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaronjanse%2Finterlocking-braces/lists"}