GitHub - yoav-lavi/melody: Melody is a language that compiles to regular express...
source link: https://github.com/yoav-lavi/melody
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Melody is a language designed to compile to and maintain a 1-1 relationship with regular expressions, while being more readable and maintainable.
The current goal is supporting the JavaScript implementation of regular expressions.
Melody is very new and is unstable at the moment
Examples
Note: these are for the currently supported syntax and may change
Batman Theme
16 of "na"; 2 of match { <space>; "batman"; } // 🦇🦸♂️
Turns into
/(?:na){16}(?:\sbatman){2}/
Twitter Hashtag
"#"; some of <word>; // #melody
Turns into
/#\w+/
Introductory Courses
some of <word>; <space>; "1"; 2 of <digit>; // classname 1xx
Turns into
/\w+\s1\d{2}/
Indented Code (2 spaces)
some of match { 2 of <space>; } some of char; ";"; // let value = 5;
Turns into
/(?:\s{2})+.+;/
Install
From Source
git clone https://github.com/yoav-lavi/melody.git cd melody cargo install --path .
CLI Usage
melody [OPTIONS] <PATH> OPTIONS: -f, --file <FILE> write to an output file -n, --no-color print output with no color -V, --version print version information -h, --help print help information
Keywords
of
- used after a number or a range and before a sequence to be matched, e.g.5 of "A";
, equivalent to regex{5}
to
- used to create a range (either as a quantifier or as a character range), e.g.5 to 9
, equivalent to regex{5,9}
if before anof
or[5-9]
otherwisecapture
- used to open acapture
or namedcapture
block, equivalent to regex(...)
match
- used to open amatch
block, equivalent to regex(?:...)
start
- matches the start of the string, equivalent to regex^
end
- matches the end of the string, equivalent to regex$
char
- matches a single character, equivalent to regex.
some
- used withof
to express 1 or more of a pattern, equivalent to regex+
over
- used withof
to express more than an amount of a pattern, equivalent to regex{6,}
(assumingover 5 of ...
)
Symbols
<space>
- equivalent to regex\s
<newline>
- equivalent to regex\n
<tab>
- equivalent to regex\t
<return>
- equivalent to regex\r
<feed>
- equivalent to regex\f
<null>
- equivalent to regex\0
<digit>
- equivalent to regex\d
<vertical>
- equivalent to regex\v
<word>
- equivalent to regex\w
Concepts
"..."
or'...'
- used to mark a literal part of the match
Extras
//
- used to mark comments
File Extension
The Melody file extension is .mdy
Syntax Highlighting
VSCode
Get the extension here
Feature Status
- Implemented
- Partially implemented
- Not implemented
- Unclear whether this will be implemented
- Unclear what the syntax will be
Melody Regex Status
5 of "hello";
(?:hello){5}
5 to 7 of "A";
A{5,7}
capture { ... }
(...)
capture name { ... }
(?<name>...)
match { ... }
(?:...)
<space>;
\s
A to Z;
[A-Z]
a to z;
[a-z]
0 to 9;
[0-9]
// comment
start;
^
end;
$
<newline>;
\n
<tab>;
\t
<return>;
\r
<feed>;
\f
<null>;
\0
<digit>;
\d
<vertical>;
\v
<word>;
\w
"...";
(raw)
...
'...';
(raw)
...
'\'';
'
"\"";
"
support non alphanumeric characters
output to file
no color output
char
.
some of
+
syntax highlighting extension
over 5 of "A";
A{6,}
enforce group close
tests
not <space>;
\S
not <digit>;
\D
not <word>;
\W
<backspace>
[\b]
file watcher
nested groups
(...(...))
multiple ranges
[a-zA-Z0-9]
general cleanup and modules
auto escape for non Melody patterns
rust library / macro
TS/JS build step
more robust parsing mechanism (ast)
not "A";
[^A]
flags: global, multiline, ...
/.../gm...
/* comment */
maybe of
?
maybe some of
*
either of ..., ...
|
any of "a", "b", "c"
[abc]
... not before ...
...(?!...)
... not after ...
...(?<!...)
... before ...
...(?=...)
... after ...
...(?<=...)
(?)
*?
(?)
\#
(?)
\k<name>
(?)
\p{...}
(?)
\P{...}
(?)
\uYYYY
(?)
\xYY
(?)
\ddd
(?)
\cY
(?)
\b
(?)
\B
(?)
$1
(?)
$`
(?)
$&
(?)
x20
(?)
x{06fa}
variables / macros
regex optimization
standard library / patterns
reverse compiler
Acknowledgments
Melody uses:
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK