mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-16 07:14:07 +10:00
Can now correctly parse escaped characters
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user