1// re2c $INPUT -o $OUTPUT -bci --eager-skip
2#include <stdlib.h>
3#include <stdio.h>
4#include <string.h>
5
6#define YYGETCONDITION()  yy_state
7#define YYSETCONDITION(s) yy_state = s
8#define YYCTYPE         char
9#define YYCURSOR        p
10#define YYLIMIT         (s+l)
11#define YYMARKER        q
12#define YYFILL(n)
13
14#define STATE(name)  yyc##name
15
16static enum YYCONDTYPE yy_state;
17
18/*!types:re2c */
19
20int scan(char *s, int l)
21{
22	char *p = s;
23	char *q = 0;
24	char *t;
25
26	for(;;)
27	{
28		t = p;
29/*!re2c
30	re2c:indent:top = 2;
31
32	TABS_AND_SPACES = [ \t]*;
33	LITERAL_DOLLAR = "$"[a-zA-Z];
34
35	<INITIAL>LITERAL_DOLLAR {
36		printf("FOUND %s\n", t);
37		continue;
38	}
39
40	<ST_VALUE>LITERAL_DOLLAR+ {
41		printf("Found $ or $\\<x>\n");
42		continue;
43	}
44
45	<ST_VALUE>TABS_AND_SPACES {
46		YYSETCONDITION(STATE(INITIAL));
47		printf("Found spaces\n");
48	}
49
50	<INITIAL>"\000"		{ printf("EOF\n");	return 0; }
51	<INITIAL>[^]			{ printf("ERR\n");	return 1; }
52
53*/
54	}
55}
56
57int main(int argc, char **argv)
58{
59	if (argc > 1)
60	{
61		return scan(argv[1], strlen(argv[1]));
62	}
63	else
64	{
65		fprintf(stderr, "%s <expr>\n", argv[0]);
66		return 1;
67	}
68}
69