Related articles |
---|
myPatterns: pattern matching in custom notations for Java & JavaScript nic.volanschi@free.fr (Nic Volanschi) (2010-06-29) |
From: | Nic Volanschi <nic.volanschi@free.fr> |
Newsgroups: | comp.compilers |
Date: | Tue, 29 Jun 2010 20:43:16 +0200 |
Organization: | Compilers Central |
Keywords: | tools, lex, available |
Posted-Date: | 30 Jun 2010 09:50:34 EDT |
I am looking for (feedback from) potential users of an open source
library for Java and JavaScript, called myPatterns, implementing a
new concept: pattern matching in "custom notations".
What are custom notations?
Everyone knows pattern matching of strings using regular expressions.
myPatterns implements a more general notion of pattern matching:
- working not only on strings, but on any program data: numbers,
objects, collections, etc.
- using patterns written either in a pre-defined notation, subsuming
regular expressions and JSON, on in user-defined notations.
When designing a class API, programmers using this library can also
design very easily a custom syntax for matching objects of that class,
i.e. for selecting objects of a certain shape, and decomposing them
into smaller pieces.
For more details, see http://mypatterns.free.fr/
-------------------------------------------------------------------------------
Example
A balance method for red-black trees can be written very concisely
using a custom notation in which a red-rooted tree is written
"(left label right)" and a black-rooted tree is written
"[left label right]":
static final String pats[] = {"[((%a %x %b) %y %c) %z %d]",
"[(%a %x (%b %y %c)) %z %d]",
"[%a %x ((%b %y %c) %z %d)]",
"[%a %x (%b %y (%c %z %d))]"};
rbTree balance() {
Subst s = Matchbox.matchAny(this, pats);
if(s != null)
return new rbTree(red,
new rbTree(black, (rbTree)s.get('a'),
(Integer)s.get('x'),
(rbTree)s.get('b')),
(Integer)s.get('y'),
new rbTree(black, (rbTree)s.get('c'),
(Integer)s.get('z'),
(rbTree)s.get('d')));
return this;
}
Return to the
comp.compilers page.
Search the
comp.compilers archives again.