summaryrefslogtreecommitdiff
path: root/lexer.h
blob: 952d525ff4fa1a440c91a1f8eb86bbb5d80c3499 (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
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 '\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_LBRACK ;
		  case ')' : return PTOK_RBRACK ;
		  case ',' : return PTOK_COMMA  ;
	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;
			}
	}
}