summaryrefslogtreecommitdiff
path: root/test/cases/rlhc.d/case/range.c-C-G0--goto-backend.in
blob: 0e9025bf23887e826dc62ddeec5445994a3075fb (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
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
host( "working/range.rl", 1 ) @{/*
	* @@LANG: c
	*/
	
	#include <stdio.h>
	#include <string.h>
	
	struct range
	{
		int cs;
	};
	
	
	
}@
array s8 _range_nfa_targs( 0, 0 ) = { 0, 0 };

array s8 _range_nfa_offsets( 0, 0 ) = { 0, 0, 0, 0, 0 };

array s8 _range_nfa_push_actions( 0, 0 ) = { 0, 0 };

array s8 _range_nfa_pop_trans( 0, 0 ) = { 0, 0 };

value int range_start = 1;
value int range_first_final = 3;
value int range_error = 0;

value int range_en_main = 1;

host( "working/range.rl", 21 ) @{
	
	void range_init( struct range *fsm )
	{
	}@
	{
		host( "-", 1 ) ={ fsm->cs}= = cast(int)range_start;
	}
	host( "working/range.rl", 25 ) @{
	}
	
	void range_execute( struct range *fsm, const char *_data, int _len )
	{
		const char *p = _data;
		const char *pe = _data+_len;
		
	}@
	{
		
		if ( p == pe )
		goto _test_eof;
		if ( host( "-", 1 ) ={ fsm->cs}= == 0 )
		goto _out;
		_resume:
		switch ( host( "-", 1 ) ={ fsm->cs}= ) {
			case 1:
			if ( 97 <= ( deref( data, p )) && ( deref( data, p )) <= 122 ) {
				goto ctr0;
			}
			{
				goto ctr1;
			}
			case 0:
			goto _out;
			case 2:
			if ( ( deref( data, p )) == 10 ) {
				goto ctr2;
			}
			{
				goto ctr1;
			}
			case 3:
			{
				goto ctr1;
			}
		}
		
		ctr1: host( "-", 1 ) ={ fsm->cs}= = 0; goto _again;
		ctr0: host( "-", 1 ) ={ fsm->cs}= = 2; goto _again;
		ctr2: host( "-", 1 ) ={ fsm->cs}= = 3; goto _again;
		
		_again:
		if ( host( "-", 1 ) ={ fsm->cs}= == 0 )
		goto _out;
		p += 1;
		if ( p != pe )
		goto _resume;
		_test_eof: {}
		_out: {}
	}
	host( "working/range.rl", 33 ) @{
	}
	
	int range_finish( struct range *fsm )
	{
		if ( fsm->cs == range_error )
		return -1;
		if ( fsm->cs >= range_first_final )
		return 1;
		return 0;
	}
	
	struct range fsm;
	
	void test( char *buf )
	{
		int len = strlen( buf );
		range_init( &fsm );
		range_execute( &fsm, buf, len );
		if ( range_finish( &fsm ) > 0 )
		printf("ACCEPT\n");
		else
		printf("FAIL\n");
	}
	
	int main()
	{
		test( "a\n" );
		test( "z\n" );
		test( "g\n" );
		test( "no\n" );
		test( "1\n" );
		
		return 0;
	}
	
}@