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