feat(lexer): add more options
This commit is contained in:
parent
dc3cfc5fbe
commit
dcc52e2850
3 changed files with 44 additions and 13 deletions
|
|
@ -150,6 +150,36 @@ mrk_lexer_err mrk_lexer_next(mrk_token *out, mrk_lexer *lexer) {
|
|||
mrk_lexer_advance_eq(lexer, c);
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_equals);
|
||||
break;
|
||||
case '\t':
|
||||
mrk_lexer_advance_eq(lexer, c);
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_tabs);
|
||||
break;
|
||||
case '>':
|
||||
mrk_lexer_advance_eq(lexer, c);
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_right_angle_brackets);
|
||||
break;
|
||||
case '!':
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_bang);
|
||||
break;
|
||||
case '[':
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_left_bracket);
|
||||
break;
|
||||
case ']':
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_right_bracket);
|
||||
break;
|
||||
case '(':
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_left_paren);
|
||||
break;
|
||||
case ')':
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_right_paren);
|
||||
break;
|
||||
case '\\':
|
||||
if (mrk_lexer_peek(lexer) == '\n') {
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_line_break);
|
||||
} else {
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_backslash);
|
||||
}
|
||||
break;
|
||||
// Two consecutive newlines constitute a blank line, otherwise they're
|
||||
// ignored as whitespace
|
||||
case '\n':
|
||||
|
|
@ -157,26 +187,20 @@ mrk_lexer_err mrk_lexer_next(mrk_token *out, mrk_lexer *lexer) {
|
|||
mrk_lexer_advance(lexer);
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_blank_line);
|
||||
} else {
|
||||
mrk_lexer_reset(lexer);
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_newline);
|
||||
}
|
||||
break;
|
||||
case ' ': {
|
||||
/* if (mrk_lexer_peek(lexer) == ' ' && mrk_lexer_peek_n(lexer,)) */
|
||||
// Either a double space or a line break
|
||||
if (mrk_lexer_peek(lexer) == ' ' && mrk_lexer_peek_n(lexer, 1) == '\n') {
|
||||
mrk_lexer_advance_n(lexer, 2);
|
||||
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_line_break);
|
||||
} else {
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_space);
|
||||
mrk_lexer_advance_eq(lexer, ' ');
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_spaces);
|
||||
}
|
||||
} break;
|
||||
case '\t':
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_tab);
|
||||
break;
|
||||
case '>':
|
||||
mrk_lexer_emit(out, lexer, mrk_token_type_right_angle_bracket);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue