[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