{"id":24957232,"url":"https://github.com/picotools/plan","last_synced_at":"2025-03-28T20:42:33.594Z","repository":{"id":269552855,"uuid":"907518570","full_name":"PicoTools/plan","owner":"PicoTools","description":"PLAN (Pico LANguage) - simple scripting language for embedding in Golang applications","archived":false,"fork":false,"pushed_at":"2025-02-26T13:32:49.000Z","size":2084,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-02-26T14:35:32.389Z","etag":null,"topics":["antlr4","golang","language","pico","plan","scripting-language"],"latest_commit_sha":null,"homepage":"","language":"Go","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/PicoTools.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2024-12-23T19:10:39.000Z","updated_at":"2025-02-26T13:34:26.000Z","dependencies_parsed_at":"2024-12-24T11:51:59.805Z","dependency_job_id":"c7300f51-3e7e-453b-93cb-6394f2309ee1","html_url":"https://github.com/PicoTools/plan","commit_stats":null,"previous_names":["picotools/plan"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PicoTools%2Fplan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PicoTools%2Fplan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PicoTools%2Fplan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PicoTools%2Fplan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PicoTools","download_url":"https://codeload.github.com/PicoTools/plan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246100436,"owners_count":20723467,"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":["antlr4","golang","language","pico","plan","scripting-language"],"created_at":"2025-02-03T06:54:58.152Z","updated_at":"2025-03-28T20:42:33.589Z","avatar_url":"https://github.com/PicoTools.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PLAN\n\nPLAN (Pico LANguage) is a scripting language (interpreter-based) for embedding in Golang applications, based on ANTLR4 grammar.\n\n## Why yet another scripting language?\n\nThe development of this language was part of the creation of a C2 framework — [Pico](https://github.com/PicoTools/pico), which we position as an interface between the operator and the beacon.  \n\nThe PLAN runtime is used in the [operator's CLI](https://github.com/PicoTools/pico-cli) to extend the built-in functionality of interactions with the server and beacons.  \n\nPerformance was not the primary goal of this language, but it can be easily achieved with display features written in native Golang.\n\n## Syntax\n\nPLAN syntax resembles `C` in structure (brackets and semicolons), while its typing system and execution logic are more similar to `Python`.\n\nA `C`-like example (explicit brackets and semicolons):\n```c\nfn fib(n) {\n  if n \u003c 2 {\n    return n;\n  } else {\n    return fib(n-2) + fib(n-1);\n  }\n}\n\nprintln(fib(35));\n```\n\nA `Python`-like example (dynamic typing of variable `a`):\n```c\na = 1;\na = [a, 2, 3, 4];\na = {\"test\": a};\na = \"hello\";\na = a + \" world\";\nprintln(a);\n```\n\nFor more information and examples, see [syntax](docs/syntax.md).\n\n## Data Types\n\nAll data types sit on top of an abstraction called object.\n\nPLAN comes with the following data types, which implement the object interface:\n- `bool` (bool in Golang)\n- `dict` (map in Golang, where the key is a string)\n- `float` (float64 in Golang)\n- `int` (int64 in Golang)\n- `list` (a list of objects)\n- `null` (an empty object)\n- `str` (a string in Golang, operating with runes)\n- `closures` (a special type of object that can be called inline)\n\nFor more information and examples, see data [data types](docs/data_types.md).\n\n## References\n\nHere you can find additional information:\n- [Syntax](docs/syntax.md)\n- [Data types](docs/data_types.md)\n- [Builtin functions](docs/builtin_functions.md)\n- [Builtin methods](docs/builtin_methods.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpicotools%2Fplan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpicotools%2Fplan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpicotools%2Fplan/lists"}