[ragel-users] % Leaving Action Questions
Adrian Thurston
thurs... at cs.queensu.ca
Mon Feb 25 22:01:59 UTC 2008
Hi Francois,
The problem is the any* at the beginning of bla. It creates an ambiguity for the bla*. Changing that to bla** will fix that.
You might want to consider using a scanner to find the interesting things. In the event of only a partial match it can default to another pattern.
Cheers,
Adrian
-----Original Message-----
From: "francois.beausoleil" <francois.beausoleil at gmail.com>
Date: Mon, 25 Feb 2008 07:47:18
To:ragel-users <ragel-users at googlegroups.com>
Subject: [ragel-users] % Leaving Action Questions
Hi all !
I'm writing a state machine that would detect interesting sentences
from withing a commit message. For instance, given this:
Fix problem with dada. Fixes #231. Assign to qa.
There are 2 interesting events here: "Fixes #231" and "Assign to qa".
At the moment, I'm just concentrating on "Fixes #231". The machine
works, kind of. Running my machine prints this:
$ rake ragel:compile && ruby bla.rb "Fix problem with dada. Fixes
#231. Assign to qa."
(in /home/francois/src/fogbugz-svnhook)
Fixing 23
Fixing 231
Fixing 231.
My specification is:
%%{
machine commit_message_parser;
action mark { mark = p }
action bugid { bugid = data[mark .. p] }
action close { action = :close }
action fix { action = :fix }
action notify { listener.send(action, bugid.pack("C*")) }
bugid = ("#" ('1'..'9')>mark ('0'..'9')**) % bugid;
close = ( (/close/i 's'? ':'? space*) %close bugid%notify);
fix = ( (/fix/i 'es'? ':'? space*) %fix bugid%notify);
bla = (any* (close | fix));
main := bla*;
}%%
Isn't % supposed to fire only on leaving ? Why is the bugid machine
leaving at 3 and 1 and '.' ? Why is '.' even in the bugid machine ?
And then, I still have the problem of parsing "Closes #123, #234 and
#345." !
Thanks for any help !
François
More information about the ragel-users
mailing list