Wrap text
Report abuse
|
|
#include
#include
%%{
machine test;
action one { printf("%c\n", *(&fc-1)); }
action two { printf("%c%c\n", *(&fc-2), *(&fc-1)); }
action ans { exit(0); }
TheUnknown = (
start: (
[4] -> StartsWithFour |
(digit - [4]) -> OneDigit
),
StartsWithFour: (
[2] @ans -> final |
(digit - [2]) -> TwoDigits |
'\n' @one -> start
),
OneDigit: (
digit -> TwoDigits |
'\n' @one -> start
),
TwoDigits: (
'\n' @two -> start
)
);
#ans = '42\n' @{ fbreak; exit(0); };
#one = digit '\n' @{ printf("%s\n", (p - 2)); };
#two = digit digit '\n' @{ printf("%s%s\n", (p - 2), (p - 1)); };
#main := (ans | one | two)*;
main := TheUnknown;
}%%
#define BUFSIZE 100
%% write data;
int main()
{
char buf[BUFSIZE];
char *p;
int cs;
while (fgets(buf, sizeof(buf), stdin) != 0) {
p = buf;
%%{
write init;
write exec noend;
}%%
}
return 0;
}
|