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

Reply via email to