%PDF- %PDF-
| Direktori : /usr/share/doc/re2c/examples/c/eof/ |
| Current File : //usr/share/doc/re2c/examples/c/eof/05_generic_api_eof_rule.c |
/* Generated by re2c */
#line 1 "c/eof/05_generic_api_eof_rule.re"
// re2c $INPUT -o $OUTPUT
#include <assert.h>
#include <stdlib.h>
#include <string.h>
static int lex(const char *str, unsigned int len) {
// For the sake of example create a string without terminating null.
char *buf = (char*) malloc(len);
memcpy(buf, str, len);
const char *cur = buf, *lim = buf + len, *mar;
int count = 0;
for (;;) {
#line 19 "c/eof/05_generic_api_eof_rule.c"
{
char yych;
yych = cur < lim ? *cur : 0;
switch (yych) {
case ' ': goto yy3;
case '\'': goto yy5;
default:
if (cur >= lim) goto yy10;
goto yy1;
}
yy1:
++cur;
yy2:
#line 29 "c/eof/05_generic_api_eof_rule.re"
{ count = -1; break; }
#line 35 "c/eof/05_generic_api_eof_rule.c"
yy3:
++cur;
yych = cur < lim ? *cur : 0;
switch (yych) {
case ' ': goto yy3;
default: goto yy4;
}
yy4:
#line 32 "c/eof/05_generic_api_eof_rule.re"
{ continue; }
#line 46 "c/eof/05_generic_api_eof_rule.c"
yy5:
++cur;
mar = cur;
yych = cur < lim ? *cur : 0;
if (yych >= 0x01) goto yy7;
if (cur >= lim) goto yy2;
yy6:
++cur;
yych = cur < lim ? *cur : 0;
yy7:
switch (yych) {
case '\'': goto yy8;
case '\\': goto yy9;
default:
if (cur >= lim) goto yy11;
goto yy6;
}
yy8:
++cur;
#line 31 "c/eof/05_generic_api_eof_rule.re"
{ ++count; continue; }
#line 68 "c/eof/05_generic_api_eof_rule.c"
yy9:
++cur;
yych = cur < lim ? *cur : 0;
if (yych <= 0x00) {
if (cur >= lim) goto yy11;
goto yy6;
}
goto yy6;
yy10:
#line 30 "c/eof/05_generic_api_eof_rule.re"
{ break;; }
#line 80 "c/eof/05_generic_api_eof_rule.c"
yy11:
cur = mar;
goto yy2;
}
#line 33 "c/eof/05_generic_api_eof_rule.re"
}
free(buf);
return count;
}
#define TEST(s, r) assert(lex(s, sizeof(s) - 1) == r)
int main() {
TEST("", 0);
TEST("'qu\0tes' 'are' 'fine: \\'' ", 3);
TEST("'unterminated\\'", -1);
return 0;
}