Sorry. I forgot to attach my little test:
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
void parse(char * str)
{
char *eof = NULL;
char *p = str; // data pointer
char *pe = str + strlen(str); // past end
int cs; // machine state
int len = 0;
char token[1024];
static char *text_start;
eof = pe;
%%{
machine parser;
write data;
action MarkStartOfName{
text_start = fpc;
}
action PrintPlayerName{
int text_len = fpc - text_start;
if (text_len > 0) {
printf("PLAYER(%.*s)\n", text_len, text_start);
}
}
playername = lower+ >MarkStartOfName ^(space 'raises' space '$' digit+ space
'to' space '$' digit+) @PrintPlayerName ;
#playername = any+ >MarkStartOfName ^ ' raises $1 to $2' /*(space 'raises'
space '$' digit+ space 'to' space '$' digit+)*/ @PrintPlayerName ;
main := playername;
write init;
write exec;
}%%
printf("\n");
}
int main()
{
parse("player raises $1 to $2");
getchar();
}
_______________________________________________
ragel-users mailing list
[email protected]
http://www.complang.org/mailman/listinfo/ragel-users