summaryrefslogtreecommitdiff
path: root/lexer.h
blob: 3a9951eed6e8f6f44e4c5c44e79ff13c35360063 (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
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 '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_X:
		case PTOK_Y:
		case PTOK_S:
		case PTOK_P: return 1;
		default    : return 0;
	}
}