summaryrefslogtreecommitdiff
path: root/test/patact.rl
blob: 864299d5a0b891bc21a4a833367dd16b2b6b9098 (plain)
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
/*
 * @LANG: indep
 */

char comm;
int top;
int stack[32];
ptr ts;
ptr te;
int act;
int val;
%%
%%{
	machine patact;

	other := |* 
		[a-z]+ => { prints "word\n"; };
		[0-9]+ => { prints "num\n"; };
		[\n ] => { prints "space\n"; };
	*|;

	exec_test := |* 
		[a-z]+ => { prints "word (w/lbh)\n"; fexec te-1; fgoto other; };
		[a-z]+ ' foil' => { prints "word (c/lbh)\n"; };
		[\n ] => { prints "space\n"; };
		'22' => { prints "num (w/switch)\n"; };
		[0-9]+ => { prints "num (w/switch)\n"; fexec te-1; fgoto other;};
		[0-9]+ ' foil' => {prints "num (c/switch)\n"; };
		'!';# => { prints "immdiate\n"; fgoto exec_test; };
	*|;

	semi := |* 
		';' => { prints "in semi\n"; fgoto main; };
	*|;

	main := |* 
		[a-z]+ => { prints "word (w/lbh)\n"; fhold; fgoto other; };
		[a-z]+ ' foil' => { prints "word (c/lbh)\n"; };
		[\n ] => { prints "space\n"; };
		'22' => { prints "num (w/switch)\n"; };
		[0-9]+ => { prints "num (w/switch)\n"; fhold; fgoto other;};
		[0-9]+ ' foil' => {prints "num (c/switch)\n"; };
		';' => { prints "going to semi\n"; fhold; fgoto semi;};
		'!' => { prints "immdiate\n"; fgoto exec_test; };
	*|;
}%%
/* _____INPUT_____
"abcd foix\n"
"abcd\nanother\n"
"123 foix\n"
"!abcd foix\n"
"!abcd\nanother\n"
"!123 foix\n"
";"
_____INPUT_____ */
/* _____OUTPUT_____
word (w/lbh)
word
space
word
space
ACCEPT
word (w/lbh)
word
space
word
space
ACCEPT
num (w/switch)
num
space
word
space
ACCEPT
immdiate
word (w/lbh)
word
space
word
space
ACCEPT
immdiate
word (w/lbh)
word
space
word
space
ACCEPT
immdiate
num (w/switch)
num
space
word
space
ACCEPT
going to semi
in semi
ACCEPT
_____OUTPUT_____ */