{"id":23085869,"url":"https://github.com/sty00a4-code/nody","last_synced_at":"2025-10-17T23:14:35.696Z","repository":{"id":211644340,"uuid":"729646363","full_name":"sty00a4-code/nody","owner":"sty00a4-code","description":null,"archived":false,"fork":false,"pushed_at":"2023-12-09T22:14:39.000Z","size":86,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-09T04:23:43.469Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sty00a4-code.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}},"created_at":"2023-12-09T22:13:50.000Z","updated_at":"2023-12-09T22:14:09.000Z","dependencies_parsed_at":"2023-12-09T23:21:02.087Z","dependency_job_id":"941d8fc6-7331-487d-bdaf-a0bfda78a9be","html_url":"https://github.com/sty00a4-code/nody","commit_stats":null,"previous_names":["sty00a4-code/nody"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sty00a4-code%2Fnody","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sty00a4-code%2Fnody/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sty00a4-code%2Fnody/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sty00a4-code%2Fnody/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sty00a4-code","download_url":"https://codeload.github.com/sty00a4-code/nody/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247027376,"owners_count":20871529,"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":[],"created_at":"2024-12-16T18:12:03.005Z","updated_at":"2025-10-17T23:14:30.646Z","avatar_url":"https://github.com/sty00a4-code.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nody\nA lisp-looking programming language for fun in Rust.\n\nIt is made to be pretty easy to understand and be rewritten in other programming lanuages.\nNody uses function overloading, meaning that a function can have different definitions depending on the arguments passed in.\n\n# Content\n- [Guide](#guide)\n    - [Syntax](#syntax)\n    - [Values and Types](#values-and-types)\n- [Contact](#contact)\n\n# Guide\n\nYou can look at some samples in the `samples/` directory.\n\n## Syntax\n\nNody has a lisp-like syntax as already mentioned, having every function call wrapped in `(` and `)` to mark the end. Most programming languages have two parts for grammatical analysis, *lexing* and then *parsing*, but because the syntax of Nody is so simple, I decided to combine the two parts which I just called *scanning*. Instead of scanning the file for so called *tokens*, which the lexer does, the *scanner* instantly converts the source file to a tree-node structure. This saves some time on the pre-interpretation stage.\n\n| name    | representation\n|---------|---------------\n| none    | `()`\n| int     | `1`, `2`, ...\n| float   | `1.5`, `0.1`, ...\n| char    | `'a'`, `'b'`, ...\n| bool    | `true` / `false`\n| string  | `\"...\"`\n| type    | `int`, `float`, ... see [types](#types)\n| word    | `name`, `age123`, `\u003c`, ... *any chars ended by white space*\n| key     | `@name`, `@age123`, `@\u003c`, ... *a word with `@` in front*\n| node    | `(anything ...)` a head node with following arguements which can be any type of node\n| body    | `{...}` a collection of any kind of node\n| vector  | `[...]` a collection of any kind of node that return a value\n| closure | `#...` a container for any kind of node saved as a closure value used for functions\n| params  | `$(word type ...)` a collection of pairs of words and types or nodes that return types used for functions\n| object  | `${word anything ...}` a collection of pairs of words and values\n\n**Comments** are made by starting with a `;`. Until a new line starts, everything in-between will be ignored by *scanner*.\n\n## Values and Types\n\nThe language is pretty strict with it's types, even though it's interpreted.\n\n| name      | examples\n|-----------|----------\n| int       | `1`, `2`, ... any natural number\n| float     | `1.5`, `0.1`, ... any decimal point number\n| char      | `1.5`, `0.1`, ... any decimal point number\n| bool      | `true` / `false`\n| str       | `\"...\"` a string of chars\n| vec       | `[...]` a sequence of values\n| key       | `@...` a word as a value used for referencing\n| index     | a index of a vector as a value used for referencing\n| path      | a key of an object as a value used for referencing\n| closure   | `#...` a container for any kind of node as a value used for functions\n| params    | a key of an object as a value used for referencing\n| fn        | a procedure that takes in parameters and a closure to execute that might return a value\n| native-fn | like a `fn` but written in the interpreters programming language\n| object    | `${age 18 ...}` a collection of pairs of words and values as a value\n| type      | `int`, `float`, ... any type name in this list\n| any       | a special type as it has no value of it's type, used for parameters as it matches with any other type\n\n# Contact\n\n**Discord**: `sty00a4#8189`\n\n**Gmail**: `sty00a4.code@gmail.com`\n\nHelp is always welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsty00a4-code%2Fnody","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsty00a4-code%2Fnody","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsty00a4-code%2Fnody/lists"}