[ragel-users] Problem generating code.
Husam Senussi
husam at senussi.com
Sun May 9 20:43:02 UTC 2010
Hi,
I'm trying to create RFC2822 parer but I'm having problem generating the code for some reason ragel keep running until I press CTRL C "was running for 20 minutes", below
the grammar I'm trying to use.
%%{
machine rfc2822_header;
# Common ABNF rules
cr = "\r";
lf = "\n";
crlf = cr lf;
sp = " ";
tab = "\t";
wsp = (sp | tab);
obs_fws = wsp+ ( crlf wsp+ )*;
fws = ( ( wsp* crlf )? wsp+ ) | obs_fws;
NO_WS_CTL = 0x01..0x08 | "\v" | "\f" | 0x0e..0x1f | 0x7f;
# Rules to consume comments
consumeAny = any - (")" | ")") | "(" @{fcall consumeComments;};
consumeComments := consumeAny+ ")" $!{fhold; fret; };
startComment = "(" @{fcall consumeComments;};
CFWS = ( fws? startComment )* ( ( fws? startComment ) | fws );
ctext = NO_WS_CTL | 0x21..0x27 | 0x2a..0x5b;
obs_char = 0x00..0x09 | "\v" | "\f" | 0x0e..0x7f;
obs_text = "\n"* "\r"* ( obs_char "\n"* "\r"* )*;
text = 0x01..0x09 | "\v" | "\f" | 0x0e..0x7f | obs_text;
obs_qp = "\\" 0x00..0x7f;
quoted_pair = ( "\\" text ) | obs_qp;
dtext = NO_WS_CTL | 0x21..0x5a;
dcontent = dtext | quoted_pair;
atext = alpha | digit | "!" | "#" | "$" | "%" | "&" | "'" | "*" | "+" | "-" | "/" | "=" | "?" | "^" | "_" | "`" | "{" | "|" | "}" | "~";
dot_atom_text = atext+ ( "." atext+ )*;
dot_atom = CFWS? dot_atom_text CFWS?;
qtext = NO_WS_CTL | "!" | 0x23..0x5b | 0x5d..0x7e;
qcontent = qtext | quoted_pair;
quoted_string = CFWS? "\"" ( fws? qcontent )* fws? "\"" CFWS?;
atom = CFWS? atext+ CFWS?;
word = atom | quoted_string;
# Return-Path field.
domain_literal = CFWS? "[" ( fws? dcontent )* fws? "]" CFWS?;
obs_domain = atom ( "." atom )*;
domain = dot_atom | domain_literal | obs_domain;
obs_domain_list = "@" domain ( ( CFWS | "," )* CFWS? "@" domain )*;
obs_route = CFWS? obs_domain_list ":" CFWS?;
obs_local_part = word ( "." word )*;
local_part = dot_atom | quoted_string | obs_local_part;
addr_spec = local_part "@" domain;
obs_angle_addr = CFWS? "<" obs_route? addr_spec ">" CFWS?;
obs_path = obs_angle_addr;
path = ( CFWS? "<" ( CFWS? | addr_spec ) ">" CFWS? ) | obs_path;
obs_return = "Return-Path" wsp* ":" path crlf;
obs_fields = obs_return;
main := obs_fields;
}%%
Thanks
_______________________________________________
ragel-users mailing list
ragel-users at complang.org
http://www.complang.org/mailman/listinfo/ragel-users
More information about the ragel-users
mailing list