[ragel-users] How to specify where to stop when scanning a string
Adrian Thurston
thurston at complang.org
Sun Nov 24 18:03:41 UTC 2013
The null character is specified in the grammar.
On 13-10-15 06:27 PM, dinesh rtp wrote:
> I have a struct,
>
> typedef struct {
> char* start_add;
> char* end_add;
> } string_def;
>
> I used the example from the documentation,
>
> #include <string.h>
> #include <stdio.h>
>
> %%{
> machine foo;
> main :=
> ( 'foo' | 'bar' )
> 0 @{ res = 1; };
> }%%
>
> %% write data;
>
>
> int main()
> {
> int cs, res = 0;
> char *p = "foo";
> char *pe = p + strlen(p) + 1;
> %% write init;
> %% write exec;
> printf("result = %i\n", res );
> return 0;
> }
>
> This works fine : " result = 1" is the output.
>
> If I tweak this a little to work the way my struct is.
>
> extern string_def new_string(char* str, int len) {
> string_def s;
> s.start_add = str;
> s.end_add = str + len;
> return s;
> }
>
> int main()
> {
> string_def str = new_string("foo\0", 4); ==> Works
> // string_def str = new_string("foo", 3); ==> does not work, I WANT
> THIS TO WORK
> int cs, res = 0;
> char *p = str.start_add;
> char *pe = str.end_add;
> %% write init;
> %% write exec;
> printf("result = %i\n", res );
> return 0;
> }
>
> Is ragel looking for a null character? How to override this behavior??
>
>
> _______________________________________________
> ragel-users mailing list
> ragel-users at complang.org
> http://www.complang.org/mailman/listinfo/ragel-users
>
_______________________________________________
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