summaryrefslogtreecommitdiff
path: root/lexer/lexer.h
diff options
context:
space:
mode:
Diffstat (limited to 'lexer/lexer.h')
-rw-r--r--lexer/lexer.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/lexer/lexer.h b/lexer/lexer.h
new file mode 100644
index 0000000..2595158
--- /dev/null
+++ b/lexer/lexer.h
@@ -0,0 +1,228 @@
+static 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 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 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 'A': case 'a' : return PTOK_A ;
+ case 'C': case 'c' : return PTOK_C ;
+ case 'D': case 'd' : return PTOK_D ;
+ case 'F': case 'f' : return PTOK_F ;
+ case 'R': case 'r' : return PTOK_R ;
+ 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 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;
+ }
+}
+
+#if 0
+static int handle_dot(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_at(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_colon(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_equ(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_plus(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_minus(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_gt(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_lt(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_pipe(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_lbrack(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_rbrack(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_comma(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_b(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_e(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_x(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_y(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_s(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_p(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_dquote(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_squote(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_hash(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_scolon(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_dollar(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_percent(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+static int handle_number(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_alpha(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+
+}
+
+static int handle_other(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg) {
+ return idx+1;
+}
+
+typedef int (*ptok_func)(char *str, int idx, uint8_t lex_type, line *l, token *t, uint8_t dbg);
+
+static ptok_func ptok_handler[PTOK_OTHER+1] = {
+ [PTOK_DOT ] = handle_dot,
+ [PTOK_AT ] = handle_at,
+ [PTOK_COLON ] = handle_colon,
+ [PTOK_EQU ] = handle_equ,
+ [PTOK_PLUS ] = handle_plus,
+ [PTOK_MINUS ] = handle_minus,
+ [PTOK_GT ] = handle_gt,
+ [PTOK_LT ] = handle_lt,
+ [PTOK_PIPE ] = handle_pipe,
+ [PTOK_LBRACK ] = handle_lbrack,
+ [PTOK_RBRACK ] = handle_rbrack,
+ [PTOK_COMMA ] = handle_comma,
+ [PTOK_B ] = handle_b,
+ [PTOK_E ] = handle_e,
+ [PTOK_X ] = handle_x,
+ [PTOK_Y ] = handle_y,
+ [PTOK_S ] = handle_s,
+ [PTOK_P ] = handle_p,
+ [PTOK_DQUOTE ] = handle_dquote,
+ [PTOK_SQUOTE ] = handle_squote,
+ [PTOK_HASH ] = handle_hash,
+ [PTOK_SCOLON ] = handle_scolon,
+ [PTOK_DOLLAR ] = handle_dollar,
+ [PTOK_PERCENT] = handle_percent,
+ [PTOK_NUMBER ] = handle_number,
+ [PTOK_ALPHA ] = handle_alpha,
+ [PTOK_OTHER ] = handle_other
+};
+#endif