summaryrefslogtreecommitdiff
path: root/src/config/PARSING-preprocess.txt
blob: e81c86e6c9c646cc737d7d2a128d0a6c6e7ec316 (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
 Automaton for the preprocessor:


class	|	0	1	2	3	4
st\ev	|	\0	\n	!	space	other

START	|		print		print	print
0	|	END	START	CMD	NORMAL	NORMAL

NORMAL	|		print	print	print	print
1	|	END	START	NORMAL	NORMAL	NORMAL

CMD	|					add
2	|	END	START	IGNORE	CMD1	CMD2

IGNORE	|
3	|	END	START	IGNORE	IGNORE	IGNORE

CMD1	|					add
4	|	X	X	X	CMD1	CMD2

CMD2	|				idcmd   add
5	|	X	X	X	ARG	CMD2

ARG	|					add
6	|	X	X	ARG1	ARG	ARG1

ARG1	|	proc	proc    add     add     add
7	|	END	START	ARG1	ARG1	ARG1

states: 0-7 plus END and X -> 4 bits
actions: 4. -> 8 bits total, fits in a char.

print 0x10 copies the character to stdout
add   0x20 adds the character to the processing string
idcmd 0x40 ids the processing string for an !include cmd
proc  0x80 gets the filename and procs the include