{"id":13456765,"url":"https://github.com/yoav-lavi/melody","last_synced_at":"2025-05-13T16:10:27.730Z","repository":{"id":37969122,"uuid":"458907326","full_name":"yoav-lavi/melody","owner":"yoav-lavi","description":"Melody is a language that compiles to regular expressions and aims to be more readable and maintainable","archived":false,"fork":false,"pushed_at":"2024-11-24T19:14:44.000Z","size":3985,"stargazers_count":4665,"open_issues_count":8,"forks_count":56,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-04-23T20:53:14.190Z","etag":null,"topics":["compiler","language","melody","melodylang","regex","regexp","regular-expression","rust"],"latest_commit_sha":null,"homepage":"https://yoav-lavi.github.io/melody/book/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yoav-lavi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-02-13T19:18:21.000Z","updated_at":"2025-04-22T13:14:54.000Z","dependencies_parsed_at":"2024-01-30T02:59:16.359Z","dependency_job_id":null,"html_url":"https://github.com/yoav-lavi/melody","commit_stats":{"total_commits":606,"total_committers":13,"mean_commits":46.61538461538461,"dds":"0.29537953795379535","last_synced_commit":"4ec5e111b4b9cdefc24406f9f970481345d19516"},"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoav-lavi%2Fmelody","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoav-lavi%2Fmelody/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoav-lavi%2Fmelody/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yoav-lavi%2Fmelody/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yoav-lavi","download_url":"https://codeload.github.com/yoav-lavi/melody/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250514767,"owners_count":21443208,"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":["compiler","language","melody","melodylang","regex","regexp","regular-expression","rust"],"created_at":"2024-07-31T08:01:27.365Z","updated_at":"2025-04-23T20:53:18.578Z","avatar_url":"https://github.com/yoav-lavi.png","language":"Rust","funding_links":[],"categories":["Rust","Applications","应用程序 Applications","Rust 程序设计","Uncategorized","compiler","rust","JavaScript regex libraries","Projects"],"sub_categories":["Text processing","文本处理 Text processing","网络服务_其他","Uncategorized","Abstracted regex syntax"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Melody Logo\" height=\"250px\" src=\"https://user-images.githubusercontent.com/14347895/159069215-7da8f087-65d5-4982-9592-639c1d81e7f1.svg#gh-dark-mode-only\"\u003e\n    \u003cimg alt=\"Melody Logo\" height=\"250px\" src=\"https://user-images.githubusercontent.com/14347895/159069181-53bce5b3-a831-43f1-8c14-af6c6ed7b92b.svg#gh-light-mode-only\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/yoav-lavi/melody/actions/workflows/rust.yml\"\u003e\n    \u003cimg alt=\"Rust CI\" src=\"https://github.com/yoav-lavi/melody/actions/workflows/rust.yml/badge.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/melody_compiler\"\u003e\n    \u003cimg alt=\"Crates.io\" src=\"https://img.shields.io/crates/v/melody_compiler?label=compiler\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/melody_cli\"\u003e\n    \u003cimg alt=\"Crates.io\" src=\"https://img.shields.io/crates/v/melody_cli?label=cli\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://melody-playground.vercel.app\"\u003e\n    \u003cimg alt=\"melody playground\" src=\"https://img.shields.io/badge/melody-playground-brightgreen\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://yoav-lavi.github.io/melody/book/\"\u003e\n    \u003cimg alt=\"melody playground\" src=\"https://img.shields.io/badge/melody-book-blue\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\nMelody is a language that compiles to ECMAScript regular expressions, while aiming to be more readable and maintainable.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"400\" alt=\"code example\" src=\"https://user-images.githubusercontent.com/14347895/154124756-ddbd3c84-f8b2-45bd-b624-2c510482c4e2.png\"\u003e\n\u003c/p\u003e\n\n## Examples\n\nNote: these are for the currently supported syntax and may change\n\n### Batman Theme \u0026nbsp;\u003csub\u003e\u003csup\u003e\u003ca href=\"https://melody-playground.vercel.app?content=MTYlMjBvZiUyMCUyMm5hJTIyJTNCJTBBJTBBMiUyMG9mJTIwbWF0Y2glMjAlN0IlMEElMjAlMjAlM0NzcGFjZSUzRSUzQiUwQSUyMCUyMCUyMmJhdG1hbiUyMiUzQiUwQSU3RCUwQSUwQSUyRiUyRiUyMCVGMCU5RiVBNiU4NyVGMCU5RiVBNiVCOCVFMiU4MCU4RCVFMiU5OSU4MiVFRiVCOCU4Rg==\"\u003etry in playground\u003c/a\u003e\u003c/sup\u003e\u003c/sub\u003e\n\n```rust\n16 of \"na\";\n\n2 of match {\n  \u003cspace\u003e;\n  \"batman\";\n}\n\n// 🦇🦸‍♂️\n```\n\nTurns into\n\n```regex\n(?:na){16}(?: batman){2}\n```\n\n### Twitter Hashtag \u0026nbsp;\u003csub\u003e\u003csup\u003e\u003ca href=\"https://melody-playground.vercel.app?content=JTIyJTIzJTIyJTNCJTBBc29tZSUyMG9mJTIwJTNDd29yZCUzRSUzQiUwQSUwQSUyRiUyRiUyMCUyM21lbG9keQ==\"\u003etry in playground\u003c/a\u003e\u003c/sup\u003e\u003c/sub\u003e\n\n```rust\n\"#\";\nsome of \u003cword\u003e;\n\n// #melody\n```\n\nTurns into\n\n```regex\n#\\w+\n```\n\n### Introductory Courses \u0026nbsp;\u003csub\u003e\u003csup\u003e\u003ca href=\"https://melody-playground.vercel.app?content=c29tZSUyMG9mJTIwJTNDYWxwaGFiZXRpYyUzRSUzQiUwQSUzQ3NwYWNlJTNFJTNCJTBBJTIyMSUyMiUzQiUwQTIlMjBvZiUyMCUzQ2RpZ2l0JTNFJTNCJTBBJTBBJTJGJTJGJTIwY2xhc3NuYW1lJTIwMXh4\"\u003etry in playground\u003c/a\u003e\u003c/sup\u003e\u003c/sub\u003e\n\n```rust\nsome of \u003calphabetic\u003e;\n\u003cspace\u003e;\n\"1\";\n2 of \u003cdigit\u003e;\n\n// classname 1xx\n```\n\nTurns into\n\n```regex\n[a-zA-Z]+ 1\\d{2}\n```\n\n### Indented Code (2 spaces) \u0026nbsp;\u003csub\u003e\u003csup\u003e\u003ca href=\"https://melody-playground.vercel.app?content=c29tZSUyMG9mJTIwbWF0Y2glMjAlN0IlMEElMjAlMjAyJTIwb2YlMjAlM0NzcGFjZSUzRSUzQiUwQSU3RCUwQSUwQXNvbWUlMjBvZiUyMCUzQ2NoYXIlM0UlM0IlMEElMjIlM0IlMjIlM0IlMEElMEElMkYlMkYlMjBsZXQlMjB2YWx1ZSUyMCUzRCUyMDUlM0I=\"\u003etry in playground\u003c/a\u003e\u003c/sup\u003e\u003c/sub\u003e\n\n```rust\nsome of match {\n  2 of \u003cspace\u003e;\n}\n\nsome of \u003cchar\u003e;\n\";\";\n\n// let value = 5;\n```\n\nTurns into\n\n```regex\n(?: {2})+.+;\n```\n\n### Semantic Versions \u0026nbsp;\u003csub\u003e\u003csup\u003e\u003ca href=\"https://melody-playground.vercel.app?content=JTNDc3RhcnQlM0UlM0IlMEElMEFvcHRpb24lMjBvZiUyMCUyMnYlMjIlM0IlMEElMEFjYXB0dXJlJTIwbWFqb3IlMjAlN0IlMEElMjAlMjBzb21lJTIwb2YlMjAlM0NkaWdpdCUzRSUzQiUwQSU3RCUwQSUwQSUyMi4lMjIlM0IlMEElMEFjYXB0dXJlJTIwbWlub3IlMjAlN0IlMEElMjAlMjBzb21lJTIwb2YlMjAlM0NkaWdpdCUzRSUzQiUwQSU3RCUwQSUwQSUyMi4lMjIlM0IlMEElMEFjYXB0dXJlJTIwcGF0Y2glMjAlN0IlMEElMjAlMjBzb21lJTIwb2YlMjAlM0NkaWdpdCUzRSUzQiUwQSU3RCUwQSUwQSUzQ2VuZCUzRSUzQiUwQSUwQSUyRiUyRiUyMHYxLjAuMA==\"\u003etry in playground\u003c/a\u003e\u003c/sup\u003e\u003c/sub\u003e\n\n```rust\n\u003cstart\u003e;\n\noption of \"v\";\n\ncapture major {\n  some of \u003cdigit\u003e;\n}\n\n\".\";\n\ncapture minor {\n  some of \u003cdigit\u003e;\n}\n\n\".\";\n\ncapture patch {\n  some of \u003cdigit\u003e;\n}\n\n\u003cend\u003e;\n\n// v1.0.0\n```\n\nTurns into\n\n```regex\n^v?(?\u003cmajor\u003e\\d+)\\.(?\u003cminor\u003e\\d+)\\.(?\u003cpatch\u003e\\d+)$\n```\n\n## Playground\n\nYou can try Melody in your browser using the [playground](https://melody-playground.vercel.app/)\n\n## Book\n\nRead the book [here](https://yoav-lavi.github.io/melody/book/)\n\n## Install\n\n### Cargo\n\n```sh\ncargo install melody_cli\n```\n\n### From Source\n\n```sh\ngit clone https://github.com/yoav-lavi/melody.git\ncd melody\ncargo install --path crates/melody_cli\n```\n\n### Binary\n\n- macOS binaries (`aarch64` and `x86_64`) can be downloaded from the [release page](https://github.com/yoav-lavi/melody/releases)\n\n### Community\n\n- [Brew](https://formulae.brew.sh/formula/melody) (macOS and Linux)\n  \u003cdetails\u003e\u003csummary\u003eInstallation instructions\u003c/summary\u003e\n\n  ```sh\n  brew install melody\n  ```\n\n  \u003c/details\u003e\n\n- [Arch Linux](https://aur.archlinux.org/packages/melody) (maintained by [@ilai-deutel](https://github.com/ilai-deutel))\n  \u003cdetails\u003e\u003csummary\u003eInstallation instructions\u003c/summary\u003e\n\n  1. Installation with an AUR helper, for instance using `paru`:\n\n     ```bash\n     paru -Syu melody\n     ```\n\n  2. Install manually with `makepkg`:\n\n     ```bash\n     git clone https://aur.archlinux.org/melody.git\n     cd melody\n     makepkg -si\n     ```\n\n  \u003c/details\u003e\n\n- [NixOS](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/me/melody/package.nix) (maintained by [@jyooru](https://github.com/jyooru))\n  \u003cdetails\u003e\u003csummary\u003eInstallation instructions\u003c/summary\u003e\n\n  1. Declarative installation using `/etc/nixos/configuration.nix`:\n\n     ```nix\n     { pkgs, ... }:\n     {\n       environment.systemPackages = with pkgs; [\n         melody\n       ];\n     }\n     ```\n\n  2. Imperative installation using `nix-env`:\n\n     ```sh\n     nix-env -iA nixos.melody\n     ```\n\n  \u003c/details\u003e\n\n## CLI Usage\n\n```\nUSAGE:\n    melody [OPTIONS] [INPUT_FILE_PATH]\n\nARGS:\n    \u003cINPUT_FILE_PATH\u003e    Read from a file\n                         Use '-' and or pipe input to read from stdin\n\nOPTIONS:\n    -f, --test-file \u003cTEST_FILE\u003e\n            Test the compiled regex against the contents of a file\n\n        --generate-completions \u003cCOMPLETIONS\u003e\n            Outputs completions for the selected shell\n            To use, write the output to the appropriate location for your shell\n\n    -h, --help\n            Print help information\n\n    -n, --no-color\n            Print output with no color\n\n    -o, --output \u003cOUTPUT_FILE_PATH\u003e\n            Write to a file\n\n    -r, --repl\n            Start the Melody REPL\n\n    -t, --test \u003cTEST\u003e\n            Test the compiled regex against a string\n\n    -V, --version\n            Print version information\n```\n\n## Changelog\n\nSee the changelog [here](https://github.com/yoav-lavi/melody/blob/main/CHANGELOG.md) or in the [release page](https://github.com/yoav-lavi/melody/releases)\n\n## Syntax\n\n### Quantifiers\n\n- `... of` - used to express a specific amount of a pattern. equivalent to regex `{5}` (assuming `5 of ...`)\n- `... to ... of` - used to express an amount within a range of a pattern. equivalent to regex `{5,9}` (assuming `5 to 9 of ...`)\n- `over ... of` - used to express more than an amount of a pattern. equivalent to regex `{6,}` (assuming `over 5 of ...`)\n- `some of` - used to express 1 or more of a pattern. equivalent to regex `+`\n- `any of` - used to express 0 or more of a pattern. equivalent to regex `*`\n- `option of` - used to express 0 or 1 of a pattern. equivalent to regex `?`\n\nAll quantifiers can be preceded by `lazy` to match the least amount of characters rather than the most characters (greedy). Equivalent to regex `+?`, `*?`, etc.\n\n### Symbols\n\n- `\u003cchar\u003e` - matches any single character. equivalent to regex `.`\n- `\u003cspace\u003e` - matches a space character. equivalent to regex ` `\n- `\u003cwhitespace\u003e` - matches any kind of whitespace character. equivalent to regex `\\s` or `[ \\t\\n\\v\\f\\r]`\n- `\u003cnewline\u003e` - matches a newline character. equivalent to regex `\\n`\n- `\u003ctab\u003e` - matches a tab character. equivalent to regex `\\t`\n- `\u003creturn\u003e` - matches a carriage return character. equivalent to regex `\\r`\n- `\u003cfeed\u003e` - matches a form feed character. equivalent to regex `\\f`\n- `\u003cnull\u003e` - matches a null characther. equivalent to regex `\\0`\n- `\u003cdigit\u003e` - matches any single digit. equivalent to regex `\\d` or `[0-9]`\n- `\u003cvertical\u003e` - matches a vertical tab character. equivalent to regex `\\v`\n- `\u003cword\u003e` - matches a word character (any latin letter, any digit or an underscore). equivalent to regex `\\w` or `[a-zA-Z0-9_]`\n- `\u003calphabetic\u003e` - matches any single latin letter. equivalent to regex `[a-zA-Z]`\n- `\u003calphanumeric\u003e` - matches any single latin letter or any single digit. equivalent to regex `[a-zA-Z0-9]`\n- `\u003cboundary\u003e` - Matches a character between a character matched by `\u003cword\u003e` and a character not matched by `\u003cword\u003e` without consuming the character. equivalent to regex `\\b`\n- `\u003cbackspace\u003e` - matches a backspace control character. equivalent to regex `[\\b]`\n\nAll symbols can be preceeded with `not` to match any character other than the symbol\n\n### Special Symbols\n\n- `\u003cstart\u003e` - matches the start of the string. equivalent to regex `^`\n- `\u003cend\u003e` - matches the end of the string. equivalent to regex `$`\n\n### Unicode Categories\n\nNote: these are not supported when testing in the CLI (`-t` or `-f`) as the regex engine used does not support unicode categories. These require using the `u` flag.\n\n- `\u003ccategory::letter\u003e` - any kind of letter from any language\n  - `\u003ccategory::lowercase_letter\u003e` - a lowercase letter that has an uppercase variant\n  - `\u003ccategory::uppercase_letter\u003e` - an uppercase letter that has a lowercase variant.\n  - `\u003ccategory::titlecase_letter\u003e` - a letter that appears at the start of a word when only the first letter of the word is capitalized\n  - `\u003ccategory::cased_letter\u003e` - a letter that exists in lowercase and uppercase variants\n  - `\u003ccategory::modifier_letter\u003e` - a special character that is used like a letter\n  - `\u003ccategory::other_letter\u003e` - a letter or ideograph that does not have lowercase and uppercase variants\n- `\u003ccategory::mark\u003e` - a character intended to be combined with another character (e.g. accents, umlauts, enclosing boxes, etc.)\n  - `\u003ccategory::non_spacing_mark\u003e` - a character intended to be combined with another character without taking up extra space (e.g. accents, umlauts, etc.)\n  - `\u003ccategory::spacing_combining_mark\u003e` - a character intended to be combined with another character that takes up extra space (vowel signs in many Eastern languages)\n  - `\u003ccategory::enclosing_mark\u003e` - a character that encloses the character it is combined with (circle, square, keycap, etc.)\n- `\u003ccategory::separator\u003e` - any kind of whitespace or invisible separator\n  - `\u003ccategory::space_separator\u003e` - a whitespace character that is invisible, but does take up space\n  - `\u003ccategory::line_separator\u003e` - line separator character U+2028\n  - `\u003ccategory::paragraph_separator\u003e` - paragraph separator character U+2029\n- `\u003ccategory::symbol\u003e` - math symbols, currency signs, dingbats, box-drawing characters, etc\n  - `\u003ccategory::math_symbol\u003e` - any mathematical symbol\n  - `\u003ccategory::currency_symbol\u003e` - any currency sign\n  - `\u003ccategory::modifier_symbol\u003e` - a combining character (mark) as a full character on its own\n  - `\u003ccategory::other_symbol\u003e` - various symbols that are not math symbols, currency signs, or combining characters\n- `\u003ccategory::number\u003e` - any kind of numeric character in any script\n  - `\u003ccategory::decimal_digit_number\u003e` - a digit zero through nine in any script except ideographic scripts\n  - `\u003ccategory::letter_number\u003e` - a number that looks like a letter, such as a Roman numeral\n  - `\u003ccategory::other_number\u003e` - a superscript or subscript digit, or a number that is not a digit 0–9 (excluding numbers from ideographic scripts)\n- `\u003ccategory::punctuation\u003e` - any kind of punctuation character\n  - `\u003ccategory::dash_punctuation\u003e` - any kind of hyphen or dash\n  - `\u003ccategory::open_punctuation\u003e` - any kind of opening bracket\n  - `\u003ccategory::close_punctuation\u003e` - any kind of closing bracket\n  - `\u003ccategory::initial_punctuation\u003e` - any kind of opening quote\n  - `\u003ccategory::final_punctuation\u003e` - any kind of closing quote\n  - `\u003ccategory::connector_punctuation\u003e` - a punctuation character such as an underscore that connects words\n  - `\u003ccategory::other_punctuation\u003e` - any kind of punctuation character that is not a dash, bracket, quote or connectors\n- `\u003ccategory::other\u003e` - invisible control characters and unused code points\n  - `\u003ccategory::control\u003e` - an ASCII or Latin-1 control character: 0x00–0x1F and 0x7F–0x9F\n  - `\u003ccategory::format\u003e` - invisible formatting indicator\n  - `\u003ccategory::private_use\u003e` - any code point reserved for private use\n  - `\u003ccategory::surrogate\u003e` - one half of a surrogate pair in UTF-16 encoding\n  - `\u003ccategory::unassigned\u003e` - any code point to which no character has been assigned\n\nThese descriptions are from [regular-expressions.info](https://www.regular-expressions.info/unicode.html)\n\n### Character Ranges\n\n- `... to ...` - used with digits or alphabetic characters to express a character range. equivalent to regex `[5-9]` (assuming `5 to 9`) or `[a-z]` (assuming `a to z`)\n\n### Literals\n\n- `\"...\"` or `'...'` - used to mark a literal part of the match. Melody will automatically escape characters as needed. Quotes (of the same kind surrounding the literal) should be escaped\n\n### Raw\n\n- \u003ccode\u003e\\`...\\`\u003c/code\u003e - added directly to the output without any escaping\n\n### Groups\n\n- `capture` - used to open a `capture` or named `capture` block. capture patterns are later available in the list of matches (either positional or named). equivalent to regex `(...)`\n- `match` - used to open a `match` block, matches the contents without capturing. equivalent to regex `(?:...)`\n- `either` - used to open an `either` block, matches one of the statements within the block. equivalent to regex `(?:...|...)`\n\n### Assertions\n\n- `ahead` - used to open an `ahead` block. equivalent to regex `(?=...)`. use after an expression\n- `behind` - used to open an `behind` block. equivalent to regex `(?\u003c=...)`. use before an expression\n\nAssertions can be preceeded by `not` to create a negative assertion (equivalent to regex `(?!...)`, `(?\u003c!...)`)\n\n### Variables\n\n- `let .variable_name = { ... }` - defines a variable from a block of statements. can later be used with `.variable_name`. Variables must be declared before being used. Variable invocations cannot be quantified directly, use a group if you want to quantify a variable invocation\n\n  example:\n\n  ```rs\n  let .a_and_b = {\n    \"a\";\n    \"b\";\n  }\n\n  .a_and_b;\n  \"c\";\n\n  // abc\n  ```\n\n### Extras\n\n- `/* ... */`, `// ...` - used to mark comments (note: `// ...` comments must be on separate line)\n\n## File Extension\n\nThe Melody file extensions are `.mdy` and `.melody`\n\n## Crates\n\n- `melody_compiler` - The Melody compiler [📦](https://crates.io/crates/melody_compiler) [📖](https://docs.rs/melody_compiler)\n- `melody_cli` - A CLI wrapping the Melody compiler [📦](https://crates.io/crates/melody_cli) [📖](https://docs.rs/crate/melody_cli)\n- `melody_wasm` - WASM bindings for the Melody compiler\n\n## Extensions\n\n- [VSCode](https://marketplace.visualstudio.com/items?itemName=yoavlavi.melody)\n- [IntelliJ](https://plugins.jetbrains.com/plugin/18693-melody)\n\n## Packages\n\n- [NodeJS](https://www.npmjs.com/package/melodyc)\n- [Deno](https://deno.land/x/melody)\n\n## Integrations\n\n- [Babel Plugin](https://www.npmjs.com/package/babel-plugin-melody)\n\n## Performance\n\nLast measured on v0.20.0\n\nMeasured on an 8 core 2021 MacBook Pro 14-inch, Apple M1 Pro using [criterion](https://github.com/bheisler/criterion.rs):\n\n- 8 lines:\n\n  ```\n  compiler/normal (8 lines)\n                            time:   [4.3556 µs 4.3674 µs 4.3751 µs]\n  slope  [4.3556 µs 4.3751 µs] R^2            [0.9996144 0.9996931]\n  mean   [4.3377 µs 4.3678 µs] std. dev.      [16.019 ns 30.154 ns]\n  median [4.3270 µs 4.3777 µs] med. abs. dev. [3.1402 ns 41.334 ns]\n  ```\n\n- 1M lines:\n\n  ```\n  compiler/long input (1M lines)\n                            time:   [470.04 ms 472.35 ms 474.78 ms]\n  mean   [470.04 ms 474.78 ms] std. dev.      [2.0458 ms 5.3453 ms]\n  median [469.54 ms 475.24 ms] med. abs. dev. [734.10 µs 6.8144 ms]\n  ```\n\n- Deeply nested:\n\n  ```\n  compiler/deeply nested\n                            time:   [4.2357 µs 4.2561 µs 4.2782 µs]\n  slope  [4.2357 µs 4.2782 µs] R^2            [0.9988854 0.9988087]\n  mean   [4.2474 µs 4.2752 µs] std. dev.      [13.698 ns 29.574 ns]\n  median [4.2426 µs 4.2819 µs] med. abs. dev. [2.7127 ns 43.193 ns]\n  ```\n\nTo reproduce, run `cargo bench` or `cargo xtask benchmark`\n\n## Future Feature Status\n\n🐣 - Partially implemented\n\n❌ - Not implemented\n\n❔ - Unclear what the syntax will be\n\n❓ - Unclear whether this will be implemented\n\n| Melody                          | Regex            | Status |\n| ------------------------------- | ---------------- | ------ |\n| `not \"A\";`                      | `[^A]`           | 🐣     |\n| variables / macros              |                  | 🐣     |\n| `\u003c...::...\u003e`                    | `\\p{...}`        | 🐣     |\n| `not \u003c...::...\u003e`                | `\\P{...}`        | 🐣     |\n| file watcher                    |                  | ❌     |\n| multiline groups in REPL        |                  | ❌     |\n| `flags: global, multiline, ...` | `/.../gm...`     | ❔     |\n| (?)                             | `\\#`             | ❔     |\n| (?)                             | `\\k\u003cname\u003e`       | ❔     |\n| (?)                             | `\\uYYYY`         | ❔     |\n| (?)                             | `\\xYY`           | ❔     |\n| (?)                             | `\\ddd`           | ❔     |\n| (?)                             | `\\cY`            | ❔     |\n| (?)                             | `$1`             | ❔     |\n| (?)                             | \u003ccode\u003e$\\`\u003c/code\u003e | ❔     |\n| (?)                             | `$\u0026`             | ❔     |\n| (?)                             | `x20`            | ❔     |\n| (?)                             | `x{06fa}`        | ❔     |\n| `any of \"a\", \"b\", \"c\"` \\*       | `[abc]`          | ❓     |\n| multiple ranges \\*              | `[a-zA-Z0-9]`    | ❓     |\n| regex optimization              |                  | ❓     |\n| standard library / patterns     |                  | ❓     |\n| reverse compiler                |                  | ❓     |\n\n\\* these are expressable in the current syntax using other methods\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoav-lavi%2Fmelody","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyoav-lavi%2Fmelody","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyoav-lavi%2Fmelody/lists"}