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