/* * @LANG: c */ #include void alph(const char *type) { printf("%s\n", type); } struct builtin { int cs; }; %%{ machine builtin; alphtype unsigned int; variable cs fsm->cs; main := ( any @{alph("any");} | ascii @{alph("ascii");} | extend @{alph("extend");} | alpha @{alph("alpha");} | digit @{alph("digit");} | alnum @{alph("alnum");} | lower @{alph("lower");} | upper @{alph("upper");} | cntrl @{alph("cntrl");} | graph @{alph("graph");} | print @{alph("print");} | punct @{alph("punct");} | space @{alph("space");} | xdigit @{alph("xdigit");} )*; }%% %% write data; void builtin_init( struct builtin *fsm ) { %% write init; } void builtin_execute( struct builtin *fsm, const unsigned int *data, int len ) { const unsigned int *p = data; const unsigned int *pe = data+len; %% write exec; } int builtin_finish( struct builtin *fsm ) { if ( fsm->cs == builtin_error ) return -1; else if ( fsm->cs >= builtin_first_final ) return 1; return 0; } #include #define BUFSIZE 2048 struct builtin fsm; char buf[BUFSIZE]; unsigned int i; int test( const unsigned int *data, int len ) { builtin_init( &fsm ); builtin_execute( &fsm, data, len ); if ( builtin_finish( &fsm ) > 0 ) printf("ACCEPT\n"); else printf("FAIL\n"); return 0; } #define DLEN 258 unsigned int data[DLEN] = { -1, 0, 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, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256 }; int main() { test( data, DLEN ); return 0; } #ifdef _____OUTPUT_____ any any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl space any ascii extend cntrl space any ascii extend cntrl space any ascii extend cntrl space any ascii extend cntrl space any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend cntrl any ascii extend print space any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend digit alnum graph print xdigit any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend alpha alnum upper graph print xdigit any ascii extend alpha alnum upper graph print xdigit any ascii extend alpha alnum upper graph print xdigit any ascii extend alpha alnum upper graph print xdigit any ascii extend alpha alnum upper graph print xdigit any ascii extend alpha alnum upper graph print xdigit any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend alpha alnum upper graph print any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend alpha alnum lower graph print xdigit any ascii extend alpha alnum lower graph print xdigit any ascii extend alpha alnum lower graph print xdigit any ascii extend alpha alnum lower graph print xdigit any ascii extend alpha alnum lower graph print xdigit any ascii extend alpha alnum lower graph print xdigit any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend alpha alnum lower graph print any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend graph print punct any ascii extend cntrl any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any extend any ACCEPT #endif