[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [ANN] tamale-1.2 - Erlang-style pattern matching library
- From: Scott Vokes <vokes.s@...>
- Date: Sun, 26 Sep 2010 09:35:25 -0400
> I am having some trouble trying to learn more about pattern matching and
> when to use it over regular expressions.
PM and REs are different in application. Where REs apply to text /
tokenizing, PMs apply to data structures.
For example, a rule like this (broken up over several lines to
emphasize the structure):
{ { "Tree",
left={ "Tree", left=V"LL", val=V"VL", right=V"LR" },
val=V"VN",
right={ "Tree", left=V"RL", val=V"VR", right=V"RR" }
},
when=is_out_of_order,
rotated -- pass captured vars to rotated(cs) and return
transformed version
}
could be used to test for a binary tree whose nodes are no longer in
the proper order. In one expression, it extracts the pieces of the
tree structure (LL = left's left, VR = value of right, etc.), passes a
table with all the captures to is_out_of_order, and if so, it returns
a rotated version of the tree. The code to do this sort of
transformation as a series of switch or if / else if / else statements
would be quite a bit longer, while this actually looks like a template
for the (hypothetical) tree structure. You could similarly work with
XML trees (as manifested by lxp.lom), parse trees / ASTs, etc.
(Reading about pattern matching in Erlang may be confusing because
Erlang also uses pattern-matching for some string operations.)
> I work with scientific instruments and right now I am trying to build a
> disassembler. I am assuming that all of the commands that an instrument will
> respond to are encoded in it's firmware. It's my goal to extract these, that
> way I(and others) could control instrumentation without access to it's
> expensive proprietary software.
> Does Tamale for disassembly sound plausible?
Perhaps, but lexing/parsing tools may be more appropriate - tamale
is better suited to working with tables than raw byte streams. Either
way, though, you could use a collection of templates (a grammar or a
rule table) to match chunks of date and capture addresses, constants,
etc.
Scott