summaryrefslogtreecommitdiff
path: root/lexer.h
blob: dc478cd5de91eac3ab30299845a2a8e7c3c46ac8 (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
static inline uint8_t isdelm(char c, uint8_t dbg) {
	switch (c) {
		default  : return 0x00;
		case '\0':
		case '\n': return 0x01;
		case ',' : return 0x02;
		case '\"': return 0x04;
		case '\'': return 0x08;
		case '\t':
		case ' ' : return 0x10;
	}
}

static inline uint8_t isdelm2(char c, uint8_t dbg) {
	switch (c) {
		default  : return 0;
		case ')' :
		case ',' :
		case '.' :
		case '+' :
		case '<' :
		case '|' :
		case '>' :
		case '-' :
		case ':' :
		case '=' :
		case ';' :
		case '\0':
		case '\n': return 1;
		case '\t':
		case ' ' : return 2;
	}
}

static inline uint8_t get_ptok(char c, uint8_t dbg) {
	switch (c) {
		  case '.' : return PTOK_DOT	;
		  case '@' : return PTOK_AT	;
		  case ':' : return PTOK_COLON	;
		  case '=' : return PTOK_EQU	;
		  case '+' : return PTOK_PLUS	;
		  case '-' : return PTOK_MINUS	;
		  case '>' : return PTOK_GT	;
		  case '<' : return PTOK_LT	;
		  case '|' : return PTOK_PIPE	;
		  case '(' : return PTOK_LBRACK	;
		  case ')' : return PTOK_RBRACK	;
		  case ',' : return PTOK_COMMA	;
	case 'B': case 'b' : return PTOK_B	;
	case 'E': case 'e' : return PTOK_E	;
	case 'X': case 'x' : return PTOK_X	;
	case 'Y': case 'y' : return PTOK_Y	;
	case 'S': case 's' : return PTOK_S	;
	case 'P': case 'p' : return PTOK_P	;
		  case '\"': return PTOK_DQUOTE	;
		  case '\'': return PTOK_SQUOTE	;
		  case '#' : return PTOK_HASH	;
		  case ';' : return PTOK_SCOLON	;
		  case '$' : return PTOK_DOLLAR	;
		  case '%' : return PTOK_PERCENT;
		  default  :
			if (isdigit(c)) {
				return PTOK_NUMBER;
			} else if (isalpha(c) || c == '_') {
				return PTOK_ALPHA;
			} else {
				return PTOK_OTHER;
			}
	}
}

static inline uint8_t is_altok(uint8_t ptok, uint8_t dbg) {
	switch (ptok) {
		case PTOK_B:
		case PTOK_E:
		case PTOK_X:
		case PTOK_Y:
		case PTOK_S:
		case PTOK_P: return 1;
		default    : return 0;
	}
}