1// re2c $INPUT -o $OUTPUT  --input custom
2#include <stdio.h>
3
4char peek (FILE * f)
5{
6    char c = fgetc (f);
7    ungetc (c, f);
8    return c;
9}
10
11bool lex (FILE * f, const long limit)
12{
13    long marker;
14    long ctxmarker;
15#   define YYCTYPE        char
16#   define YYPEEK()       peek (f)
17#   define YYSKIP()       fgetc (f)
18#   define YYBACKUP()     marker = ftell (f)
19#   define YYBACKUPCTX()  ctxmarker = ftell (f)
20#   define YYRESTORE()    fseek (f, marker, SEEK_SET)
21#   define YYRESTORECTX() fseek (f, ctxmarker, SEEK_SET)
22#   define YYLESSTHAN(n)  limit - ftell (f) < n
23#   define YYFILL(n)      {}
24    /*!re2c
25        "int buffer " / "[" [0-9]+ "]" { return true; }
26        *                              { return false; }
27    */
28}
29
30int main ()
31{
32    const char buffer [] = "int buffer [1024]";
33    const char fn [] = "input.txt";
34
35    FILE * f = fopen (fn, "w");
36    fwrite (buffer, 1, sizeof (buffer), f);
37    fclose (f);
38
39    f = fopen (fn, "rb");
40    int result = !lex (f, sizeof (buffer));
41    fclose (f);
42
43    return result;
44}
45