[ragel-users] Surpressing Mulitple Matches
Adrian Thurston
thurs... at cs.queensu.ca
Mon Apr 7 03:06:06 UTC 2008
Hi Jonathan,
I think you should consider using a scanner. Though you're not scanning
tokens, you're scanning lines. Should multiple patterns match only one
pattern action will be executed.
-Adrian
Jonathan Stott wrote:
> Hi all
>
> I'm writing a parser for some irc logs (to convert them to wiki markup and/or html) and the machine is fairly simple.
>
> eol = '\n';
> text = any -- eol;
>
> # action line (generated from /me)
>
> action_line = timestamp action_nick text %print_action eol;
>
>
> # text line, normal irc chat
>
> text_line = timestamp nick text %print_text eol;
>
>
> # system line. Joins, parts etc. Included so I can ignore it.
> # system_leader is a unique bit of text the irc client puts just after the timestamp for all system info.
>
> system_line = timestamp system_leader nick text eol;
>
>
> # hr line. A convention which has developed.
> #A line of just '-'s should be converted to a <hr />
>
> hr_line = timestamp nick '-'{3,} %print_hr eol;
>
> line = action_line | text_line | system_line | hr_line
>
> main := line*
>
> print_action, print_text both print a nicely formatted line, with two newlines, suitable for the wiki. print_hr prints '----', the wiki markup for a <hr />. Except that any hr_line, is also a valid text line, so two lines get printed. And I can't really exclude '-' from a text_line, they do get used in typing. Is there any solution to avoiding printing both lines? (Beyond the obvious one of some test like 'if this is all -s, don't print' in the print_text action)
>
> Regards
> Jon
>
> >
>
More information about the ragel-users
mailing list