{"id":46597788,"url":"https://github.com/anmitalidev/able","last_synced_at":"2026-03-07T15:04:33.585Z","repository":{"id":334256010,"uuid":"1140544960","full_name":"AnmiTaliDev/able","owner":"AnmiTaliDev","description":"ABLE - Another BASIC Language Environment","archived":false,"fork":false,"pushed_at":"2026-01-23T17:14:45.000Z","size":22,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-24T07:42:58.893Z","etag":null,"topics":["basic","basic-programming-language","dialect","langdev","language","lgpl","lgplv3","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AnmiTaliDev.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":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-23T12:30:35.000Z","updated_at":"2026-01-23T17:14:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AnmiTaliDev/able","commit_stats":null,"previous_names":["anmitalidev/able"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/AnmiTaliDev/able","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnmiTaliDev%2Fable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnmiTaliDev%2Fable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnmiTaliDev%2Fable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnmiTaliDev%2Fable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AnmiTaliDev","download_url":"https://codeload.github.com/AnmiTaliDev/able/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnmiTaliDev%2Fable/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30219346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T14:02:48.375Z","status":"ssl_error","status_checked_at":"2026-03-07T14:02:43.192Z","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":["basic","basic-programming-language","dialect","langdev","language","lgpl","lgplv3","rust"],"created_at":"2026-03-07T15:04:30.316Z","updated_at":"2026-03-07T15:04:33.572Z","avatar_url":"https://github.com/AnmiTaliDev.png","language":"Rust","readme":"# ABLE - Another BASIC Language Environment\n\n**Alpha release of a BASIC dialect interpreter in Rust**\n\n[![License: LGPL-3.0](https://img.shields.io/badge/License-LGPL--3.0-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)\n[![Version](https://img.shields.io/badge/version-0.1.0-green.svg)](https://github.com/AnmiTaliDev/able)\n[![Rust](https://img.shields.io/badge/rust-1.70+-orange.svg)](https://www.rust-lang.org)\n[![Made with Rust](https://img.shields.io/badge/Made%20with-Rust-orange.svg)](https://www.rust-lang.org)\n\n## Features (Alpha)\n\n### Commands\n- `PRINT` - output values and expressions\n- `INPUT` - user data input\n- `LET` - variable assignment\n- `IF...THEN` - conditional statement\n- `GOTO` - jump to line number\n- `SLEEP` - execution delay in milliseconds\n- `END` - program termination\n\n### Functions\n- `TIME` - returns milliseconds since program start\n\n### Data Types\n- **Integers** (Integer)\n- **Strings** (String) - with `$` suffix or auto-detection\n\n### Operating Modes\n- **Program Mode**: programs with line numbers (stored in BTreeMap)\n- **Immediate Mode**: REPL for direct command execution\n\n## Building and Running\n\n```bash\n# Build in release mode\ncargo build --release\n\n# Run the interpreter\ncargo run\n\n# Run the compiled binary\n./target/release/able\n```\n\n## Interface Features\n\n✨ **Colored terminal output**\n- Commands highlighted in different colors\n- Errors highlighted in red\n- Line numbers in listing highlighted in cyan\n- Beautiful banner on startup\n\n## Project Structure\n\n```\nable/\n├── Cargo.toml           # Project configuration\n├── README.md            # Documentation\n├── LICENSE              # LGPL-3.0 license\n├── examples/            # Example programs\n│   ├── hello.bas        # Hello World\n│   ├── counter.bas      # Simple counter\n│   ├── input.bas        # Working with input\n│   ├── fibonacci.bas    # Fibonacci numbers\n│   ├── guess.bas        # \"Guess the number\" game\n│   ├── timer.bas        # Using TIME and SLEEP\n│   └── countdown.bas    # Countdown\n└── src/\n    ├── main.rs          # Entry point and REPL with colored output\n    ├── lexer.rs         # Lexical analyzer\n    ├── parser.rs        # Syntax parser\n    ├── ast.rs           # AST definitions\n    ├── env.rs           # Variable environment\n    └── interpreter.rs   # Interpreter with GOTO logic\n```\n\n## Usage Examples\n\n### Example 1: Hello World (Immediate Mode)\n```basic\n\u003e PRINT \"Hello, World!\"\nHello, World!\n```\n\n### Example 2: Counter Program\n```basic\n\u003e 10 LET X = 1\n\u003e 20 PRINT \"Counter: \"; X\n\u003e 30 LET X = X + 1\n\u003e 40 IF X \u003c= 10 THEN GOTO 20\n\u003e 50 PRINT \"Done!\"\n\u003e 60 END\n\u003e LIST\n\n  10   LET X = 1\n  20   PRINT \"Counter: \"; X\n  30   LET X = X + 1\n  40   IF X \u003c= 10 THEN GOTO 20\n  50   PRINT \"Done!\"\n  60   END\n\n\u003e RUN\n\nCounter: 1\nCounter: 2\nCounter: 3\nCounter: 4\nCounter: 5\nCounter: 6\nCounter: 7\nCounter: 8\nCounter: 9\nCounter: 10\nDone!\n```\n\n### Example 3: Data Input\n```basic\n\u003e 10 PRINT \"What is your name?\"\n\u003e 20 INPUT NAME$\n\u003e 30 PRINT \"Hello, \"; NAME$\n\u003e 40 END\n\u003e RUN\n```\n\n## REPL Commands\n\n- `LIST` - show program listing\n- `RUN` - run the program\n- `NEW` - clear program and variables\n- `VARS` - show all variables and their values\n- `HELP` / `?` - command help\n- `EXIT` / `QUIT` - exit the interpreter\n\n## Interface Features\n\n✨ **Modern REPL with extended features**\n- ⌨️ **Arrow key support** - command history navigation (↑/↓)\n- ✏️ **Line editing** - standard editing keys\n- 📝 **Command history** - saved between sessions\n- 🎨 **Colored output** - commands and errors highlighted\n- ⚡ **Quick keys**:\n  - `Ctrl+C` - clear current line\n  - `Ctrl+D` - exit\n  - `Ctrl+L` - clear screen (in some terminals)\n\n## Architectural Features\n\n### Execution Loop with GOTO\nA key component of the interpreter is the execution loop with `GOTO` support:\n\n```rust\n// Main loop in interpreter.rs\nloop {\n    // Check GOTO (Program Counter)\n    if let Some(target_line) = self.pc.take() {\n        idx = find_position(target_line);\n    }\n\n    // Execute current line\n    execute_line(idx);\n\n    // Move to next line (if no GOTO)\n    if self.pc.is_none() {\n        idx += 1;\n    }\n}\n```\n\n### Program Storage\nUses `BTreeMap\u003ci64, String\u003e` for automatic sorting of lines by numbers.\n\n## License\n\nThis project is distributed under the LGPL-3.0 license. See the LICENSE file for details.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanmitalidev%2Fable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanmitalidev%2Fable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanmitalidev%2Fable/lists"}