Can now correctly parse escaped characters

This commit is contained in:
2023-02-09 08:44:08 +00:00
parent fc67d6a18b
commit 932401c26d

View File

@@ -170,21 +170,34 @@ static Toy_Token makeIntegerOrFloat(Toy_Lexer* lexer) {
return token; return token;
} }
static bool isEscapableCharacter(char c) {
switch (c) {
case 'n':
case 't':
case '\\':
case '"':
return true;
default:
return false;
}
}
static Toy_Token makeString(Toy_Lexer* lexer, char terminator) { static Toy_Token makeString(Toy_Lexer* lexer, char terminator) {
while (!isAtEnd(lexer)) { while (!isAtEnd(lexer)) {
//skip escaped terminators //stop if you've hit the terminator
if (peek(lexer) == '\\' && peekNext(lexer) == terminator) {
advance(lexer);
advance(lexer);
continue;
}
//actually escape if you've hit the terminator
if (peek(lexer) == terminator) { if (peek(lexer) == terminator) {
advance(lexer); //eat terminator advance(lexer); //eat terminator
break; break;
} }
//skip escaped control characters
if (peek(lexer) == '\\' && isEscapableCharacter(peekNext(lexer))) {
advance(lexer);
advance(lexer);
continue;
}
//otherwise //otherwise
advance(lexer); advance(lexer);
} }